--- license: apache-2.0 language: - ru - en base_model: - Qwen/Qwen2.5-3B-Instruct pipeline_tag: text-generation library_name: transformers --- --- ## 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](https://qwen.readthedocs.io/en/latest/quantization/awq.html) 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: ```python 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. ```python 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: добавить ```