|
--- |
|
library_name: transformers |
|
model_name: Vikhrmodels/Vikhr-YandexGPT-5-Lite-8B-it |
|
datasets: |
|
- Vikhrmodels/GrandMaster-PRO-MAX |
|
- Vikhrmodels/Grounded-RAG-RU-v2 |
|
base_model: |
|
- yandex/YandexGPT-5-Lite-8B-pretrain |
|
language: |
|
- ru |
|
- en |
|
license: other |
|
license_name: yandexgpt-5-lite-8b-pretrain |
|
license_link: LICENSE |
|
--- |
|
|
|
# Vikhr-YandexGPT-5-Lite-8B-it |
|
|
|
Инструктивная модель на основе **YandexGPT-5-Lite-8B-pretrain**, обученная на русскоязычном датасете **GrandMaster-PRO-MAX** и **Grounded-RAG-RU-v2** с использованием **SFT**. |
|
|
|
|
|
## Quatized variants: |
|
- [GGUF](https://hf.co/Vikhrmodels/Vikhr-YandexGPT-5-Lite-8B-it_GGUF) |
|
- MLX |
|
- [4 bit](https://hf.co/Vikhrmodels/Vikhr-YandexGPT-5-Lite-8B-it_MLX-4bit) |
|
- [8 bit](https://hf.co/Vikhrmodels/Vikhr-YandexGPT-5-Lite-8B-it_MLX-8bit) |
|
|
|
|
|
## Особенности: |
|
|
|
- 📚 Основа: [YandexGPT-5-Lite-8B-pretrain](https://huggingface.co/yandex/YandexGPT-5-Lite-8B-pretrain) |
|
- 💾 Датасет / 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) |
|
- 🇷🇺 Специализация: **RU** |
|
- 🌍 Поддержка: **Bilingual RU/EN** |
|
|
|
## Попробовать / Try now: |
|
|
|
[](https://colab.research.google.com/drive/1jIm0beQiUoW6bn57jixEdFEgIa-vZMLM?usp=sharing) |
|
|
|
|
|
## Обучение: |
|
|
|
**Vikhr-YandexGPT-5-Lite-8B-it** была создана с использованием метода SFT (Supervised Fine-Tuning). |
|
|
|
#### Инструктивная SFT часть |
|
|
|
Для SFT этапа обучения модели мы подготовили большой (150к инструкций) инструктивный синтетический датасет [Vikhrmodels/GrandMaster-PRO-MAX](https://huggingface.co/datasets/Vikhrmodels/GrandMaster-PRO-MAX). Его особенностью является встроеный CoT (Chain-Of-Thought), для сбора которого мы использовали модифицированный промет для gpt-4-turbo, подробности в карточке датасета. |
|
|
|
Кроме того, для того чтобы сделать RAG Grounding, мы подготовили другой синтетический датасет - [Vikhrmodels/Grounded-RAG-RU-v2](https://huggingface.co/datasets/Vikhrmodels/Grounded-RAG-RU-v2) (50k диалогов), его пайплайн сборки достаточно сложный для короткого описания и полробнее об этом вы можете прочитать в его карточке. |
|
|
|
[Конфиг обучения](https://github.com/VikhrModels/effective_llm_alignment/tree/main/training_configs/sft/sft-yandex-lora-GrandmasterRAG.yaml) |
|
|
|
## Пример кода для запуска: |
|
|
|
```python |
|
from transformers import AutoModelForCausalLM, AutoTokenizer |
|
|
|
# Load the model and tokenizer |
|
model_name = "Vikhrmodels/Vikhr-YandexGPT-5-Lite-8B-it" |
|
model = AutoModelForCausalLM.from_pretrained(model_name) |
|
tokenizer = AutoTokenizer.from_pretrained(model_name) |
|
|
|
# Prepare the input text |
|
input_text = "Напиши краткое описание фильма Назад в будущее." |
|
|
|
messages = [ |
|
{"role": "user", "content": input_text}, |
|
] |
|
|
|
# Tokenize and generate text |
|
input_ids = tokenizer.apply_chat_template(messages, truncation=True, add_generation_prompt=True, return_tensors="pt") |
|
output = model.generate( |
|
input_ids, |
|
max_length=1512, |
|
temperature=0.7, |
|
) |
|
|
|
# Decode and print result |
|
generated_text = tokenizer.decode(output[0], skip_special_tokens=True) |
|
print(generated_text) |
|
``` |
|
|
|
#### Ответ модели: |
|
|
|
>"Назад в будущее" (англ. "Back to the Future") — это американский научно-фантастический фильм, выпущенный в 1985 году. Режиссёром картины выступил Роберт Земекис, а сценарий написал Боб Гейл. Главные роли исполнили Майкл Дж. Фокс, Кристофер Ллойд и Лиа Томпсон. |
|
> |
|
>Фильм рассказывает историю Марти МакФлая, обычного подростка из 1985 года, который случайно попадает в 1955 год благодаря изобретению своего друга-ученого, доктора Эмметта Брауна. Марти оказывается в прошлом, где он должен помочь доктору Брауну, который в то время был молодым и наивным, изобрести машину времени. |
|
> |
|
>В процессе своих приключений Марти встречает молодого доктора Брауна и его семью, а также влюбляется в девушку, которая в будущем станет его матерью. Марти должен не только исправить ошибки прошлого, но и предотвратить катастрофу, которая может изменить будущее. |
|
> |
|
>Фильм получил множество наград и стал культовым, породив два сиквела и множество мемов и цитат, которые до сих пор популярны. |
|
|
|
### Как работать с RAG |
|
|
|
Роль documents представляет из себя список словарей с описанием контента документов, с примнением `json.dumps(array, ensure_ascii=False)` (см. пример ниже). \ |
|
Контент документов может быть представлен в **3** различных форматах: **Markdown**, **HTML**, **Plain Text**. Контент каждого документа - может быть чанком текста длиной до 4к символов. |
|
|
|
```json |
|
[ |
|
{ |
|
"doc_id": (0..5), |
|
"title": "(null or str)", |
|
"content": "(html or markdown or plain text)" |
|
} |
|
] |
|
``` |
|
|
|
#### Пример правильного использования с OpenAI-like API |
|
|
|
Запуск vLLM сервера: `vllm serve --dtype half --max-model-len 32000 -tp 1 Vikhrmodels/Vikhr-YandexGPT-5-Lite-8B-it --api-key token-abc123` |
|
|
|
```python |
|
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." |
|
documents = [ |
|
{ |
|
"doc_id": 0, |
|
"title": "Глобальное потепление: ледники", |
|
"content": "За последние 50 лет объем ледников в мире уменьшился на 30%" |
|
}, |
|
{ |
|
"doc_id": 1, |
|
"title": "Глобальное потепление: Уровень моря", |
|
"content": "Уровень мирового океана повысился на 20 см с 1880 года и продолжает расти на 3,3 мм в год" |
|
} |
|
] |
|
sample_history = [ |
|
{'role': 'system', 'content': GROUNDED_SYSTEM_PROMPT}, |
|
{'role': 'documents', 'content': json.dumps(documents, ensure_ascii=False)}, |
|
{'role': 'user', 'content': 'Глоабльное потепление'} |
|
] |
|
relevant_indexes = llm_client.chat.completions.create( |
|
model=llm_model, |
|
messages=sample_history, |
|
temperature=0.0, |
|
max_tokens=2048 |
|
).choices[0].message.content |
|
print('Using documents: ' + relevant_indexes + '\n----') |
|
final_answer = llm_client.chat.completions.create( |
|
model=llm_model, |
|
messages=sample_history + [{'role': 'assistant', 'content': relevant_indexes}], |
|
temperature=0.3, |
|
max_tokens=2048 |
|
).choices[0].message.content |
|
print(final_answer) |
|
``` |
|
|
|
Ответ после выполнения кода будет выглядеть примерно так: |
|
|
|
>Using documents: {"relevant_doc_ids": [0, 1]} |
|
>---- |
|
>Глобальное потепление – это долгосрочное повышение средней температуры атмосферы и океанов Земли. Это явление имеет множество последствий для нашей планеты, и среди них можно выделить два ключевых аспекта, основанных на доступных мне данных: |
|
> |
|
>1. **Уменьшение объема ледников**: За последние 50 лет наблюдается значительное сокращение объема ледников по всему миру. Согласно данным, объем ледников уменьшился на 30%. Это может быть связано с таянием ледников из-за повышения температур, что является одним из признаков глобального потепления. |
|
> |
|
>2. **Повышение уровня моря**: Уровень мирового океана также увеличивается, что связано с таянием ледников и ледяных покровов, а также с расширением воды при повышении температуры. С 1880 года уровень моря повысился на 20 сантиметров, и этот процесс продолжается, с ежегодным увеличением на 3,3 миллиметра. |
|
> |
|
>Эти изменения имеют серьезные последствия для экосистем, климата и человеческого общества. Таяние ледников приводит к повышению уровня моря, что может привести к затоплению прибрежных территорий и островов, а также к изменению водных ресурсов и климатических паттернов. |
|
|
|
Используя первый ответ модели `relevant_indexes` (JSON), можно понять нашла ли модель информацию в документах или нет, она обучена возврашать пустой массив если ее нет и в таком случае она будет отвечать, что не смогла найти информацию в базе знаний (при генерации второго ответа). |
|
|
|
### Нюансы и ограничения |
|
- Модель имеет **низкий уровень безопасности ответов** и нацелена на правильное и полное выполенние инструкций, имейте это ввиду при использовании и тестируйте самостоятельно. Частично это исправляется системными промптами и дополнительными указаниями о важности безопасности в промпте пользователя. |
|
- Системные промпты не предназначены для описание персонажей, мы рекомендуем использовать их для спецификации стиля ответа (вроде "answer only in json format"). Кроме того, желательно, писать их **на английском языке**, так как так было в датасете, от использования английского в системных промтпах не зависит язык ответа. |
|
- RAG режим **требует обязательного** наличия системного промпта `GROUNDED_SYSTEM_PROMPT` описаного в секции *Как работать с RAG*. Так же иногда модель может добавлять общую информацию из своих знаний в ответ к той, что есть в документах. |
|
- Модель лучше использовать с низкой темптературой (0.1-0.5), а таже использовать top_k (30-50), при температуре 1.0 были замечены случайные дефекты генерации. |
|
|
|
### Авторы |
|
|
|
- Sergei Bratchikov, [NLP Wanderer](https://t.me/nlpwanderer), [Vikhr Team](https://t.me/vikhrlabs) |
|
- Nikolay Kompanets, [LakoMoor](https://t.me/lakomoordev), [Vikhr Team](https://t.me/vikhrlabs) |
|
- Konstantin Korolev, [Vikhr Team](https://t.me/vikhrlabs) |
|
- Aleksandr Nikolich, [Vikhr Team](https://t.me/vikhrlabs) |
|
|
|
``` |
|
@inproceedings{nikolich2024vikhr, |
|
title={Vikhr: Advancing Open-Source Bilingual Instruction-Following Large Language Models for Russian and English}, |
|
author={Aleksandr Nikolich and Konstantin Korolev and Sergei Bratchikov and Nikolay Kompanets and Igor Kiselev and Artem Shelmanov}, |
|
booktitle={Proceedings of the 4th Workshop on Multilingual Representation Learning (MRL) @ EMNLP-2024}, |
|
year={2024}, |
|
publisher={Association for Computational Linguistics}, |
|
url={https://arxiv.org/pdf/2405.13929} |
|
} |
|
``` |