marattt's picture
Upload RuQwen2ForCausalLM
35a1ee6 verified
|
raw
history blame
7.95 kB
metadata
base_model:
  - Qwen/Qwen2.5-3B-Instruct
language:
  - ru
  - en
library_name: transformers
license: apache-2.0
pipeline_tag: text-generation

FractalGPT/RuQwen2.5-3b-instruct


Model Overview

  • RuQwen2.5-3b-instruct by FractalGPT is a language model tailored to deliver high-quality Russian language output. Building upon the Qwen2.5 series, it is optimized for Russian-language tasks while retaining broad multilingual support.

  • Improved Russian Language Quality: Adaptations have significantly enhanced the fluency, accuracy, and coherence of Russian text generation, making it an excellent choice for Russian-language applications.

Model Specifications

  • Type: Instruction-tuned Causal Language Model
  • Training Stages: Pretraining & Instruction Tuning
  • Architecture: Transformer with RoPE, SwiGLU, RMSNorm, and Attention QKV bias
  • Layers: 36
  • Attention Heads (GQA): 24 for Q, 4 for KV
  • Context Length: Supports a full context of 131,072 tokens and generation of up to 8,192 tokens

Requirements

The code of Qwen2.5 has been in the latest Hugging face transformers and we advise you to use the latest version of transformers.

pip install autoawq -q
pip install --upgrade torch -q
pip install --upgrade transformers -q

With transformers<4.37.0, you will encounter the following error:

KeyError: 'qwen2'

Also check out our AWQ documentation for more usage guide. With pytorch<2.4.0, you will encounter the following error:

AttributeError: module 'torch.library' has no attribute 'register_fake'

Quickstart

We use a special RuQwen2ForCausalLM class to work with this model:

from transformers import Qwen2ForCausalLM, AutoConfig, AutoTokenizer
import torch

class RuQwen2ForCausalLM(Qwen2ForCausalLM):
    def __init__(self, config):
        super().__init__(config)

        if hasattr(self, "lm_head") and isinstance(self.lm_head, torch.nn.Linear):
            if self.lm_head.bias is None:
                self.config.add_bias_to_lm_head = True
                self._add_bias_to_lm_head()

    def _add_bias_to_lm_head(self):
        """Добавляет bias в lm_head, если его нет."""
        old_lm_head = self.lm_head
        # lm_head с bias
        self.lm_head = torch.nn.Linear(
            old_lm_head.in_features,
            old_lm_head.out_features,
            dtype=self.model.dtype,
            bias=True,
        )
        with torch.no_grad():
            self.lm_head.weight = old_lm_head.weight
            torch.nn.init.zeros_(self.lm_head.bias)

    @classmethod
    def from_pretrained(cls, model_name, *args, **kwargs):
        # Загружает модель с конфигурацией
        model = super().from_pretrained(model_name, *args, **kwargs)

        if hasattr(model.config, "add_bias_to_lm_head") and not model.config.add_bias_to_lm_head:
            model._add_bias_to_lm_head()

        return model

    def save_pretrained(self, save_directory, *args, **kwargs):
        self.config.add_bias_to_lm_head = self.lm_head.bias is not None
        super().save_pretrained(save_directory, *args, **kwargs)

Here provides a code snippet with apply_chat_template to show you how to load the tokenizer and model and how to generate contents.

def generate(messages):
  input_ids = tokenizer.apply_chat_template(messages, tokenize=True, add_generation_prompt=True, return_tensors="pt").to(model.device)
  output = model.generate(input_ids,
                          max_new_tokens=1024,
                          do_sample=False,
                          temperature=None,
                          top_k=None,
                          top_p=None)
  generated_text = tokenizer.decode(output[0], skip_special_tokens=False)#.split('<|im_start|>assistant')[1]
  return generated_text

model_name = 'FractalGPT/RuQwen2.5-3B-Instruct-AWQ'
model = Qwen2ForCausalLMWithBias.from_pretrained(model_name, torch_dtype=torch.float16)
tokenizer = AutoTokenizer.from_pretrained(model_name)

prompt = "Классификация медицинских терминов"
messages = [
    {"role": "system", "content": "You are RuQwen, created by FractalGPT. You are a helpful assistant."},
    {"role": "user", "content": prompt}
]

print(generate(messages))

Example of improvements

Question: 'Классификация медицинских терминов'

The answer to the original model

Классификация медицинских терминов играет ключевую роль в медицине и информационных системах. Вот несколько основных подходов к классификации медицинских терминов:

1. **International Classification of Diseases (ICD)**: Это стандартная система классификации заболеваний и причин смерти, разработанная ВОЗ. Она используется во многих странах для классификации медицинских случаев.

2. **Medical Subject Headings (MeSH)**: Это система классификации медицинской литературы, разработанная National Library of Medicine (NLM). MeSH помогает организовать информацию о медицинских исследованиях и статьях.

3. **Systematized Nomenclature of Medicine (SNOMED)**: SNOMED International предоставляет глубоко специализированную систему классификации медицинских терминов. Она предназначена для использования в больницах, клиниках и других медицинских учреждениях.

4. **Unified Medical Language System (UMLS)**: Это расширяемая система классификации медицинских терминов, которая объединяет данные из различных источников, таких как ICD-10, MeSH и другие.

5. **Clinical Terms**: Это система классификации медицинских терминов, разработанная для использования в клинических системах управления пациентами (EHR).

6. **Pharmaceutical Product Names (PPNs)**: Это система классификации названий лекарственных препаратов, разработанная для обеспечения уникальности и стандартизации названий.

Каждая из этих систем имеет свои особенности и области применения. Например, ICD主要用于疾病和死亡原因的分类,而MeSH主要用于医学文献的分类。SNOMED则提供更详细的医疗术语分类,适用于临床应用。

Также существуют специализированные системы для конкретных областей медицины, такие как терминология для хирургии, терапии, педиатрии и т.д.

Классификация медицинских терминов позволяет упорядочить информацию, сделать ее доступной для широкого круга пользователей и обеспечивает стандартизацию терминологии, что важно для точного понимания и эффективного общения между врачами, пациентами и медицинскими работниками.<|im_end|>

Our model's answer

TODO: добавить