Create README.md
Browse files
README.md
ADDED
@@ -0,0 +1,180 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
library_name: transformers
|
3 |
+
model_name: Vikhrmodels/Vikhr-YandexGPT-5-Lite-8B-it
|
4 |
+
base_model:
|
5 |
+
- yandex/YandexGPT-5-Lite-8B-pretrain
|
6 |
+
language:
|
7 |
+
- ru
|
8 |
+
- en
|
9 |
+
license: other
|
10 |
+
license_name: yandexgpt-5-lite-8b-pretrain
|
11 |
+
license_link: LICENSE
|
12 |
+
---
|
13 |
+
|
14 |
+
# Vikhr-YandexGPT-5-Lite-8B-it
|
15 |
+
|
16 |
+
Инструктивная модель на основе **YandexGPT-5-Lite-8B-pretrain**, обученная на русскоязычном датасете **GrandMaster-PRO-MAX** и **Grounded-RAG-RU-v2** с использованием **SFT**.
|
17 |
+
|
18 |
+
|
19 |
+
## Quatized variants:
|
20 |
+
- [GGUF](https://hf.co/Vikhrmodels/Vikhr-YandexGPT-5-Lite-8B-it_GGUF)
|
21 |
+
- MLX
|
22 |
+
- [4 bit](https://hf.co/Vikhrmodels/Vikhr-YandexGPT-5-Lite-8B-it_MLX-4bit)
|
23 |
+
- [8 bit](https://hf.co/Vikhrmodels/Vikhr-YandexGPT-5-Lite-8B-it_MLX-8bit)
|
24 |
+
|
25 |
+
|
26 |
+
## Особенности:
|
27 |
+
|
28 |
+
- 📚 Основа: [YandexGPT-5-Lite-8B-pretrain](https://huggingface.co/yandex/YandexGPT-5-Lite-8B-pretrain)
|
29 |
+
- 💾 Датасет / Dataset: [GrandMaster-PRO-MAX](https://huggingface.co/datasets/Vikhrmodels/GrandMaster-PRO-MAX), [Grounded-RAG-RU-v2](https://huggingface.co/datasets/Vikhrmodels/Grounded-RAG-RU-v2)
|
30 |
+
- 🇷🇺 Специализация: **RU**
|
31 |
+
- 🌍 Поддержка: **Bilingual RU/EN**
|
32 |
+
|
33 |
+
## Попробовать / Try now:
|
34 |
+
|
35 |
+
[](https://colab.research.google.com/drive/1jIm0beQiUoW6bn57jixEdFEgIa-vZMLM?usp=sharing)
|
36 |
+
|
37 |
+
|
38 |
+
## Обучение:
|
39 |
+
|
40 |
+
**Vikhr-YandexGPT-5-Lite-8B-it** была создана с использованием метода SFT (Supervised Fine-Tuning).
|
41 |
+
|
42 |
+
#### Инструктивная SFT часть
|
43 |
+
|
44 |
+
Для SFT этапа обучения модели мы подготовили большой (150к инструкций) инструктивный синтетический датасет [Vikhrmodels/GrandMaster-PRO-MAX](https://huggingface.co/datasets/Vikhrmodels/GrandMaster-PRO-MAX). Его особенностью является встроеный CoT (Chain-Of-Thought), для сбора которого мы использовали модифицированный промет для gpt-4-turbo, подробности в карточке датасета.
|
45 |
+
|
46 |
+
Кроме того, для того чтобы сделать RAG Grounding, мы подготовили другой синтетический датасет - [Vikhrmodels/Grounded-RAG-RU-v2](https://huggingface.co/datasets/Vikhrmodels/Grounded-RAG-RU-v2) (50k диалогов), его пайплайн сборки достаточно сложный для короткого описания и полробнее об этом вы можете прочитать в его карточке.
|
47 |
+
|
48 |
+
[Конфиг обучения](https://github.com/VikhrModels/effective_llm_alignment/tree/main/training_configs/sft/sft-yandex-lora-GrandmasterRAG.yaml)
|
49 |
+
|
50 |
+
## Пример кода для запуска:
|
51 |
+
|
52 |
+
```python
|
53 |
+
from transformers import AutoModelForCausalLM, AutoTokenizer
|
54 |
+
|
55 |
+
# Load the model and tokenizer
|
56 |
+
model_name = "Vikhrmodels/Vikhr-YandexGPT-5-Lite-8B-it"
|
57 |
+
model = AutoModelForCausalLM.from_pretrained(model_name)
|
58 |
+
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
59 |
+
|
60 |
+
# Prepare the input text
|
61 |
+
input_text = "Напиши краткое описание фильма Назад в будущее."
|
62 |
+
|
63 |
+
messages = [
|
64 |
+
{"role": "user", "content": input_text},
|
65 |
+
]
|
66 |
+
|
67 |
+
# Tokenize and generate text
|
68 |
+
input_ids = tokenizer.apply_chat_template(messages, truncation=True, add_generation_prompt=True, return_tensors="pt")
|
69 |
+
output = model.generate(
|
70 |
+
input_ids,
|
71 |
+
max_length=1512,
|
72 |
+
temperature=0.7,
|
73 |
+
)
|
74 |
+
|
75 |
+
# Decode and print result
|
76 |
+
generated_text = tokenizer.decode(output[0], skip_special_tokens=True)
|
77 |
+
print(generated_text)
|
78 |
+
```
|
79 |
+
|
80 |
+
#### Ответ модели:
|
81 |
+
|
82 |
+
>"Назад в будущее" (англ. "Back to the Future") — это американский научно-фантастический фильм, выпущенный в 1985 году. Режиссёром картины выступил Роберт Земекис, а сценарий написал Боб Гейл. Главные роли исполнили Майкл Дж. Фокс, Кристофер Ллойд и Лиа Томпсон.
|
83 |
+
>
|
84 |
+
>Фильм рассказывает историю Марти МакФлая, обычного подростка из 1985 года, который случайно попадает в 1955 год благодаря изобретению своего друга-ученого, доктора Эмметта Брауна. Марти оказывается в прошлом, где он должен помочь доктору Брауну, который в то время был молодым и наивным, изобрести машину времени.
|
85 |
+
>
|
86 |
+
>В процессе своих приключений Марти встречает молодого доктора Брауна и его семью, а также влюбляется в девушку, которая в б��дущем станет его матерью. Марти должен не только исправить ошибки прошлого, но и предотвратить катастрофу, которая может изменить будущее.
|
87 |
+
>
|
88 |
+
>Фильм получил множество наград и стал культовым, породив два сиквела и множество мемов и цитат, которые до сих пор популярны.
|
89 |
+
|
90 |
+
### Как работать с RAG
|
91 |
+
|
92 |
+
Роль documents представляет из себя список словарей с описанием контента документов, с примнением `json.dumps(array, ensure_ascii=False)` (см. пример ниже). \
|
93 |
+
Контент документов может быть представлен в **3** различных форматах: **Markdown**, **HTML**, **Plain Text**. Контент каждого документа - может быть чанком текста длиной до 4к символов.
|
94 |
+
|
95 |
+
```json
|
96 |
+
[
|
97 |
+
{
|
98 |
+
"doc_id": (0..5),
|
99 |
+
"title": "(null or str)",
|
100 |
+
"content": "(html or markdown or plain text)"
|
101 |
+
}
|
102 |
+
]
|
103 |
+
```
|
104 |
+
|
105 |
+
#### Пример правильного использования с OpenAI-like API
|
106 |
+
|
107 |
+
Запуск vLLM сервера: `vllm serve --dtype half --max-model-len 32000 -tp 1 Vikhrmodels/Vikhr-YandexGPT-5-Lite-8B-it --api-key token-abc123`
|
108 |
+
|
109 |
+
```python
|
110 |
+
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."
|
111 |
+
documents = [
|
112 |
+
{
|
113 |
+
"doc_id": 0,
|
114 |
+
"title": "Глобальное потепление: ледники",
|
115 |
+
"content": "За последние 50 лет объем ледников в мире уменьшился на 30%"
|
116 |
+
},
|
117 |
+
{
|
118 |
+
"doc_id": 1,
|
119 |
+
"title": "Глобальное потепление: Уровень моря",
|
120 |
+
"content": "Уровень мирового океана повысился на 20 см с 1880 года и продолжает расти на 3,3 мм в год"
|
121 |
+
}
|
122 |
+
]
|
123 |
+
sample_history = [
|
124 |
+
{'role': 'system', 'content': GROUNDED_SYSTEM_PROMPT},
|
125 |
+
{'role': 'documents', 'content': json.dumps(documents, ensure_ascii=False)},
|
126 |
+
{'role': 'user', 'content': 'Глоабльное потепление'}
|
127 |
+
]
|
128 |
+
relevant_indexes = llm_client.chat.completions.create(
|
129 |
+
model=llm_model,
|
130 |
+
messages=sample_history,
|
131 |
+
temperature=0.0,
|
132 |
+
max_tokens=2048
|
133 |
+
).choices[0].message.content
|
134 |
+
print('Using documents: ' + relevant_indexes + '\n----')
|
135 |
+
final_answer = llm_client.chat.completions.create(
|
136 |
+
model=llm_model,
|
137 |
+
messages=sample_history + [{'role': 'assistant', 'content': relevant_indexes}],
|
138 |
+
temperature=0.3,
|
139 |
+
max_tokens=2048
|
140 |
+
).choices[0].message.content
|
141 |
+
print(final_answer)
|
142 |
+
```
|
143 |
+
|
144 |
+
Ответ после выполнения кода будет выглядеть примерно так:
|
145 |
+
|
146 |
+
>Using documents: {"relevant_doc_ids": [0, 1]}
|
147 |
+
>----
|
148 |
+
>Глобальное потепление – это долгосрочное повышение средней температуры атмосферы и океанов Земли. Это явление имеет множество последствий для нашей планеты, и среди них можно выделить два ключевых аспекта, основанных на доступных мне данных:
|
149 |
+
>
|
150 |
+
>1. **Уменьшение объема ледников**: За последние 50 лет наблюдается значительное сокращение объема ледников по всему миру. Согласно данным, объем ледников уменьшился на 30%. Это может быть связано с таянием ледников из-за повышения температур, что является одним из признаков глобального потепления.
|
151 |
+
>
|
152 |
+
>2. **Повышение уровня моря**: Уровень мирового океана также увеличивается, что связано с таянием ледников и ледяных покровов, а также с расширением воды при повышении температуры. С 1880 года уровень моря повысился на 20 сантиметров, и этот процесс продолжается, с ежегодным увеличением на 3,3 миллиметра.
|
153 |
+
>
|
154 |
+
>Эти изменения имеют серьезные последствия для экосистем, климата и человеческого общества. Таяние ледников приводит к повышению уровня моря, что может привести к затоплению прибрежных терри��орий и островов, а также к изменению водных ресурсов и климатических паттернов.
|
155 |
+
|
156 |
+
Используя первый ответ модели `relevant_indexes` (JSON), можно понять нашла ли модель информацию в документах или нет, она обучена возврашать пустой массив если ее нет и в таком случае она будет отвечать, что не смогла найти информацию в базе знаний (при генерации второго ответа).
|
157 |
+
|
158 |
+
### Нюансы и ограничения
|
159 |
+
- Модель имеет **низкий уровень безопасности ответов** и нацелена на правильное и полное выполенние инструкций, имейте это ввиду при использовании и тестируйте самостоятельно. Частично это исправляется системными промптами и дополнительными указаниями о важности безопасности в промпте пользователя.
|
160 |
+
- Системные промпты не предназначены для описание персонажей, мы рекомендуем использовать их для спецификации стиля ответа (вроде "answer only in json format"). Кроме того, желательно, писать их **на английском языке**, так как так было в датасете, от использования английского в системных промтпах не зависит язык ответа.
|
161 |
+
- RAG режим **требует обязательного** наличия системного промпта `GROUNDED_SYSTEM_PROMPT` описаного в секции *Как работать с RAG*. Так же иногда модель может добавлять общую информацию из своих знаний в ответ к той, что есть в документах.
|
162 |
+
- Модель лучше использовать с низкой темптературой (0.1-0.5), а таже использовать top_k (30-50), при температуре 1.0 были замечены случайные дефекты генерации.
|
163 |
+
|
164 |
+
### Авторы
|
165 |
+
|
166 |
+
- Sergei Bratchikov, [NLP Wanderer](https://t.me/nlpwanderer), [Vikhr Team](https://t.me/vikhrlabs)
|
167 |
+
- Nikolay Kompanets, [LakoMoor](https://t.me/lakomoordev), [Vikhr Team](https://t.me/vikhrlabs)
|
168 |
+
- Konstantin Korolev, [Vikhr Team](https://t.me/vikhrlabs)
|
169 |
+
- Aleksandr Nikolich, [Vikhr Team](https://t.me/vikhrlabs)
|
170 |
+
|
171 |
+
```
|
172 |
+
@inproceedings{nikolich2024vikhr,
|
173 |
+
title={Vikhr: Advancing Open-Source Bilingual Instruction-Following Large Language Models for Russian and English},
|
174 |
+
author={Aleksandr Nikolich and Konstantin Korolev and Sergei Bratchikov and Nikolay Kompanets and Igor Kiselev and Artem Shelmanov},
|
175 |
+
booktitle={Proceedings of the 4th Workshop on Multilingual Representation Learning (MRL) @ EMNLP-2024},
|
176 |
+
year={2024},
|
177 |
+
publisher={Association for Computational Linguistics},
|
178 |
+
url={https://arxiv.org/pdf/2405.13929}
|
179 |
+
}
|
180 |
+
```
|