Transformers
GGUF
English
Russian
Inference Endpoints
conversational
mav23 commited on
Commit
f0300cb
1 Parent(s): d5d70c7

Upload folder using huggingface_hub

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ vikhr-nemo-12b-instruct-r-21-09-24.Q4_0.gguf filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,280 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ datasets:
4
+ - Vikhrmodels/GrandMaster-PRO-MAX
5
+ - Vikhrmodels/Grounded-RAG-RU-v2
6
+ language:
7
+ - en
8
+ - ru
9
+ base_model:
10
+ - mistralai/Mistral-Nemo-Instruct-2407
11
+ library_name: transformers
12
+ ---
13
+ [Reame.md in English](Readme_en.md)
14
+
15
+ ## Vikhr-Nemo-12B-Instruct-R-21-09-24
16
+
17
+ ### Описание
18
+
19
+ **Vikhr-Nemo** - это наша флагманская унимодальная LLM (Large Language Model) представляющая из себя улучшенную версию [mistralai/Mistral-Nemo-Instruct-2407](https://huggingface.co/mistralai/Mistral-Nemo-Instruct-2407) командой **VikhrModels**, адаптированную преимущественно для русского и английского языков. Для ее обучения мы использовали несколько этапов включающих в себя **SFT** и **SMPO** - нашу собственную вариацию DPO, подробнее читайте в секции *"Как эта модель создавалась"*.
20
+
21
+ Модель оптимизированна для различных вариантов использования, включая ризонинг, суммаризацию, код, roleplay, поддержание диалога. Vikhr-Nemo обладает возможностью многоязычной генерации, и высокопроизводительными возможностями RAG. Модель иммет лучшие оценки среди прочих на наших инструктивных и RAG бенчарках и, поэтому, мы верим, что в некоторых задачах (например, RAG) может быть не хуже gpt-4o-mini от OpenAI.
22
+
23
+ Весь использованный код для обучения доступен в нашем репозитории [effective_llm_alignment](https://github.com/VikhrModels/effective_llm_alignment/) на GitHub, а основные датасеты доступны в нашем [профиле на HF](https://huggingface.co/Vikhrmodels).
24
+
25
+ ### Особенности
26
+ 1. Высокое качество генераций на русском и английском языках, а также некоторых других языках, благодаря датасету [Grandmaster-PRO-MAX](https://huggingface.co/datasets/Vikhrmodels/GrandMaster-PRO-MAX) и исходной модели
27
+ 2. Поддержка системных промптов для регулриования стиля ответов
28
+ 3. Поддержка до 128k токенов контекста благодаря исходной модели
29
+ 4. Grounded RAG режим - модель имеет специальную роль documents и специальный режим работы для поиска идентификаторов релевантных вопросу пользователя документов и использования их для ответа на вопрос, вдохновлено аналогичной способностью модели Command-R
30
+
31
+ ### Метрики и оценка качества
32
+
33
+ Модель оценивалась на нашем русскоязычном open-source SbS бенчмарке [ru-arena-general](https://github.com/VikhrModels/ru_llm_arena) (50 топиков по 10 вопросов), где судьей выступает gpt-4-1106-preview и [бенчмарке](https://colab.research.google.com/drive/16730rWQ4-yGqWoooLs0Ece_16frmOniP?usp=sharing) для RAG на основе тестового сета [Grounded-RAG-v2](https://huggingface.co/datasets/Vikhrmodels/Grounded-RAG-RU-v2), где судей выступа gpt-4o.
34
+
35
+ #### Результаты на Ru-Arena-General
36
+
37
+ В качестве референсых ответов, с которыми сравниваются модели выступают ответы от gpt-3.5-turbo-0125, поэтому она имеет винрейт 50%.
38
+
39
+ Здесь приведена лишь часть лидерборда, подробнее смотрите в репозитории бенчмарка.
40
+
41
+ | Model Name | Winrate | 95% CI | Average # Tokens |
42
+ |--------------------------------------------------|--------|--------------------|------------------|
43
+ | gpt-4-1106-preview | 90.9 | (-1.3, 1.0) | 541 |
44
+ | gpt-4o-mini | 83.9 | (-1.8, 1.1) | 448 |
45
+ | **vikhr-nemo-12b-instruct-r-21-09-24** | **79.8** | (-2.2, 1.9) | **627** |
46
+ | gemma-2-9b-it-sppo-iter3 | 73.6 | (-1.6, 2.2) | 509 |
47
+ | gemma-2-9b-it | 69.2 | (-2.5, 1.9) | 459 |
48
+ | t-lite-instruct-0.1 | 64.7 | (-2.1, 1.7) | 810 |
49
+ | vikhr-llama3.1-8b-instruct-r-21-09-24 | 63.4 | (-2.1, 2.5) | 618 |
50
+ | suzume-llama-3-8B-multilingual-orpo-borda-half | 57.1 | (-1.9, 2.2) | 682 |
51
+ | mistral-nemo-instruct-2407 | 50.5 | (-2.7, 2.6) | 403 |
52
+ | gpt-3.5-turbo-0125 | 50.0 | (0.0, 0.0) | 220 |
53
+ | c4ai-command-r-v01 | 49.0 | (-1.7, 2.2) | 529 |
54
+ | meta-llama-3.1-8b-instruct | 43.1 | (-2.8, 2.3) | 628 |
55
+
56
+ #### Результаты на бенчмарке RAG
57
+
58
+ Общий размер тестового сета - 200 примеров, 100 для in_domain вопросов и 100 для out_of_domain.
59
+
60
+ Тут для оценки качества модель-судья gpt-4o была проинструктирована учитывать релеватность и фактологичкскую полноту ответов исходя из документов и реферсного ответа от gpt-4-1106-preview.
61
+
62
+ Подробности промптов и оценок смотрите в коде бенчмарка на [коллабе](https://colab.research.google.com/drive/16730rWQ4-yGqWoooLs0Ece_16frmOniP?usp=sharing)
63
+
64
+ in_domain - вопросы которые связаны с содержанием предоставленных документов в той или иной степени \
65
+ out_of_domain - вопросы которые специально никак не связаны с содержанием предоставленных документов
66
+
67
+ <table>
68
+ <thead>
69
+ <tr>
70
+ <th rowspan="2">question_type</th>
71
+ <th colspan="3">gpt-4o</th>
72
+ </tr>
73
+ <tr>
74
+ <th>judge_correct_percent</th>
75
+ <th>avg_answer_match_rougeL</th>
76
+ <th>avg_abs_indexes_diff</th>
77
+ </tr>
78
+ </thead>
79
+ <tbody>
80
+ <tr>
81
+ <td>in_domain</td>
82
+ <td>73%</td>
83
+ <td>0.34</td>
84
+ <td>NaN</td>
85
+ </tr>
86
+ <tr>
87
+ <td>out_of_domain</td>
88
+ <td>81%</td>
89
+ <td>0.20</td>
90
+ <td>NaN</td>
91
+ </tr>
92
+ </tbody>
93
+ </table>
94
+
95
+ <table>
96
+ <thead>
97
+ <tr>
98
+ <th style="visibility: hidden;" rowspan="2">question_type</th>
99
+ <th colspan="3">Vikhr-Nemo-12B-Instruct-R-21-09-24</th>
100
+ </tr>
101
+ <tr>
102
+ <th style="visibility: hidden;">judge_correct_percent</th>
103
+ <th style="visibility: hidden;">avg_answer_match_rougeL</th>
104
+ <th style="visibility: hidden;">avg_abs_indexes_diff</th>
105
+ </tr>
106
+ </thead>
107
+ <tbody>
108
+ <tr>
109
+ <td>in_domain</td>
110
+ <td>68%</td>
111
+ <td>0.41</td>
112
+ <td>0</td>
113
+ </tr>
114
+ <tr>
115
+ <td>out_of_domain</td>
116
+ <td>92%</td>
117
+ <td>0.52</td>
118
+ <td>0</td>
119
+ </tr>
120
+ </tbody>
121
+ </table>
122
+
123
+ <table>
124
+ <thead>
125
+ <tr>
126
+ <th style="visibility: hidden;" rowspan="2">question_type</th>
127
+ <th colspan="3">gpt-4o-mini</th>
128
+ </tr>
129
+ <tr>
130
+ <th style="visibility: hidden;">judge_correct_percent</th>
131
+ <th style="visibility: hidden;">avg_answer_match_rougeL</th>
132
+ <th style="visibility: hidden;">avg_abs_indexes_diff</th>
133
+ </tr>
134
+ </thead>
135
+ <tbody>
136
+ <tr>
137
+ <td>in_domain</td>
138
+ <td>65%</td>
139
+ <td>0.33</td>
140
+ <td>NaN</td>
141
+ </tr>
142
+ <tr>
143
+ <td>out_of_domain</td>
144
+ <td>73%</td>
145
+ <td>0.18</td>
146
+ <td>NaN</td>
147
+ </tr>
148
+ </tbody>
149
+ </table>
150
+
151
+ <table>
152
+ <thead>
153
+ <tr>
154
+ <th style="visibility: hidden;" rowspan="2">question_type</th>
155
+ <th colspan="3">gpt-3.5-turbo-0125 </th>
156
+ </tr>
157
+ <tr>
158
+ <th style="visibility: hidden;">judge_correct_percent</th>
159
+ <th style="visibility: hidden;">avg_answer_match_rougeL</th>
160
+ <th style="visibility: hidden;">avg_abs_indexes_diff</th>
161
+ </tr>
162
+ </thead>
163
+ <tbody>
164
+ <tr>
165
+ <td>in_domain</td>
166
+ <td>49%</td>
167
+ <td>0.28</td>
168
+ <td>NaN</td>
169
+ </tr>
170
+ <tr>
171
+ <td>out_of_domain</td>
172
+ <td>76%</td>
173
+ <td>0.20</td>
174
+ <td>NaN</td>
175
+ </tr>
176
+ </tbody>
177
+ </table>
178
+
179
+ ### Как эта модель создавалась
180
+
181
+ #### Инструктивная SFT часть
182
+
183
+ Для SFT этапа обучения модели мы подготовили большой (150к инструкций) инструктивный синтетический датасет [Vikhrmodels/GrandMaster-PRO-MAX](https://huggingface.co/datasets/Vikhrmodels/GrandMaster-PRO-MAX). Его особенностью является встроеный CoT (Chain-Of-Thought), для сбора которого мы использовали модифицированный промет для gpt-4-turbo, подробности в карточке датасета.
184
+
185
+ Кроме того, для того чтобы сделать RAG Grounding, мы подготовили другой синтетический датасет - [Vikhrmodels/Grounded-RAG-RU-v2](https://huggingface.co/datasets/Vikhrmodels/Grounded-RAG-RU-v2) (50k диалогов), его пайплайн сборки достаточно сложный для короткого описания и полробнее об этом вы мож��те прочитать в его карточке.
186
+
187
+ #### Этап алайнмента с SMPO
188
+
189
+ Для дальнейшего улучшения качества ответов мы использовали следущий пайплайн:
190
+ 1) Обучили кастомную Reward модель (она пока не будет выкладываться в открытый доступ)
191
+ 2) Дедуплицировали и отфилтровали используя RM модель оригинальный датасет Vikhrmodels/GrandMaster-PRO-MAX, получив порядка 10к самых высококачественных и разнообразных диалогов.
192
+ 3) Сделали Rejection Sampling с SFT чекпоинтом используя полученный датасет и Reward модель. (Генерировали 7 гипотез и брали только 2 самые худшие как rejected)
193
+ 4) Дообучили SFT чекпоинт с помощью нашего метода SMPO используя полученный датасет из этапа 3. SMPO был спроектирован и выбран как метод для повышения стабильности тренировки преференсов в условиях Rejection Sampling и достижения нужного margin.
194
+
195
+ Реализацию SMPO, rejection sampling и тд можно найти в нашей библиотеке [effective_llm_alignment](https://github.com/VikhrModels/effective_llm_alignment/) на GitHub
196
+
197
+ Идея использования именно SMPO, а не другого PO метода, возникла в результате проведения большого количества экспериментов с классическими методами, при необходимости лучшего контроля процесса сходимости. При тщательной настройке других методов (например SimPO), можно добится похожего результата, однако мы постарались стаблизировать этот процесс и объединить лучшие практики из других методов.
198
+
199
+ ### Как работать с RAG
200
+
201
+ Роль documents представляет из себя список словарей с описанием контента документов, с примнением `json.dumps(array, ensure_ascii=False)` (см. пример ниже). \
202
+ Контент документов может быть представлен в **3** различных форматах: **Markdown**, **HTML**, **Plain Text**. Контент каждого документа - может быть чанком текста длиной до 4к символов.
203
+
204
+ ```json
205
+ [
206
+ {
207
+ "doc_id": (0..5),
208
+ "title": "(null or str)",
209
+ "content": "(html or markdown or plain text)"
210
+ }
211
+ ]
212
+ ```
213
+
214
+ #### Пример правильного использования с OpenAI-like API
215
+
216
+ Запуск vLLM сервера: `vllm serve --dtype half --max-model-len 32000 -tp 1 Vikhrmodels/Vikhr-Nemo-12B-Instruct-R-21-09-24 --api-key token-abc123`
217
+
218
+ ```python
219
+ GROUNDED_SYSTEM_PROMPT = "Your task is to answer the user's questions using only the information from the provided documents. Give two answers to each question: one with a list of relevant document identifiers and the second with the answer to the question itself, using documents with these identifiers."
220
+
221
+ documents = [
222
+ {
223
+ "doc_id": 0,
224
+ "title": "Глобальное потепление: ледники",
225
+ "content": "За последние 50 лет объем ледников в мире уменьшился на 30%"
226
+ },
227
+ {
228
+ "doc_id": 1,
229
+ "title": "Глобальное потепление: Уровень моря",
230
+ "content": "Уровень мирового океана повысился на 20 см с 1880 года и продолжает расти на 3,3 мм в год"
231
+ }
232
+ ]
233
+ sample_history = [
234
+ {'role': 'system', 'content': GROUNDED_SYSTEM_PROMPT},
235
+ {'role': 'documents', 'content': json.dumps(documents, ensure_ascii=False)},
236
+ {'role': 'user', 'content': 'Глоабльное потепление'}
237
+ ]
238
+ relevant_indexes = llm_client.chat.completions.create(
239
+ model=llm_model,
240
+ messages=sample_history,
241
+ temperature=0.0,
242
+ max_tokens=2048
243
+ ).choices[0].message.content
244
+
245
+ print('Using documents: ' + relevant_indexes + '\n----')
246
+ final_answer = llm_client.chat.completions.create(
247
+ model=llm_model,
248
+ messages=sample_history + [{'role': 'assistant', 'content': relevant_indexes}],
249
+ temperature=0.3,
250
+ max_tokens=2048
251
+ ).choices[0].message.content
252
+
253
+ print(final_answer)
254
+ ```
255
+
256
+ Ответ после выполнения кода будет выглядеть примерно так:
257
+
258
+ Using documents: {"relevant_doc_ids": [0, 1]}
259
+ ----
260
+
261
+ Глобальное потепление – это долгосрочное повышение средней температуры атмосферы и океанов Земли. Это явление имеет множество последствий для нашей планеты, и среди них можно выделить два ключевых аспекта, основанных на доступных мне данных:
262
+
263
+ 1. **Уменьшение объема ледников**: За последние 50 лет наблюдается значительное сокращение объема ледников по всему миру. Согласно данным, объем ледников уменьшился на 30%. Это может быть связано с таянием ледников из-за повышения температур, что является одним из признаков глобального потепления.
264
+
265
+ 2. **Повышение уровня моря**: Уровень мирового океана также увеличивается, что связано с таянием ледников и ледяных покровов, а также с расширением воды при повышении температуры. С 1880 года уровень моря повысился на 20 сантиметров, и этот процесс продолжается, с ежегодным увеличением на 3,3 миллиметра.
266
+
267
+ Эти изменения имеют серьезные последствия для экосистем, климата и человеческого общества. Таяние ледников приводит к повышению уровня моря, что может привести к затоплению прибрежных территорий и островов, а также к изменению водных ресурсов и климатических паттернов.
268
+
269
+ Используя первый ответ модели `relevant_indexes` (JSON), можно понять нашла ли модель информацию в документах или нет, она обучена возврашать пустой массив если ее нет и в таком случае она будет отвечать, что не смогла найти информацию в базе знаний (при генерации второго ответа).
270
+
271
+ ### Нюансы и ограничения
272
+ - Модель имеет **низкий уровень безопасности ответов** и нацелена на правильное и полное выполенние инструкций, имейте это ввиду при использовании и тестируйте самостоятельно. Частично это исправляется системными промптами и дополнительными указаниями о важности безопасности в промпте пользователя.
273
+ - Системные промпты не предназначены для описание персонажей, мы рекомендуем использовать их для спецификации стиля ответа (вроде "answer only in json format"). Кроме того, желательно, писать их **на английском языке**, так как так было в датасете, от использования английского в системных промтпах не зависит язык ответа.
274
+ - RAG режим **требует обязательного** наличия системного промпта `GROUNDED_SYSTEM_PROMPT` описаного в секции *Как работать с RAG*. Так же иногда модель может добавлять общую информацию из своих знаний в ответ к той, что есть в документах.
275
+ - Модель лучше использовать с низкой темптературой (0.1-0.5), а таже использовать top_k (30-50), при температуре 1.0 были замечены случайные дефекты генерации.
276
+
277
+ ### Авторы
278
+ - Sergei Bratchikov, [NLP Wanderer](https://t.me/nlpwanderer), Vikhr Team
279
+ - Konstantin Korolev, Vikhr Team
280
+ - Aleksandr Nikolich, Vikhr Team
vikhr-nemo-12b-instruct-r-21-09-24.Q4_0.gguf ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:57396fbb9466546e24bee5a9087e448f9637410e01a5570923692fe8afe9367f
3
+ size 7071714656