Text Generation
Transformers
Safetensors
Russian
English
llama
conversational
text-generation-inference
Inference Endpoints
suronek's picture
Update README.md
e99a6f2 verified
---
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:
[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](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}
}
```