68 lines
2.5 KiB
Markdown
68 lines
2.5 KiB
Markdown
|
|
---
|
|||
|
|
language:
|
|||
|
|
- ru
|
|||
|
|
license: apache-2.0
|
|||
|
|
tags:
|
|||
|
|
- text-generation
|
|||
|
|
- pytorch
|
|||
|
|
- causal-lm
|
|||
|
|
- llama
|
|||
|
|
model_name: Clornet-150m
|
|||
|
|
pipeline_tag: text-generation
|
|||
|
|
datasets:
|
|||
|
|
- uonlp/CulturaX
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# Clornet 150M
|
|||
|
|
|
|||
|
|
**Clornet** - это предварительно обученная Decoder-only языковая модель объемом **150 миллионов параметров**, построенная на базе классической архитектуры **Llama** и оптимизированная для генерации и обработки русскоязычного текста.
|
|||
|
|
|
|||
|
|
Модель была обучена с нуля на отфильтрованном русскоязычном корпусе данных и демонстрирует стабильную сходимость с итоговым показателем перплексии **22.59**.
|
|||
|
|
|
|||
|
|
## Основные характеристики
|
|||
|
|
|
|||
|
|
| Параметр | Значение |
|
|||
|
|
| :--- | :--- |
|
|||
|
|
| **Объем параметров** | ~150M |
|
|||
|
|
| **Архитектура** | Llama |
|
|||
|
|
| **Размер словаря** | 24,576 токенов |
|
|||
|
|
| **Длина контекста** | 2048 токенов |
|
|||
|
|
| **Основной язык обучения** | Русский |
|
|||
|
|
| **Перплексия** | **22.59** (на валидационной выборке) |
|
|||
|
|
| **Лицензия** | Apache 2.0 |
|
|||
|
|
|
|||
|
|
## Инференс
|
|||
|
|
|
|||
|
|
Для запуска модели рекомендуется использовать библиотеку `transformers`. Пример кода для инференса на Python:
|
|||
|
|
|
|||
|
|
```python
|
|||
|
|
import torch
|
|||
|
|
from transformers import AutoTokenizer, AutoModelForCausalLM
|
|||
|
|
|
|||
|
|
model_name = "Toondra/Clornet-150m"
|
|||
|
|
|
|||
|
|
device = "cuda" if torch.cuda.is_available() else "cpu"
|
|||
|
|
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
|||
|
|
model = AutoModelForCausalLM.from_pretrained(model_name).to(device)
|
|||
|
|
|
|||
|
|
prompt = "В глубоком лесу росло странное дерево, которое"
|
|||
|
|
inputs = tokenizer(prompt, return_tensors="pt").to(device)
|
|||
|
|
|
|||
|
|
with torch.no_grad():
|
|||
|
|
outputs = model.generate(
|
|||
|
|
**inputs,
|
|||
|
|
max_new_tokens=64,
|
|||
|
|
do_sample=True,
|
|||
|
|
top_k=20,
|
|||
|
|
top_p=0.8,
|
|||
|
|
temperature=0.4,
|
|||
|
|
repetition_penalty=1.15
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
# Срезаем промпт, чтобы не дублировать его на выводе
|
|||
|
|
generated_ids = outputs[0][inputs.input_ids.shape[-1]:]
|
|||
|
|
generated_text = tokenizer.decode(generated_ids, skip_special_tokens=True)
|
|||
|
|
|
|||
|
|
print("Результат генерации:")
|
|||
|
|
print(generated_text)
|
|||
|
|
```
|