File size: 11,672 Bytes
24882be
35a1ee6
6a32fcf
24882be
 
 
 
35a1ee6
 
24882be
 
 
 
6a32fcf
24882be
 
 
5917fbe
 
 
24882be
 
6a32fcf
24882be
 
 
 
 
 
 
 
e8877ab
2b97d63
0c22e64
fcc96b1
f9d6809
0c22e64
 
 
53ac632
 
 
0c22e64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15bbc04
0c22e64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15bbc04
0c22e64
 
 
 
 
 
 
 
 
 
 
2b97d63
479f2a4
0c22e64
 
 
 
 
 
 
 
 
1d94137
 
 
79148ea
a40342a
1d94137
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0c72882
1d94137
 
 
 
0c72882
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
0c22e64
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
---
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 используются для классификации медицинской информации и терминологии соответственно.

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

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