--- 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} } ```