- Adding `transformers` as the library name (42f86d473301f7f520b5ec06fc46732d75aaedba) Co-authored-by: Aritra Roy Gosthipaty <ariG23498@users.noreply.huggingface.co>
142 lines
7.2 KiB
Markdown
142 lines
7.2 KiB
Markdown
---
|
||
license: apache-2.0
|
||
language:
|
||
- ru
|
||
- en
|
||
base_model:
|
||
- Qwen/Qwen3-8B
|
||
pipeline_tag: text-generation
|
||
library_name: transformers
|
||
---
|
||
A-vibe это большая языковая модель, созданная Авито Тех, дочерней технологической компанией Авито, на базе открытой модели Qwen3-8B-Base.
|
||
Мы адаптировали Qwen3-8B-Base под русский язык и домен Авито с помощью нескольких шагов
|
||
1. Сделали свой токенизатор, оптимальный для русского и английского языка
|
||
2. Подменили оригинальный токенизатор Qwen3-8B-Base на собственный токенизатор
|
||
3. Обучили полученную модель на большом корпусе данных
|
||
4. Провели SFT этап
|
||
5. Сделали RL
|
||
|
||
В результате нам удалось получить модель, которая выигрывает instruct версию Qwen3-8B по многим русскоязычным бенчмаркам.
|
||
На SFT и RL этапе нам удалось научить модель Function Calling и улучшить ее навыки в решении математических задач.
|
||
|
||
||Qwen3-8B (no_think)|A-vibe|
|
||
|:---|:---|:---|
|
||
|mmlu_ru|0,701|**0,718**|
|
||
|mmlu_en|0,730|**0,752**|
|
||
|gpqa_diamond_ru|0,318|**0,343**|
|
||
|gpqa_diamond_en|**0,369**|0,318|
|
||
|shlepa|0,454|**0,486**|
|
||
|baby mmlu|0,682|**0,766**|
|
||
|math_500_ru|0,546|**0,686**|
|
||
|math_500_en|**0,736**|0,714|
|
||
|gsm8k_en|**0,927**|0,910|
|
||
|DOoM|0,240|**0,280**|
|
||
|ru_facts|**0,724**|0,718|
|
||
|rublimp|0,916|**0,930**|
|
||
|ru_drop|0,318|**0,394**|
|
||
|BFCL_V3_en|**60,2%**|58,63%|
|
||
|BFCL_V3_ru|**50.72%**|49.00%|
|
||
|MERA_text|0,510|**0,618**|
|
||
|MERA CODE private total|0,336|**0,367**|
|
||
|
||
|
||
В токенизаторе A-vibe плотность токенизации выше, чем у Qwen3-8B поэтому число токенов в контексте и при генерации стало меньше для одинаковых примеров.
|
||
Кроме того, размер самой модели сократился до 7.9B при 8.2B у Qwen3-8B. За счет этого одинаковые русскоязычные примеры адаптированной моделью обрабатываются быстрее в среднем на 15-25% в сравнении с исходной Qwen3-8B
|
||
|
||
# Quickstart
|
||
Ниже представлен фрагмент кода, демонстрирующий, как загрузить токенизатор и модель, а также как сгенерировать ответ.
|
||
```python
|
||
from transformers import AutoModelForCausalLM, AutoTokenizer
|
||
|
||
model_name = "AvitoTech/avibe"
|
||
|
||
model = AutoModelForCausalLM.from_pretrained(
|
||
model_name,
|
||
torch_dtype="auto",
|
||
device_map="auto"
|
||
)
|
||
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
||
|
||
prompt = "Привет, подскажи рецепт борща"
|
||
messages = [
|
||
{"role": "user", "content": prompt}
|
||
]
|
||
text = tokenizer.apply_chat_template(
|
||
messages,
|
||
tokenize=False,
|
||
add_generation_prompt=True
|
||
)
|
||
model_inputs = tokenizer([text], return_tensors="pt").to(model.device)
|
||
|
||
generated_ids = model.generate(
|
||
**model_inputs,
|
||
max_new_tokens=1024
|
||
)
|
||
generated_ids = [
|
||
output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
|
||
]
|
||
|
||
response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
|
||
print(response)
|
||
```
|
||
|
||
<details>
|
||
<summary> Output:</summary>
|
||
Вот классический рецепт борща с пошаговыми инструкциями:
|
||
|
||
---
|
||
|
||
### **Ингредиенты (на 4 порции):**
|
||
- **Мясо** (говядина, свинина или курица) — 300–400 г
|
||
- **Свекла** — 2 шт. (средние)
|
||
- **Капуста белокочанная** — 300 г
|
||
- **Морковь** — 1 шт.
|
||
- **Лук репчатый** — 1 шт.
|
||
- **Картофель** — 3–4 шт.
|
||
- **Помидоры свежие** (или томатная паста) — 2 шт. (или 2 ст. ложки)
|
||
- **Чеснок** — 2–3 зубчика
|
||
- **Лавровый лист** — 1–2 шт.
|
||
- **Перец горошком** — 3–5 шт.
|
||
- **Соль, сахар** — по вкусу
|
||
- **Растительное масло** — 2–3 ст. ложки
|
||
- **Уксус или лимонный сок** — 1 ст. ложка (для сохранения цвета свеклы)
|
||
- **Зелень** (укроп, петрушка) — для подачи
|
||
- **Сметана** — по желанию
|
||
|
||
---
|
||
|
||
### **Пошаговое приготовление:**
|
||
|
||
1. **Подготовка бульона:**
|
||
- Мясо промойте, нарежьте на куски и залейте 2,5–3 литрами холодной воды.
|
||
- Доведите до кипения, снимите пену.
|
||
- Добавьте лавровый лист, перец горошком и варите 1,5–2 часа на медленном огне. За 30 минут до готовности посолите.
|
||
|
||
2. **Овощи:**
|
||
- **Свеклу** натрите на крупной терке. Обжарьте на растительном масле 5–7 минут, добавьте уксус (или лимонный сок) и 2 ст. ложки воды. Тушите 10 минут.
|
||
- **Капусту** нашинкуйте тонкой соломкой.
|
||
- **Картофель** нарежьте кубиками.
|
||
- **Морковь** натрите, лук — мелко нарежьте.
|
||
- **Помидоры** натрите на терке или используйте томатную пасту.
|
||
|
||
3. **Сборка борща:**
|
||
- В кипящий бульон сначала добавьте картофель, варите 10 минут.
|
||
- Затем введите капусту, морковь и лук. Варите еще 10 минут.
|
||
- Добавьте обжаренную свеклу и помидоры (или томатную пасту). Перемешайте.
|
||
- За 5 минут до готовности влейте измельченный чеснок (через пресс или мелко нарезанный).
|
||
|
||
4. **Финальные штрихи:**
|
||
- Проверьте вкус, добавьте сахар (если нужно) и зелень.
|
||
- Снимите с огня, накройте крышкой и дайте настояться 15–20 минут.
|
||
|
||
5. **Подача:**
|
||
- Разлейте борщ по тарелкам, добавьте сметану и свежую зелень.
|
||
|
||
---
|
||
|
||
### **Советы:**
|
||
- Для более насыщенного вкуса можно обжарить мясо перед варкой.
|
||
- Если любите кислинку, добавьте 1 ст. ложку уксуса или лимонного сока в самом конце.
|
||
- Вегетарианский вариант: замените мясо на грибы или варите на овощном бульоне.
|
||
|
||
Приятного аппетита! 🍲 </details> |