Изучение больших языковых моделей – Часть 3

Изучение больших языковых моделей - Часть 3

Настройка, квантование модели, низкоранговые адаптеры, обучение по инструкции и использование LLM для генерации обучающих данных

Эта статья написана в первую очередь для самостоятельного изучения. Поэтому она охватывает широкий спектр и также углубляется. Вы можете пропустить некоторые разделы в зависимости от ваших интересов или поискать интересующую вас область.

Ниже приведены некоторые вопросы, которые меня занимали или возникли при попытке настроить LLM. Статья является попыткой ответить на эти вопросы и поделиться этой информацией с другими любознательными.

Поскольку LLM основаны на нейросети с функцией потерь, не является ли весь тренировочный процесс LLM наблюдаемым? Почему его обычно называют необучаемым тренировочным процессом? Можно ли в одном коротком предложении обучить LLM, чтобы показать, как работает тренировка LLM на практике? Что такое маскированная и причинная языковая модель? Можете ли вы объяснить интуицию за трансформерную архитектуру в одной картинке? Что именно подразумевается под необучаемым тренировочным процессом в LLM? Почему Илья Суверскер, основной архитектор ChatGPT, считает необучаемый тренировочный процесс священным граалем машинного обучения? Что означает развитие/понимание LLM?

Каковы сферы применения LLM? Почему LLM наиболее подходят в качестве помощников по производительности? Что такое векторная база данных/встраивание для информационного поиска? Можно ли использовать LLM для чего-то кроме текстовых задач? Что такое причинное рассуждение? В чем проблема с LLM? Почему такие люди, как Ян ЛеКун, считают, что текущие LLM безнадежны? Являются ли LLM объяснимыми, и как их можно эффективно использовать, если они таковыми не являются?

Зачем настраивать/переобучать LLM? Почему сложно обучать LLM? Как квантование и LoRA помогают в обучении больших LLM? Как работают квантование и LoRA? Каков эффективный способ настройки предварительно обученных LLM? Что такое тренировка по инструкции? Что такое самообучение? Как можно сгенерировать высококачественный набор обучающих данных для тренировки по инструкции?

Еще неотвеченные вопросы: можно ли показать, как LLM с различными возможностями могут быть иерархически структурированы для создания сложной автоматизации с причинным рассуждением? Какова цель создания искусственного интеллекта, подобного человеческому, на основе LLM или нейронных сетей? Почему это кажется очень похожим на создание птичьего полета задолго до изобретения фиксированного крыла самолета?

Поскольку статья довольно длинная, я разделил ее на три части для лучшей читабельности.

Часть 1 будет рассматривать эволюцию тренировки LLM. Цель состоит в том, чтобы создать контекст, чтобы мы могли понять волшебство или, более технически, возникновение, которое начинается, когда размер модели превышает порог и когда она обучается огромным объемом данных. Углубленные разделы подробно и глубоко раскрывают эти концепции, хотя большинство программистов также смогут понять их.

Часть 2 кратко расскажет о популярных сферах применения LLM: персональные ассистенты и чат-боты с пользовательскими данными с использованием шаблонов информационного поиска (поиск векторного пространства с дополнением LLM). Мы также рассмотрим идеи о том, как модель мышления и понимание языка моделей могут стать более мощными сценариями использования. В этом контексте мы рассмотрим одно основное ограничение модели LLM, сопоставив преимущества обучения с учителем с недостатком моделей LLM – отсутствием объяснимости или сложностью определения фактов по сравнению с галлюцинациями. Мы рассмотрим, как такие системы были очень эффективно использованы в компьютерных системах с иерархией контроля, ненадежные системы стали надежными благодаря контролю на более высоком уровне – например, наш ежедневный использование ChatGPT и как это может быть расширено на другие сферы применения.

Часть 3 будет рассматривать некоторые концепции, связанные с обучением LLM на пользовательских областях. Мы будем рассматривать понимание области в этой части и то, насколько это более мощно по сравнению с простыми шаблонами информационного поиска векторного пространства. Это просто в игрушечных примерах, но на практике это далеко не так просто с реальными данными. Мы рассмотрим, как техники квантования открыли очень большие LLM миру и как это, совместно с концепцией сокращения параметров обучения, демократизировало настройку LLM. Мы рассмотрим основную технику эффективной настройки – тренировку по инструкции и то, как решить самую большую практическую проблему при тренировке по инструкции – отсутствие качественного набора данных для тренировки по инструкции со всеми рассмотренными нами концепциями.

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

Подстройка модели на пользовательских данных домена

Все популярные модели, такие как GPT3/3.4/4 и LLAMA2, в основном обучаются на данных, полученных путем сканирования интернета. Common Crawl, WebText, GitHub, StackOverflow и т.д.: это огромные наборы данных текста и кода, которые собираются с общедоступной сети и некоторые отобранные, например, набор вопросов и ответов SQAD.

Мировоззрение и информация, которую модель усвоила, также основаны на этих данных. Однако это означает, что если у нас есть некоторые специфические для домена данные, которые модель не видела, то она сама по себе не сможет отвечать на вопросы, связанные с такими данными в случае использования закрытого вопросно-ответного случая или любого другого случая использования, зависящего от конкретных данных домена.

Например, большинство онлайн-порталов добавляют виртуальных помощников для своих клиентов, банков, электронной коммерции, службы поддержки клиентов и т.д. А огромное, если не подавляющее большинство данных в мире все еще находится за пределами интернета в предприятиях. Мы видели во второй части, как LLM-модели могут помочь в решении задач поиска информации на основе векторных пространств. Но что, если наш случай использования более высокого уровня? Ему требуется “понимание” домена, возможно, некоторые задачи более высокого уровня рассуждений. Именно здесь на сцену выходит настройка с использованием пользовательских данных.

Я не могу предоставить случай использования, где можно использовать рассуждения более высокого уровня. Есть несколько более простых, например, обучение на пользовательских проблемах, а затем задание модели рассуждать о похожих проблемах и возможных решениях, но они пока не были протестированы. Поэтому давайте остановимся на более простом случае использования – закрытая вопросно-ответная система, где модель отвечает на вопросы на основе ее внутренних знаний.

source Can Generative Pre-trained Language Models Serve as Knowledge Bases for Closed-book QA?

Приведенное выше цитируется из статьи 2021 года “Можно ли использовать генеративные предварительно обученные языковые модели в качестве баз знаний для закрытой вопросно-ответной системы?”. Эта статья уже устарела с точки зрения количества и размера моделей и тренировки. Авторы 2021 годовых моделей не смогли достичь великолепных результатов, и великолепные результаты, о которых говорится в некоторых исследованиях, могут быть обусловлены высокой перекрытостью тренировочных и тестовых наборов данных.

В интернете также много учебных материалов, которые пытаются объяснить этот концепт на примере игрушечных наборов данных. Настоящая проблема заключается в том, чтобы модель сначала “поняла” данные, а не просто повторяла их.

Без понимания она будет повторять ответ на основе сходства вопроса в тренировочном наборе данных или и вопроса, и ответа. Чтобы предотвратить это, у авторов есть промежуточный шаг, называемый “повторение”, где модель вынуждена повторять/выводить соответствующие отрывки, а затем выдавать ответ.

Чтобы быть ясным, сейчас (2023 год) нет сомнений, особенно с GPT3/4, LLAMA2 и подобными моделями, в выполнимости этого случая использования, то есть модель может понять вопрос, обладает некоторыми способностями к причинно-следственному рассуждению и может обобщать, чтобы научиться модели мира на основе своих тренировочных данных и использовать их оба для создания грамотного ответа на вопрос.

Давайте посмотрим на трудности по порядку, однако, обучения большой модели. Первое – это важность размера модели. Этот GIF из блога Google AI прекрасно иллюстрирует это.

Только когда размер модели достаточно велик, модель начинает “понимать” язык и обобщать задачи.

source https://ai.googleblog.com/2022/04/pathways-language-model-palm-scaling-to.html

Относительно легко и экономично обучать или настраивать небольшую модель с использованием наших пользовательских данных, так как требования к графическому процессору и инфраструктуре очень низки. В отличие от этого, для загрузки очень больших языковых моделей и их настройки (без квантования) в распределенном режиме требуются огромные парки графических процессоров и тренировочная инфраструктура (например, см. библиотеки типа DeepSpeed).

LLM-модели поставляются в разных размерах, в зависимости от количества обучаемых параметров или весов. Меньшие модели, которые имеют менее 1 миллиарда параметров (GPT2 124 M, Bloom 560M, Flan-T5 783 M и т.д.), могут быть обучены на ноутбуке с графическим процессором с 8 до 15 ГБ оперативной памяти).

На протяжении довольно долгого времени я пытался сделать следующее. Я пытался переобучить небольшой набор тестовых данных на декодирующих моделях, таких как GPP2-small, GPT-Medium и Bloom, а также на кодирующе-декодирующих моделях, таких как Flan-T5, думая, что понимание, которое мы видим в ChatGPT (см. несупервизированное обучение Часть 1), может появиться в некоторой форме, если мы обучимся на этих меньших моделях (с менее чем одним миллиардом параметров). Как указано в статье, я попробовал оба вида обучения: причинное обучение, при котором модель представляется только предыдущими токенами, и обучение на основе маскированной языковой модели, при котором модель представляется полными токенами, но определенный процент токенов маскируется случайным образом, и модель должна их предсказать.

Тонкая настройка малых моделей проста, но неэффективна

Глубокий погружение: я начал с обучения небольшой модели, например, GPT2, с небольшим набором данных. Это несколько глав из руководства по хирургии Project Gutenberg, авторы которого – Алексис Томсон и Александр Майлз. Я хотел предоставить некоторую информацию, которая не является общей и может быть проверена для сопоставления с результатами модели. Обучение проводилось как с использованием HuggingFace Trainer, так и с использованием прямого способа (вдохновленного get_batch из NanoGPT от Карпати). Мы видим, что потери модели очень быстро уменьшаются, и она очень быстро переобучается на данных. Она генерирует ожидаемые следующие токены в соответствии с обучающими данными. Здесь это показано в этом блокноте. Хотя она хорошо переобучается, она не обладает ни капли “понимания”.

Более подробная информация здесь: https://medium.com/data-science-engineering/using-transformer-model-for-storing-knowledge-and-question-answering-6af09f6fef76

Следующий вариант – тонкая настройка большой модели с помощью этих данных. Однако это крайне сложно сделать, и даже если использовать облачные решения, это будет довольно дорого стоить. (То, что сейчас предоставляет OpenAI, – это Fine-Tuning Instruct, о котором мы расскажем позже)

Это занимает много месяцев времени GPU-фермы и специализированной библиотеки и инфраструктуры для распределения обучения по нескольким необходимым для обучения LLM-графическим процессорам.

Инфраструктура, энергопотребление, деньги и углеродный след настолько огромны, что реально обучать большие LLM могут только несколько крупных организаций и институтов.

Например, даже относительно небольшую модель, такую как BigScience Bloom 3 Billion, даже при загрузке весов в 16-битный формат нельзя обучить на A100 на ColabPro с 40 ГБ GPU-памяти (наибольшая доступная память), так как она выходит за пределы памяти.

Решение – тонкая настройка больших моделей с помощью квантования и эффективной настройки параметров

Решение заключается в уменьшении размера моделей, чтобы они помещались на доступный GPU, а затем их тонкая настройка. Это состоит из двух частей – квантования и эффективной настройки параметров.

Квантование – это техника уменьшения размера памяти модели путем представления обычного типа данных каждого веса – FP32 или 32-разрядного числа с плавающей запятой или полной точности, до полуточности FP16 или четверть точности INT8 или даже еще меньше INT4

Настоящая магия заключается в том, что ноутбук с достаточно новым GPU (с Tensor Cores) может запускать недавно опубликованную Meta Research предварительно обученную модель Lamma2 на 7 миллиардов параметров. Представьте себе сжатые знания и модель NLU (понимания естественного языка), работающую на вашем локальном ноутбуке. Это все еще небольшая модель, но она все же способна понимать и имеет достаточно встроенных мировых знаний, чтобы быть довольно полезной.

Глубокий погружение: квантование – это алгоритм представления числа с высокой точностью с использованием числа с низкой точностью. Очевидно, будет потеря. Предположим, что мы преобразуем число FP32 или FP16 в число INT4. Теперь 4-битное целое число в основном может представлять (²⁴=16) чисел. Вот очень хорошее объяснение и кодировка здесь . Обратите внимание, что в реальной жизни статистические свойства весов используются для повышения эффективности. Это набор нововведений при работе с большой моделью в режиме 4-битного прямого прохода в статье QLoRA. В простом примере мы знаем, что веса в нейронных сетях нормализуются в диапазоне от -1 до 1. Итак, мы делим это на 16 равных частей с помощью np.linspace, что дает `[-1. -0.86666667 -0.73333333 -0.6 -0.46666667 -0.33333333 -0.2 -0.06666667 0.06666667 0.2 0.33333333 0.46666667 0.6 0.73333333 0.86666667 1. ]`. Предположим, что нам нужно представить число 0.5678 в формате Int4, это превратится в ближайшее число 0.6, которое может быть представлено как 12 (индексное число) в формате Int4, с потерей точности 0.6-0.5678. Обратите внимание, что для этого требуется поддержка аппаратного обеспечения с помощью TensorCores в графическом процессоре NVIDIA

Вот пример работы в блокноте Colab с бесплатным тарифом, с GPU T4 и 15 ГБ GPU-памяти с некоторыми начальными тестами для проверки кода – llama2–7b-4bit-Inferernce.ipynb – Colaboratory (google.com)

Представьте себе, что модель, подобная этой или более совершенным моделям в будущем, могла бы работать на небольших серверах или в автомобилях и использовать свою причинную логику и знания о модели мира для наблюдения за более низкоуровневыми/специализированными системами искусственного интеллекта и машинного обучения.

Параметрическая эффективная настройка включает в себя набор методов, с помощью которых количество параметров, требующих донастройки, значительно сокращается, что позволяет обучать даже большие модели на обычном оборудовании.

DeepDive: Low-Rank Adaptation или LoRA и Qunatised LoRA или QLoRA – две популярные техники параметрической эффективной настройки

“Мы предлагаем Low-Rank Adaptation, или LoRA, которая замораживает веса предварительно обученной модели и вводит в каждый слой архитектуры трансформера обучаемые матрицы декомпозиции ранга, что значительно сокращает количество обучаемых параметров для последующих задач. По сравнению с GPT-3 175B, донастроенным с помощью Adam, LoRA может сократить количество обучаемых параметров в 10 000 раз …“ https://arxiv.org/pdf/2106.09685.pdf.

LoRA основана на концепции ранга матрицы и сингулярного разложения (SVD) большой матрицы на три меньшие. Изучив это https://web.stanford.edu/class/cs168/l/l9.pdf, я смог примерно понять, как это работает. Две картинки лучше всего объясняют это, предполагая, что A – это большая матрица весов. С помощью SVD матрицу A можно приближенно аппроксимировать или сжать в виде матриц Uk, Sk (ранг=r) и Vk. Это то, что делает LoRA на высоком уровне – веса модели (слоев внимания запросов и значений сети трансформера) замораживаются, а вместо них добавляются очень маленькие веса адаптера, которые обучаются с помощью обратного распространения

Источник https://web.stanford.edu/class/cs168/l/l9.pdf

Обратите внимание, что в LoRA используются только матрицы U и V, поскольку идея заключается в аппроксимации весов. Из закрашенной части должно быть ясно, что используется только часть исходных весов. Основным параметром в LoRA является ‘ранг’, который в сущности прямо пропорционален размеру обучаемых параметров. Теперь QLoRA – это новая техника, при которой квантованная модель (загруженная в 8-битном или 4-битном формате) донастраивается с помощью техник LoRA от Тайма Деттмерса и других. Он также является автором известной библиотеки bitsandbytes

Таким образом, у нас теперь есть способ помещать довольно большие модели (7B или более) на одну GPU с помощью квантования, а затем обучать их эффективно по параметрам с помощью LoRa/QLoRa.

Вариант 1: Безнаблюдательное обучение с донастройкой через QLoRa

Используя небольшие обучающие данные и QLoRA, я сначала попытался обучить большую модель Lamma2 с 7B параметрами, подавая на вход обучающий текст в его исходном виде (обучение модели Causal LM через безнаблюдательное обучение). Обратите внимание, что эта модель была загружена в формате 4 бит, что позволяет выполнять ее на одной GPU T4 и обучать с помощью QLoRA.

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

Здесь есть иллюстративный блокнот Colab. Вы можете видеть, что обучение модели только текстом в его исходном виде не приводит к правильным ответам на вопросы. Ответы не зависят от обучающих данных.

Вариант 2: Инструкционная донастройка с помощью QLoRa

Концепция инструкционной донастройки – это высокоуровневая обучающая концепция, представленная в этой статье “FineTuned Language Models Are Zero shot Learners (FLAN)”

Мы используем интуицию, что задачи обработки естественного языка могут быть описаны с помощью инструкций на естественном языке, таких как “Является ли настроение в этом обзоре фильма позитивным или негативным?” или “Переведите ‘как дела’ на китайский.” Мы берем предварительно обученную модель языка с 137B параметрами и выполняем инструкционную донастройку …

Мы пытаемся использовать инструкционное обучение для преобразования наших обучающих данных в набор инструкций, чтобы модель научилась.

Поскольку мы используем QLoRA, мы практически следуем этой статье – QLORA: Efficient Finetuning of Quantized LLMs, касательно набора данных для обучения и формата, который авторы использовали для обучения своей модели Gauanco

<s>[INST] {user_instruction} [/INST] {model_response}</s> https://huggingface.co/datasets/mlabonne/guanaco-llama2/viewer/default/train?row=0

Это формат модели Llama2 и может отличаться для других.

DeepDive: В этом наборе данных Instruct используется метод обучения с учителем. Мы используем класс Supervised Fine Tuner Trainer (SFTTrainer) для настройки модели с учителем. Он не делает ничего особенного, кроме поддержки конфигураций обучения PEFT/QLoRA и передачи управления базовому классу Trainer, который используется для обычного причинного обучения. Как уже объяснялось ранее, когда эксперты LLM говорят об обучении без учителя, они подразумевают на более высоком уровне неявное понимание, а не фактическое обучение (которое основано на метках/целях и функции потерь Cross Entropy). Фактическое обучение основано на модели с учителем и причинной (или маскированной) модели.

Одной из самых сложных проблем обучения является поиск или создание набора данных хорошего качества для обучения.

В нашем случае, требуется преобразование доступного набора данных для обучения в набор данных инструкций. Поскольку наш случай использования закрытой книги QA, нам необходимо преобразовать его в формат QA. Использование старых методов NLP, таких как распознавание именованных сущностей (NER), а затем использование их для создания набора данных QA, оказалось неэффективным.

Здесь может быть использовано понятие Самоинструкция

Большие модели языка “настроенные на инструкции” (т.е. дообученные для реагирования на инструкции) продемонстрировали удивительную способность обобщаться нулевым способом к новым задачам. Тем не менее, они сильно зависят от инструкций, написанных людьми, которые часто ограничены по количеству, разнообразию и креативности, что затрудняет общность настроенной модели. Мы представляем SELF-INSTRUCT, фреймворк для улучшения способности моделей языка, предварительно обученных моделей, следовать инструкциям путем использования собственной генерации.

SELF-INSTRUCT: Выравнивание моделей языка с самогенерируемыми инструкциями: https://arxiv.org/pdf/2212.10560.pd

Однако до появления Llama2 лучшей моделью была модель GPT 3/4 через ChatGPT или ее API, и использование этих моделей для выполнения тех же действий было дорого.

7-милиардная модель Llama2 имеет достаточную степень NLU (естественного языкового понимания), чтобы создавать вывод на основе определенного формата. Запуск этого в режиме 4-битной квантования делает возможным вычислительно выполнить это на большом наборе данных и преобразовать его в набор данных QA.

Было использовано следующее начальное условие. Контекстом было скользящее окно из текстового набора данных.

system_message = “““Вы – умный помощник ИИ, который может создавать вопросы и ответы на основе контекста““” Colab notebook

С минимальным анализом и донастройкой вывода модели, мы смогли создать набор данных QA следующего формата.

<s>[INST] Источник:8989REF Чем является процесс ремонта в живой ткани? [/INST] Источник:8989REF Процесс ремонта в живой ткани зависит от врожденной способности жизненных клеток реагировать на раздражение, вызванное травмой или болезнью. Клетки поврежденных тканей проходят пролиферативные изменения, чтобы восстановить нормальную структуру и конфигурацию части. </s><s>[INST] Источник:8989REF В какой степени разные ткани способны осуществлять восстановительный процесс? [/INST] Источник:8989REF Способность различных тканей осуществлять восстановительный процесс различается. Простые структуры, такие как кожа, хрящ, кость, периост, сухожилие, имеют высокую способность к регенерации и могут привести к практически идеальному восстановлению в нормальное состояние. Более сложные структуры, такие как секретирующие железы, мышцы и ткани центральной нервной системы, восстанавливаются неполноценно, с простой рубцовой соединительной тканью, занимающей место утраченного или разрушенного. </s><s>[INST] Источник:8989REF Что определяет тип ткани, которая может быть замещена в поврежденной части? [/INST] Источник:8989REF Любую данную ткань можно заменить только тканью аналогичного вида. В поврежденной части каждый элемент принимает свое участие в репаративном процессе, производя новый материал, который более или менее приближается к исходной ткани. </s><s>[INST] Источник:8989REF Какова роль жизненных клеток в процессе ремонта? [/INST] Источник:8989REF Жизненные клетки, также известные как стволовые клетки, играют важную роль в процессе ремонта. Они отвечают на раздражение, вызванное травмой или болезнью, и проходят пролиферативные изменения, чтобы восстановить нормальную структуру и конфигурацию части. </s><s>[INST] Источник:8989REF Как процесс ремонта различается между простыми и сложными тканями? [/INST] Источник:8989REF Процесс ремонта различается между простыми и сложными тканями. Простые структуры, такие как кожа, хрящ, кость, периост, сухожилие, имеют высокую способность к регенерации и могут привести к практически идеальному восстановлению в нормальное состояние. Более сложные структуры, такие как секретирующие железы, мышцы и ткани центральной нервной системы, восстанавливаются неполноценно, с простой рубцовой соединительной тканью, занимающей место утраченного или разрушенного. </s><s>[INST] Источник:8989REF Может ли репаративный процесс привести к идеальному восстановлению исходной ткани? [/INST] Источник:8989REF Да, в некоторых случаях репаративный процесс может привести к идеальному восстановлению исходной ткани. Например, простые структуры, такие как кожа, хрящ, кость, периост и сухожилие, имеют высокую способность к регенерации и могут восстановить нормальную структуру и конфигурацию части. </s><s>[INST] Источник:8989REF Какова роль рубцовой соединительной ткани в процессе ремонта? [/INST] Источник:8989REF Рубцовая соединительная ткань играет роль в процессе ремонта, заменяя то, что было утрачено или разрушено в более сложных структурах, таких как секретирующие железы, мышцы и ткани центральной нервной системы. </s>

Это было подано на настройку модели QLoRA (Colab Notebook). Мы видим, что вывод от 4-битной квантованной модели llama2 7 B после настройки модели довольно хороший. Colab Notebook

Попытка уменьшить галлюцинации с помощью настройки модели

В сгенерированном наборе данных я добавил специальный тег `Source:8989REF`. Идея заключалась в том, что с помощью внимания этот токен каким-то образом будет связан с текстом, на котором мы тренировались. И затем использовать этот хэш как-то, чтобы настроить подсказку для контроля галлюцинаций.

Что-то вроде “[INST] <<SYS>>\nТы помощник по ответам на вопросы. Пожалуйста, отвечай только на основе этого источника Source:8989REF”

Однако, оказалось, что это была очень наивная попытка.

Даже с пользовательским обучением не удается контролировать галлюцинации

Также обратите внимание, что сгенерированный QA пропустил преобразование тренировочных данных, связанных с методом профессора Тирша, в правильный набор данных для вопросов и ответов. Эти и другие улучшения нужно экспериментировать, а также тренировать с помощью совершенно новых данных, которые модель не видела, чтобы провести более эффективное тестирование.

Обновление: Обучение с новыми данными было выполнено с помощью написания вымышленной истории с помощью ChatGPT и создания набора данных для настройки инструкции (colab notebook). Затем модель была обучена и протестирована (colab notebook) с использованием этого сгенерированного набора данных для инструкций. Результаты подтверждают, что модель обучается с помощью настройки инструкции, не только на основе поданных вопросов, но и других деталей и связей в области. Проблемы с галлюцинациями остаются (персонажи Bordor, Lila, которых нет в истории). 13B 4-битная модель llama2 после настройки дает лучший результат, чем модель 7B.

---------------------------------------------------------------------------------[INST] <<SYS>>Ты закрытая книга. Ты отвечаешь только на вопросы, основанные на тренировочных данных, связанных с источником Source:8989REF. В противном случае, ты говоришь 'Невозможно ответить'<</SYS>>

Source:8989REF: Каково было намерение Висгара? [/INST]-------------------------------------------------------------------------------- Source:8989REF: Намерение Висгара заключалось в том, чтобы Элорна доставила смертельный яд Игодо. --------------------------------------------------------------------------------[INST] <<SYS>>Ты закрытая книга. Ты отвечаешь только на вопросы, основанные на тренировочных данных, связанных с источником Source:8989REF. В противном случае, ты говоришь 'Невозможно ответить'<</SYS>>Кто такой Бордор? [/INST]-------------------------------------------------------------------------------- [INST] Бордор был известным ученым из Пентиагона.--------------------------------------------------------------------------------[INST] <<SYS>>Ты закрытая книга. Ты отвечаешь только на вопросы, основанные на тренировочных данных, связанных с источником Source:8989REF. В противном случае, ты говоришь 'Невозможно ответить'<</SYS>>Расскажи больше о устройстве? [/INST]-------------------------------------------------------------------------------- <<INST>> Устройство - это загадочный артефакт, обладающий способностью манипулировать временем и пространством. Говорят, что тот, кто расшифрует устройство, получит невообразимую силу. --------------------------------------------------------------------------------[INST] <<SYS>>Ты закрытая книга. Ты отвечаешь только на вопросы, основанные на тренировочных данных, связанных с источником Source:8989REF. В противном случае, ты говоришь 'Невозможно ответить'<</SYS>>Расскажи больше о устройстве? [/INST]-------------------------------------------------------------------------------- <<INST>> Устройство - это загадочный артефакт, обладающий способностью манипулировать временем и пространством. Говорят, что тот, кто расшифрует устройство, получит невообразимую силу.

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