УДК 004.81
Выбор большой модели данных для чат-бота
Корчагов Андрей Юрьевич – студент кафедры Информационных систем и программной инженерии Владимирского государственного университета им. Александра Григорьевича и Николая Григорьевича Столетовых
Аннотация: В статье рассматриваются большие модели данных, такие как OpenAI GPT-3, Google BERT, Facebook RoBERTa, Mistral 7B и другие. Среди них выбирается оптимальная модель для чат-бота и рассматривается её архитектура.
Ключевые слова: чат-бот, большая модель данных, архитектура модель, скользящее окно, Mistral 7B.
Интернет и компьютерные сети играют важную роль в процессах развития бизнеса, важной частью которого является обратная связь компаний и потребителей. Сетевые технологии обеспечивают каналы взаимосвязи между участниками процессов. Во многих случаях для анализа текстовых данных от пользователей используются специальные программы - чат-боты. В связи с этим очень важна обработка данных, которые поступают от пользователей через эти программы. Процесс обработки данных является трудоемким и затратным по времени. Усовершенствовать его можно за счет автоматизации обработки текстовых массивов данных. Для этого часто применяют машинное обучение в виде нейросетей или готовых решений в виде больших языковых моделей данных (LLM). Поэтому данная статья будет посвящена выбору оптимальной языковой модели данных для распознавания русскоязычных и англоязычных текстов.
При выборе языковой модели данных для чат-бота есть несколько вариантов, которые могут быть рассмотрены в зависимости от потребностей и ограничений разработчика:
- Предобученные модели: OpenAI GPT-3, Google BERT, Facebook RoBERTa и другие. Однако, они могут быть ограничены в своих языковых возможностях и стоимости использования.
- Создание собственной модели: разработчик может обратиться к процессу создания собственной языковой модели. Однако, этот метод может потребовать значительных временных и ресурсных затрат.
- Комбинация предобученных моделей и собственных данных: разработчик может комбинировать предобученные языковые модели с вашими собственными данными для обучения.
В современном глобальном мире умение эффективно общаться на различных языках становится все более важным. В свете этого, Команда Mistral AI разработала языковую модель Mistral 7B, предлагая инновационное решение для многоязычной коммуникации.
Одним из самом значительных преимуществ LLM Mistral 7B является превосходную точность перевода, минимизируя ошибки и искажения.
Вторым важным компонентом Mistral 7B является его простота использования. Mistral 7B также обладает широкими возможностями многоязычности. Он поддерживает множество языков и может адаптироваться к специфическим требованиям каждого пользователя.
Для задач распознавания текста хорошо подходит модель Mistral 7B LoRA [4]. В рейтинге RussianSuperGLUE она сейчас на 2 месте (рис. 1). И по личному опыту, она лучше всех (из бесплатных) справляется с русскими текстами без дообучения.
Рисунок 1. Рейтинг RussianSuperGLUE.
Возможно, для каких-то специфических задач окажутся более подходящими другие модели.
Mistral 7B основан на архитектуре Mistral 7B, как и другие современные LLM‑модели, использует архитектуру transformer [3]. Архитектура модели transformer – архитектура глубоких нейронных сетей, основанная на поиске взаимосвязей между частями входных и выходных данных без использования рекуррентных нейронных сетей.
Mistral 7B LoRA это модель, дообученная методом LoRA на основе LLM Mistral. Основные параметры архитектуры обобщены в таблице 1.
Таблица 1. Архитектура модели.
Parameter |
Value |
dim |
4096 |
n_layers |
32 |
head_dim |
128 |
hidden_dim |
14336 |
n_heads |
32 |
n_kv_heads |
8 |
window_size |
4096 |
context_len |
8192 |
vocab_size |
32000 |
По сравнению с Llama в нем внесено несколько изменений, которые приведены ниже.
а) Внимание к скользящему окну (SWA). SWA использует многослойные слои трансформатора для отображения информации за пределами размера окна W. Скрытое состояние в позиции i слоя k, hi, отслеживает все скрытые состояния из предыдущего слоя с позициями между i−W и i.
Рекурсивно hi может получать доступ к токенам из входного слоя на расстоянии до W ×k токенов, как показано на рисунке 2. На последнем уровне, используя размер окна W =4096, мы получаем теоретический объем внимания примерно в 131 тыс. токенов. На практике для последовательности длиной 16 тыс. и W =4096, изменения, внесенные в Flash Attention [1] и xFormers [2], дают увеличение скорости в 2 раза по сравнению с базовым уровнем vanilla attention.
Рисунок 2. Скользящее окно Attention.
б) Кэш с переходящим буфером. Фиксированный диапазон внимания означает, что мы можем ограничить размер нашего кэша, используя кэш с переходящим буфером. Кэш имеет фиксированный размер W, а ключи и значения для временного шага i хранятся в позиции i по модулю W кэша. В результате, когда позиция i больше, чем W, прошлые значения в кэше перезаписываются, и размер кэша перестает увеличиваться. Иллюстрация на рисунке 3 показывает это для случая W =3. При длине последовательности в 32 тыс. токенов это сокращает использование кэш-памяти в 8 раз, не влияя на качество модели.
Рисунок 3. Кэш с переходящим буфером.
Кэш имеет фиксированный размер W = 4. Ключи и значения для позиции i хранятся в позиции i по модулю W кэша. Когда позиция i больше, чем W, прошлые значения в кэше перезаписываются. Скрытое состояние, соответствующее последним сгенерированным токенам, окрашено в оранжевый цвет.
Предварительное заполнение и разбивка на фрагменты. При генерации последовательности нам нужно прогнозировать токены один за другим, поскольку каждый токен обусловлен предыдущими. Однако запрос известен заранее, и мы можем предварительно заполнить кэш (k, v) запросом. Если запрос очень большой, мы можем разбить его на более мелкие фрагменты и предварительно заполнить кэш каждым фрагментом. Для этой цели мы можем выбрать размер окна в качестве размера нашего фрагмента. Таким образом, для каждого фрагмента нам нужно вычислить внимание по кэшу и по фрагменту. На рисунке 4 показано, как маска внимания работает как с кэшем, так и с фрагментом.
Рисунок 4. Предварительное заполнение и разбивка на фрагменты.
Во время предварительного заполнения кэша длинные последовательности разбиваются на фрагменты, чтобы ограничить использование памяти. Мы обрабатываем последовательность тремя блоками: “Кошка сидела на”, “коврик и пила”, “собака пошла”. На рисунке 4 показано, что происходит с третьим фрагментом (“the dog go to”): он обращается к самому себе, используя причинную маску (крайний правый блок), обращается к кэшу, используя скользящее окно (центральный блок), и не обращается к прошлым токенам, поскольку они находятся за пределами скользящего окна (левый блок).
В последние годы популярность LLM растет, и умение выбирать модель и писать простые приложения может дать разработчику значительное преимущество.
В заключение, языковая модель LLM Mistral 7B - это оптимальное решение для многоязычной коммуникации. Его передовая технология перевода и простота использования делают его незаменимым инструментом в глобальном мире.
Список литературы
- Tri Dao, Daniel Y. Fu, Stefano Ermon, Atri Rudra, and Christopher Ré. FlashAttention: Fast and memory-efficient exact attention with IO-awareness. In Advances in Neural Information Processing Systems, 2022.
- Benjamin Lefaudeux, Francisco Massa, Diana Liskovich, Wenhan Xiong, Vittorio Caggiano, Sean Naren, Min Xu, Jieru Hu, Marta Tintore, Susan Zhang, Patrick Labatut, and Daniel Haziza. xformers: A modular and hackable transformer modelling library. https://github.com/facebookresearch/xformers,
- Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N Gomez, Łukasz Kaiser, and Illia Polosukhin. Attention is all you need. Advances in neural information processing systems, 30, 2017.
- Mistral 7b / [Электронный ресурс] // huggingface.co: [сайт]. — URL: https://huggingface.co/IlyaGusev/saiga_mistral_7b_lora (дата обращения: 05.04.2024).