УДК 004.81

Выбор большой модели данных для чат-бота

Корчагов Андрей Юрьевич – студент кафедры Информационных систем и программной инженерии Владимирского государственного университета им. Александра Григорьевича и Николая Григорьевича Столетовых

Аннотация: В статье рассматриваются большие модели данных, такие как OpenAI GPT-3, Google BERT, Facebook RoBERTa, Mistral 7B и другие. Среди них выбирается оптимальная модель для чат-бота и рассматривается её архитектура.

Ключевые слова: чат-бот, большая модель данных, архитектура модель, скользящее окно, Mistral 7B.

Интернет и компьютерные сети играют важную роль в процессах развития бизнеса, важной частью которого является обратная связь компаний и потребителей. Сетевые технологии обеспечивают каналы взаимосвязи между участниками процессов. Во многих случаях для анализа текстовых данных от пользователей используются специальные программы - чат-боты. В связи с этим очень важна обработка данных, которые поступают от пользователей через эти программы. Процесс обработки данных является трудоемким и затратным по времени. Усовершенствовать его можно за счет автоматизации обработки текстовых массивов данных. Для этого часто применяют машинное обучение в виде нейросетей или готовых решений в виде больших языковых моделей данных (LLM). Поэтому данная статья будет посвящена выбору оптимальной языковой модели данных для распознавания русскоязычных и англоязычных текстов.

При выборе языковой модели данных для чат-бота есть несколько вариантов, которые могут быть рассмотрены в зависимости от потребностей и ограничений разработчика:

  1. Предобученные модели: OpenAI GPT-3, Google BERT, Facebook RoBERTa и другие. Однако, они могут быть ограничены в своих языковых возможностях и стоимости использования.
  2. Создание собственной модели: разработчик может обратиться к процессу создания собственной языковой модели. Однако, этот метод может потребовать значительных временных и ресурсных затрат.
  3. Комбинация предобученных моделей и собственных данных: разработчик может комбинировать предобученные языковые модели с вашими собственными данными для обучения.

В современном глобальном мире умение эффективно общаться на различных языках становится все более важным. В свете этого, Команда Mistral AI разработала языковую модель Mistral 7B, предлагая инновационное решение для многоязычной коммуникации.

Одним из самом значительных преимуществ LLM Mistral 7B является превосходную точность перевода, минимизируя ошибки и искажения.
Вторым важным компонентом Mistral 7B является его простота использования. Mistral 7B также обладает широкими возможностями многоязычности. Он поддерживает множество языков и может адаптироваться к специфическим требованиям каждого пользователя.

Для задач распознавания текста хорошо подходит модель Mistral 7B LoRA [4]. В рейтинге RussianSuperGLUE она сейчас на 2 месте (рис. 1). И по личному опыту, она лучше всех (из бесплатных) справляется с русскими текстами без дообучения.

image001

Рисунок 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, отслеживает все скрытые состояния из предыдущего слоя с позициями между iW и i.

Рекурсивно hi может получать доступ к токенам из входного слоя на расстоянии до W ×k токенов, как показано на рисунке 2. На последнем уровне, используя размер окна W =4096, мы получаем теоретический объем внимания примерно в 131 тыс. токенов. На практике для последовательности длиной 16 тыс. и W =4096, изменения, внесенные в Flash Attention [1] и xFormers [2], дают увеличение скорости в 2 раза по сравнению с базовым уровнем vanilla attention.

image002

Рисунок 2. Скользящее окно Attention.

б) Кэш с переходящим буфером. Фиксированный диапазон внимания означает, что мы можем ограничить размер нашего кэша, используя кэш с переходящим буфером. Кэш имеет фиксированный размер W, а ключи и значения для временного шага i хранятся в позиции i по модулю W кэша. В результате, когда позиция i больше, чем W, прошлые значения в кэше перезаписываются, и размер кэша перестает увеличиваться. Иллюстрация на рисунке 3 показывает это для случая W =3. При длине последовательности в 32 тыс. токенов это сокращает использование кэш-памяти в 8 раз, не влияя на качество модели.

image003

Рисунок 3. Кэш с переходящим буфером.

Кэш имеет фиксированный размер W = 4. Ключи и значения для позиции i хранятся в позиции i по модулю W кэша. Когда позиция i больше, чем W, прошлые значения в кэше перезаписываются. Скрытое состояние, соответствующее последним сгенерированным токенам, окрашено в оранжевый цвет.

Предварительное заполнение и разбивка на фрагменты. При генерации последовательности нам нужно прогнозировать токены один за другим, поскольку каждый токен обусловлен предыдущими. Однако запрос известен заранее, и мы можем предварительно заполнить кэш (k, v) запросом. Если запрос очень большой, мы можем разбить его на более мелкие фрагменты и предварительно заполнить кэш каждым фрагментом. Для этой цели мы можем выбрать размер окна в качестве размера нашего фрагмента. Таким образом, для каждого фрагмента нам нужно вычислить внимание по кэшу и по фрагменту. На рисунке 4 показано, как маска внимания работает как с кэшем, так и с фрагментом.

image004

Рисунок 4. Предварительное заполнение и разбивка на фрагменты.

Во время предварительного заполнения кэша длинные последовательности разбиваются на фрагменты, чтобы ограничить использование памяти. Мы обрабатываем последовательность тремя блоками: “Кошка сидела на”, “коврик и пила”, “собака пошла”. На рисунке 4 показано, что происходит с третьим фрагментом (“the dog go to”): он обращается к самому себе, используя причинную маску (крайний правый блок), обращается к кэшу, используя скользящее окно (центральный блок), и не обращается к прошлым токенам, поскольку они находятся за пределами скользящего окна (левый блок).

В последние годы популярность LLM растет, и умение выбирать модель и писать простые приложения может дать разработчику значительное преимущество.

В заключение, языковая модель LLM Mistral 7B - это оптимальное решение для многоязычной коммуникации. Его передовая технология перевода и простота использования делают его незаменимым инструментом в глобальном мире.

Список литературы

  1. 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.
  2. 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,
  3. 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.
  4. Mistral 7b / [Электронный ресурс] // huggingface.co: [сайт]. — URL: https://huggingface.co/IlyaGusev/saiga_mistral_7b_lora (дата обращения: 05.04.2024).