|
--- |
|
base_model: |
|
- Qwen/Qwen2.5-3B-Instruct-AWQ |
|
language: |
|
- ru |
|
- en |
|
library_name: transformers |
|
license: apache-2.0 |
|
pipeline_tag: text-generation |
|
--- |
|
|
|
--- |
|
|
|
## FractalGPT/RuQwen2.5-3B-Instruct-AWQ |
|
|
|
--- |
|
|
|
### Our products |
|
- [FractalGPT](https://fractalgpt.ru) |
|
|
|
### Model Overview |
|
|
|
- **RuQwen2.5-3B-Instruct-AWQ** 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)**: 16 for Q and 2 for KV |
|
- **Context Length**: Supports a full context of 131,072 tokens and generation of up to 8,192 tokens |
|
- **Quantization**: AWQ 4 bit |
|
- **Base model**: Qwen/Qwen2.5-3B-Instruct-AWQ |
|
|
|
### 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. |
|
|
|
* [**Run example in Collab**](https://colab.research.google.com/drive/1gQmvUVUmnepi6i2As67bHoscnRl6uwKY?usp=sharing) |
|
|
|
``` |
|
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 = RuQwen2ForCausalLM.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则提供更详细的医疗术语分类,适用于临床应用。 |
|
|
|
Также существуют специализированные системы для конкретных областей медицины, такие как терминология для хирургии, терапии, педиатрии и т.д. |
|
|
|
Классификация медицинских терминов позволяет упорядочить информацию, сделать ее доступной для широкого круга пользователей и обеспечивает стандартизацию терминологии, что важно для точного понимания и эффективного общения между врачами, пациентами и медицинскими работниками. |
|
``` |
|
|
|
Our model's answer |
|
``` |
|
Классификация медицинских терминов играет ключевую роль в медицине и информационных системах. Вот несколько основных подходов к классификации медицинских терминов: |
|
|
|
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**: Это терминология, используемая в клинической практике, которая может включать термины из SNOMED, ICD и других систем. |
|
|
|
6. **Pharmacopoeias**: Эти документы обычно содержат классификацию лекарственных препаратов и их применения. |
|
|
|
Каждая из этих систем имеет свои особенности и области применения. Например, ICD используется для классификации заболеваний и причин смерти, в то время как MeSH и SNOMED используются для классификации медицинской информации и терминологии соответственно. |
|
|
|
Также существуют более специализированные системы классификации, такие как терминология для конкретных областей медицины (например, терминология для хирургии или терминология для педиатрии). |
|
|
|
Классификация медицинских терминов позволяет упорядочить информацию, сделать ее доступной для широкого круга пользователей и обеспечивает стандартизацию терминологии, что важно для эффективного общения между врачами, пациентами и другими участниками медицинского процесса. |
|
``` |