marattt's picture
Update README.md
a40342a verified
|
raw
history blame
7.95 kB
---
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: добавить
```