File size: 7,413 Bytes
c52a27b
 
46be188
 
 
 
 
 
b24a7cd
c52a27b
5a0a4d2
 
 
 
 
 
 
 
 
 
 
b333688
5a0a4d2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c52a27b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e7428f6
c52a27b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46be188
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
---
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>