Языковые модели (Large Language models)
Они очень старались сделать кратко и интересно, но вышло просто интересно.
В кооперации @awesome_dl x @data blog мы решили позадавать друг другу вопросы на тему языковых моделей. Мне было интересно узнать как и почему LLM стали отдельной веткой исследования в мире Deep Learning моделей, а Андрею — про интерпретацию LLM. Результат нашей QA сессии перед вами. Прошу к прочтению и если у вас самих есть вопрос про LLMs, то мы с радостью ответим на них в комментариях :)
P.S. Далее в статье не раз упоминаются трансформеры. Если вы не знакомы с этой архитектурой, то рекомендую прочитать блог.
P.P.S. Читайте этот и следующий (будет через пару дней пост) как разговор двух почти LLM моделей. Мы специально подписали наши имена, чтобы было ясно где-кто вещает.
Сабрина: Какие выделяются виды LLM моделей и откуда различия между ними?
Здесь ответ стоит начать от постановки задачи. Глобально цель языковых моделей научится хорошо “понимать” язык, потому что именно “понимание” даёт возможность решать огромное число задач. И вот научить модель “понимать” можно следующими способами:
- Предсказание следующего слова. Модель, которая хорошо понимает язык должна уметь предсказывать следующее слово. Мотивация к этому — то как мы разговариваем — слово за словом мы передаем информацию друг другу. Для решения этой задачи используется класс авторегрессионных моделей, основанных на Transformer Decoder архитектуре. Основные представители - GPT, LLaMA, BLOOM
- Восстановление пропущенных слов. Чтобы оценить ключ понимания здесь, предлагаю провести аналогию с тем как мы изучаем иностранные языки. Большинство упражнений строится на том, что нужно заполнить пропуск правильным словом или набором слов — по контексту предложения мы должны понять, что нужно добавить в предложение. Эту логику понимания реализуют те языковые модели, что обучены для решения Masked Language Modelling. Основные примеры таких моделей это BERT, ALBERT, RoBERTa.
- Отвечать на вопросы. И здесь тоже аналогия с нами. Что нужно, чтобы правильно ответить на вопрос: хорошо понимать вопрос + уметь составлять ответ. Для этого хорошо подходит соединение двух типов моделей: Transformer Encoder и Transformer Decoder. Вопрос подается в модель Encoder, где хорошо выделяется контекст, а дальше контекст передаётся в генеративную часть (Decoder), где создается ответ.
Примерами таких моделей являются - T5, Bart, FlanT5
Сабрина: Чем LLM с одинаковой идеей обучения отличаются друг от друга?
На самом деле огромное множество отличий между моделями. Вот основные из них:
- На каких данных обучались модели? Это самое важное я бы отметил, чем больше качественных (“чистых”) данных тем лучшего качества достигнет модель. Основные датасеты для обучения: C4, Wikipedia. Причем здесь справедлив такой пайплайн – после того как модель была предобучена, она дообучается на инструктивных датасетах, чтобы её качество было улучшено в сторону более человекоподобных ответов. Например, FLAN или Alpaca
- Используемый механизм внимания. Например, архитектура Transformer базируется на модуле MultiHead Attention, но у него есть различные вариации. Например, есть механизм Linear Attention, который позволяет обрабатывать длинные последовательности, а есть механизм Multi-query attention, который позволяет ускорить инференс моделей. Разные Attentions — уже разные модели.
- Как кодируется позиционная информация? Архитектура трансформера, как комбинации MLP (Multi-layer perceptron) и Attention блоков инвариантна относительно порядка подаваемых слов. То есть предложения: “I like ice cream и “cream I ice like” представляет одно и тоже. Поэтому хотелось информацию о порядке слов в предложении передавать модели. Поэтому придумали positional encoding. Каждой позиции соответствует некоторый обучаемый вектор, который добавляется внутри трансформера. Далее, исследователи поняли, что более важен не абсолютный порядок слов, а относительный – поэтому появились механизмы relative positional encoding и новые отличия между моделями.
- Механизм токенизации. Токенизация это процедура разбиение исходного текста на набор подслов - токенов. Например, текст "I have a new GPU!" преобразуется в набор токенов ["i", "have", "a", "new", "gp", "##u", "!"]. Существует несколько видов токенизации – SentencePiece, Byte-Pair encoding и другие. Подробнее про них можно почитать тут. На токенизацию мало обращают внимания, но можно получить буст в качестве применяя технику BPE-dropout (некоторые токены выкидываются из словаря – из-за этого один и тот же текст может токенизироваться по-разному). Или еще один пример – модель LLaMA, в который каждой цифре поставлен в соответствие один токен лучше всего может решать арифметические задачи, по сравнению с другими моделями, где токенизация может группировать несколько цифр в один токен.
Сабрина: Почему мне полезно знать про LLM и где они могут пригодиться?
Почти везде, где есть текстовые данные. Большинство решений начинается с того, что вы берёте предобученную языковую модель и дообучаете на вашу задачу.
Кроме того, с развитием мультимодальности набирает популярность применения LLM в задачах компьютерного зрения, в робототехнике (по теме применения LLM в robotics скоро будет пост у меня в канале) и в работе с графами.
И в довесок, в повседневной жизни LLM в будущем станут (уже отчасти стали) ассистентами, которые будут закрывать многие ваши потребности в коммуникации, написании текстов и решении простых проблем (найти рецепт, вспомнить где-что лежит). Например, через LLM можно сказать роботу убраться в квартире и он выполнит. И чем раньше начнете учиться работать с этим инструментом тем больше выгоды вы извлечете из его развития.
Сабрина: Какой тренд в развитии LLM на базе последних исследований?
Основной — достаточно забавный: больше данных, больше модель, лучше результат. Это глобальный тренд, который часто перекрывает любые более умные попытки улучшить модель. Даже обнаружены формулы, которые позволяют в самом начале обучения предсказать качество модели.
Как челленджи, можно выделить решение следующих задач:
- Галлюцинации (модель строит грамматически и семантически правильные предложения, но в них смысла никакого смысла). Например, придумывает факты или документы, которых не было.
- Преодоления ограничения модели на размер контекста, с которым можно работать. Чтобы воистину раскрыть мощь языковых моделей, неплохо бы научить её читать большие тексты. Например, работы LongNet, где удалось засунуть 1 миллиард токенов (в “Война и мир” всего лишь 478 458 слов). Например, в модель можно добавить все книги про Гарри Поттера, дать затравку в виде новой идей продолжения и вуаля – новая часть готова.
- Прикладное применение в чат-ботах. Тут можно отметить различные виды дообучения на решения прикладных задач, например, FlanT5 или, во многом ставший известный благодаря ChatGPT подход RLHF (Reinforcement Learning Human Feedback), который позволяет научить модель давать ответы, которые больше нравятся человеку.
- Добавление текста в новые модальности. Тут тренд в том, чтобы использовать языковую модель как некоторого дирижера, который выбирает какой инструмент должен использоваться. К примеру, работа MM-REAct, где модель научили использовать большое число инструментов по работе с изображением, при этом взаимодействие происходит только через текст. Также можно отметить работу Kosmos, где авторы научились добавлять несколько модальностей в языковую модель и можно спокойно вести диалог с моделью, перемешивая текст, картинки и аудио.
- Более доступные языковые модели. Сейчас много усилий вкладывается в то, что сделать обучение и инференс более доступными, чтобы их можно было запускать на любом компьютере без ограничений. Думаю, так будет и в будущем. Например, библиотека bitsandbytes, которая позволяет обучать модели в 8-bit. Или библиотека PEFT, которая позволяет не учить модель целиком под всю задачу, а добавлять обучаемые блоки адаптеры, стоимость обучения, которых намного меньше. И также большинство моделей доступны в open-source, поэтому их можно свободно использовать под свои цели (только не нарушайте лицензию, под которой выпускается модель)
Сабрина: Какие библиотеки будут полезны для работы с LLM, и какие используют наиболее?
Андрей:
- HuggingFace. В библиотеке реализовано огромное число моделей не только по текстам, но и другим модальностям, есть огромное число датасетов. Фреймворк, с которым точно стоит познакомится.
- x_transformers. В библиотеке реализованы различные модификации трансформеров, которые вы можете брать себе на вооружение.
- Peft - библиотека по работе с адаптерами, которые позволяют быстро и качественное дообучить предобученную языковую модель
- bitsandbytes / deepspeed /Megatron LM - библиотеки по работе с большими языковыми моделями, где реализованы различные трюки, которые позволяют уменьшать объем используемой памяти. Например, gradient checkpointing или off-loading.
- NLTK / re. Не забываем о классических библиотеках, которые можно использовать для предобработки текста. Часто в бизнес-задачах решение, основанное на регулярках, дает высокое качество.
Сабрина: Окей, а можно ли обойтись базовыми моделями типа W2V или BoW?
Андрей: Да, можно всегда использовать классические методы. Это как обучить линейную модель, всегда можно это сделать. Если возникают ограничения малого объема данных или отсутствия вычислительных ресурсов или требований скорости работать, то первое, что вы должны вспоминать классические подходы.
Сабрина: Принято, понято и очень интересно! И больше ссылок богу ссылок, за это отдельная благодарность. А в следующем посте мы поменяемся ролями и перейдем на вторую часть вопросов, вопросов о методах интерпретации языковых моделей.
До скорой связи на каналах @awesome_dl x @data blog!