С ChatGPT интересно экспериментировать. Возможно, вы также хотите иметь свою копию для личного пользования. Конечно, это невозможно, потому что ChatGPT — это не ПО для скачивания, и для него требуются огромные мощности компьютера. Тем не менее, можно создать урезанную версию, работающую на стандартных устройствах. В этой статье мы узнаем:
- какие языковые модели могут вести себя как ChatGPT;
- как построить чат-бота, используя продвинутые языковые модели.
Обзор
Эта статья разделена на три части.
- Что такое модели, следующие инструкциям?
- Как найти модели, следующие инструкциям
- Построение простого чат-бота.
Что такое модели машинного обучения, следующие инструкциям?
Языковые модели — это модели машинного обучения, которые предсказывают вероятность следующего слова, основываясь на предложении. Если мы спрашиваем у модели следующее слово и предлагаем его обратно, модель начинает генерировать текст.
Модели генерации текста стоят за многими языковыми моделями, такими как GPT-3. А следующие инструкциям модели — доработанные модели генерации текста, которые учатся диалогам и инструкциям. Они имитируют разговор между двумя людьми, и когда кто-то заканчивает предложение, другой собеседник отвечает.
Таким образом, модели генерации текста могут помочь закончить параграф с помощью первого предложения. Но модель, следующая инструкциям, может отвечать на вопросы или ответить по запросу.
Это не значит, что вы не можете использовать модели генерации текста для построения чат-бота. Но модель, следующая инструкциям, даст более качественный результат.
Как найти модели, следующие инструкциям?
Сегодня можно найти много следующих инструкциям моделей. Но для построения чат-бота понадобится что-то, с чем легко работать. Модели можно поискать на Hugging Face.
Обычно следующие инструкциям модели используют в названии моделей ключевое слово instruct. Поиск этого слова на Hugging Face может дать вам тысячи моделей. Но не все рабочие. Придется проверить каждую из них и прочитать их документацию, чтобы понять, что эта модель может делать, и выбрать самую подходящую.
Есть несколько технических критериев для выбора модели.
- На чём модель была обучена: точнее, на каком языке модель разговаривает. Модель, обученная на английских рассказах, не будет особо полезной для немецкого чат-бота, сфокусированного на физике.
- Какие библиотеки глубокого обучения она использует: обычно модели на Hugging Face построены с помощью TensorFlow, PyTorch, и Flax. Не все модели имеют версию для всех библиотек. Стоит убедиться, что у вас установлена нужная библиотека, прежде чем запускать модель с трансформерами.
- Какие ресурсы ей нужны: модели могут быть огромными. Часто для их запуска требуются графические процессоры. Но некоторым моделям требуются очень мощные процессоры, а может быть даже несколько. Надо убедиться, что ваши ресурсы поддерживают рассуждения модели.
Онлайн-курc по математике для Data Science
На курсе вы познакомитесь с основными моделями машинного обучения, научитесь выбирать и применять подходящие tree-based модели.
Программа занятий:
- Школьная математика: от теории множеств до производной и интеграла.
- Математический анализ: от числовых последовательностей до теории меры и интеграла Ламбера.
- Линейная алгебра: от матриц до билинейных форм.
- Комбинаторика: правила комбинаторики, множества и сочетания.
- Теория вероятностей и математическая статистика: от случайных событий до регрессии.
- Машинное обучение: Word2vec, градиентный спуск, KNN и т. д.
Построение простого чат-бота
Построим простого чат-бота. Чат-бот — это программа, которая берёт строку текста в качестве ввода и отвечает строкой, сгенерированной языковой моделью.
Для этой задачи была выбрана модель falcon-7b-instruct. Это модель с 7 миллионами параметров. Возможно, вам понадобится современный графический процессор, такой как nVidia RTX 3000, потому что он был разработан для работы с форматом bfloat16 для лучшей производительности. Использование ресурсов процессора на Google Colab или с инстанса EC2 на AWS — также подходящие решения.
Для построения чат-бота на Python достаточно следующего:
input("> ")
принимает от пользователя одну строку ввода. На экране вы увидите строку "> "
для вашего ввода. Ввод засчитывается, когда вы нажмёте Enter.
Остаётся вопрос, как получить ответ. В LLM вы даёте ввод или запрос в виде последовательности токенов ID (целочисленных), и модель отвечает другой последовательностью токенов ID. До и после взаимодействия с LLM следует переключаться между последовательностью целых чисел и текстовой строкой. Токены ID определены для каждой модели; то есть для одного и того же целого числа у разных моделей будут разные значения.
Transformers от Hugging Face делают эти шаги легче. Всё, что вам надо, — это создать конвейер и уточнить название модели и несколько других параметров. Настройка конвейера с названием модели tiiuae/falcon-7b-instruct, с форматом bfloat16 и возможностью использования GPU представлена ниже:
Конвейер создается в виде "text-generation" — это то, как карточка модели рекомендует работать с ней. Конвейер в transformers — это последовательность шагов для определённого задания. Одним из таких шагов является генерация текста.
Для использования конвейера необходимо уточнить ещё несколько параметров для генерации текста. Помните, что модель не генерирует именно текст, а возможности токенов. Вам предстоит понять из этих возможностей, каково следующее слово, и повторить процесс, чтобы сгенерировать больше слов. Обычно в этот процесс представляются вариации, то есть выбирается не единственный токен с наибольшей вероятностью, а производится семплирование в зависимости от распределения вероятности.
Далее представлено, как использовать конвейер:
Вы предоставили запрос в переменной prompt
, чтобы сгенерировать выходные последовательности. Можно попросить модель дать несколько вариантов, но здесь вы выставляете num_return_sequences=1
, так что вариант будет один. Вы также можете дать модели возможность сгенерировать текст, используя семплирование, но только из 10 токенов с большей возможностью (top_k=10)
.
Возвращенная последовательность не будет содержать ваш запрос, потому что return_full_text=False
. Самыми важными параметрами являются eos_token_id=newline_token
и pad_token_id=tokenizer.eos_token_id
. Они позволяют модели непрерывно генерировать текст, но только до символа перевода строки. Токен этого символа равен 193, как показано в первой строке сниппета.
Возвращённые sequences
— это список словарей (в данном случае — одного словаря). Каждый словарь содержит последовательность токенов и строку. Строку легко можно вывести следующим образом:
Языковая модель беспамятна. Она не запомнит, сколько раз её использовали и какими были прошлые запросы. Каждый раз — в новинку, поэтому модели стоит предоставлять историю прошлых диалогов. Это легко. Но так как это следующая инструкциям модель, которая знает, как обрабатывать диалоги, вам нужно не забыть, кто и что сказал в каком запросе. Предположим, что есть диалог между Алисой и Бобом. Вы даёте их имена в начале каждого предложения в запросе, например:
Затем модель должна сгенерировать текст, подходящий диалогу. После получения ответа добавьте его вместе с остальным текстом Алисы в запрос, и заново пошлите его модели. Соединим это всё, и получим простого чат-бота:
Заметим, как переменная dialog
обновляется для отслеживания диалога в каждой итерации, и как она используется для установки переменной prompt для следующего запуска конвейера.
Когда вы пытаетесь спросить у чат-бота «What is relativity», вряд ли в получите правильный ответ. Здесь потребуется промпт-инжиниринг. Вы можете сделать Боба профессором физики, чтобы у него имелся более полный ответ на вопрос. В этом и заключается магия LLM. Всё, что вам надо, — это добавить описание до начала диалога. Взглянем на обновлённый код (заметим, что теперь инициализируется dialog
с описанием собеседника):
Этот чат-бот может быть медленным при отсутствии достаточно мощного обеспечения. Возможно, результат будет не самым точным, но вот примерный диалог по вышеуказанному коду.
Этот чат-бот продолжит работать, пока вы не нажмёте Ctrl + C
или не дойдёте до максимальной длины (max_length=500)
в вводе конвейера. Максимальная длина — это сколько модель может прочитать за раз. Ваш запрос должен содержать не больше заявленного числа токенов. Чем больше максимальная длина, тем медленнее будет работать модель, и у каждой модели есть лимит длины. Модель falcon-7b-instruct позволяет выставить длину всего в 2048. ChatGPT же имеет максимальную длину в 4096 токенов.
Также можно заметить, что качество вывода неидеально. Частично это связано с тем, что не было попыток причесать ответ модели, прежде чем отправить его обратно пользователю, а частично — с тем, что мы выбрали модель с 7 млн параметрами, то есть самую маленькую модель в её семье. Обычно более крупная модель даёт результаты получше. Но и ресурсов на неё понадобится больше.
Дополнительное чтение
Ниже указана работа, которая может помочь вам лучше понять модели, следующие инструкциям:
Вывод
В этой статье вы научились созданию чат-бота с помощью большой языковой модели из библиотеки Hugging Face. Если быть точным, вы узнали:
- что языковая модель, способная поддержать диалог, называется следующей инструкциям моделью;
- как найти такие модели на Hugging Face;
- как использовать модели с помощью библиотеки
transformers
и построить чат-бота.
Комментарии