Введение
Я уверен, что большинство из вас слышали о ChatGPT и попробовали бы его, чтобы ответить на ваши вопросы! Вы когда-нибудь задумывались, что происходит под капотом? Он основан на большой языковой модели GPT-3, разработанной Open AI. Эти большие языковые модели, часто называемые LLM, открыли множество возможностей в Обработка естественного языка.
Что такое большие языковые модели?
Модели LLM обучаются на огромных объемах текстовых данных, что позволяет им понимать человеческий язык со смыслом и контекстом. Раньше большинство моделей обучались с использованием контролируемого подхода, когда мы вводили входные функции и соответствующие метки. В отличие от этого, LLM обучаются посредством неконтролируемого обучения, когда им подают огромное количество текстовых данных без каких-либо меток и инструкций. Следовательно, LLM эффективно изучают значение и отношения между словами языка. Их можно использовать для самых разных задач, таких как генерация текста, ответы на вопросы, перевод с одного языка на другой и многое другое.
Вишенкой на торте является то, что эти большие языковые модели могут быть точно настроены в вашем пользовательском наборе данных для задач, специфичных для предметной области. В этой статье я расскажу о необходимости тонкой настройки, о различных доступных LLM, а также покажу пример.
Понимание тонкой настройки LLM
Допустим, вы управляете сообществом поддержки диабета и хотите создать онлайн-горячую линию, чтобы отвечать на вопросы. Предварительно обученный LLM обучается более широко и не сможет дать наилучшие ответы на вопросы, относящиеся к предметной области, и понять медицинские термины и аббревиатуры. Это можно решить тонкой настройкой.
Что мы подразумеваем под тонкой настройкой? Короче говоря, Трансфер
изучение! Большие языковые модели обучаются на огромных наборах данных с использованием больших ресурсов и имеют миллионы параметров. Представления и языковые шаблоны, изученные LLM во время предварительного обучения, переносятся на вашу текущую задачу. С технической точки зрения, мы инициализируем модель с предварительно обученными весами, а затем обучаем ее на наших данных, специфичных для задачи, чтобы получить более оптимизированные для задачи веса для параметров. Вы также можете вносить изменения в архитектуру модели и изменять слои в соответствии с вашими потребностями.
Зачем вам тонкая настройка моделей?
- Экономьте время и ресурсы: Тонкая настройка может помочь вам сократить время обучения и необходимые ресурсы по сравнению с обучением с нуля.
- Сокращенные требования к данным: Если вы хотите обучить модель с нуля, вам потребуются огромные объемы размеченных данных, которые часто недоступны для частных лиц и малого бизнеса. Тонкая настройка может помочь вам добиться хорошей производительности даже при меньшем объеме данных.
- Настройте в соответствии с вашими потребностями: Предварительно обученный LLM может не улавливать терминологию и аббревиатуры, относящиеся к вашей предметной области. Например, обычный LLM не распознает, что «Тип 1» и «Тип 2» означают типы диабета, тогда как точно настроенный может.
- Включите непрерывное обучение: Допустим, мы точно настроили нашу модель на информационных данных о диабете и развернули ее. Что делать, если есть новый план диеты или лечения, которые вы хотите включить? Вы можете использовать веса вашей ранее точно настроенной модели и настроить ее, чтобы включить новые данные. Это может помочь организациям эффективно обновлять свои модели.
Выбор модели LLM с открытым исходным кодом
Следующим шагом будет выбор большой языковой модели для вашей задачи. Каковы ваши варианты? Современные модели больших языков, доступные в настоящее время, включают GPT-3, Bloom, BERT, T5 и XLNet. Среди них GPT-3 (Generative Pretrained Transformers) показал наилучшую производительность, поскольку он обучен на 175 миллиардах параметров и может выполнять различные задачи NLU. Но к тонкой настройке GPT-3 можно получить доступ только через платную подписку, и она относительно дороже, чем другие варианты.
С другой стороны, BERT — это модель большого языка с открытым исходным кодом, и ее можно бесплатно настроить. БЕРТ расшифровывается как Bi-directional Encoder Decoder Transformers. BERT отлично справляется с пониманием контекстуальных представлений слов.
Как вы выбираете?
Если ваша задача больше ориентирована на генерацию текста, лучшим выбором будут модели GPT-3 (платная) или GPT-2 (с открытым исходным кодом). Если ваша задача подпадает под классификацию текста, ответы на вопросы или распознавание сущностей, вы можете использовать BERT. В моем случае ответа на вопрос о диабете я бы использовал модель BERT.
Подготовка и предварительная обработка вашего набора данных
Это самый важный этап тонкой настройки, поскольку формат данных зависит от модели и задачи. Для этого случая я создал образец текстового документа с информацией о диабете, который я получил в Национальном институте здравоохранения. веб-сайт. Вы можете использовать свои данные.
Для тонкой настройки BERT задачи «Вопрос-ответ» рекомендуется преобразовать ваши данные в формат SQuAD. SQuAD — это Стэнфордский набор данных для ответов на вопросы, и этот формат широко используется для обучения моделей НЛП задачам ответов на вопросы. Данные должны быть в формате JSON, где каждое поле состоит из:
context
: Предложение или абзац с текстом, на основе которого модель будет искать ответ на вопрос.question
: запрос, на который должен ответить BERT. Вам нужно будет сформулировать эти вопросы на основе того, как конечный пользователь будет взаимодействовать с моделью обеспечения качества.answers
: Вам необходимо указать желаемый ответ в этом поле. Под этим есть два подкомпонента,text
иanswer_start
,text
будет иметь строку ответа. Тогда как,answer_start
обозначает индекс, с которого начинается ответ в абзаце контекста.
Как вы понимаете, создание этих данных для вашего документа заняло бы много времени, если бы вы делали это вручную. Не волнуйтесь, я покажу вам, как легко это сделать с помощью инструмента аннотации Haystack.
Как создать данные в формате SQuAD с помощью Haystack?
Используя инструмент аннотирования Haystack, вы можете быстро создать помеченный набор данных для задач с ответами на вопросы. Вы можете получить доступ к инструменту, создав учетную запись на их сайте. Создайте новый проект и загрузите документ. Вы можете просмотреть его на вкладке «Документы», перейти в «Действия» и увидеть возможность создавать свои вопросы. Вы можете написать свой вопрос и выделить ответ в документе, Haystack автоматически найдет его начальный индекс. Я показал, как я это сделал в своем документе, на изображении ниже.
Рис. 1: Создание помеченного набора данных для вопросов-ответов с помощью Haystack
Когда вы закончите создание достаточного количества пар «Вопрос-ответ» для точной настройки, вы сможете увидеть сводку по ним, как показано ниже. На вкладке «Экспорт ярлыков» вы можете найти несколько вариантов формата, в который вы хотите экспортировать. Мы выбираем формат отряда для нашего случая. Если вам нужна дополнительная помощь в использовании инструмента, вы можете проверить их документации. Теперь у нас есть файл JSON, содержащий пары QA для тонкой настройки.
Как настроить?
Python предлагает множество пакетов с открытым исходным кодом, которые вы можете использовать для тонкой настройки. Я использовал пакет Pytorch и Transformers для своего случая. Начните с импорта модулей пакета с помощью менеджера пакетов pip. transformers
библиотека предоставляет BERTTokenizer
, который специально предназначен для токенизации входных данных для модели BERT.
!pip install torch
!pip install transformers import json
import torch
from transformers import BertTokenizer, BertForQuestionAnswering
from torch.utils.data import DataLoader, Dataset
Определение пользовательского набора данных для загрузки и предварительной обработки
Следующим шагом является загрузка и предварительная обработка данных. Вы можете использовать Dataset
класс от pytorch utils.data
модуль для определения пользовательского класса для вашего набора данных. Я создал собственный класс набора данных diabetes
как вы можете видеть в приведенном ниже фрагменте кода. init
отвечает за инициализацию переменных. file_path
это аргумент, который будет вводить путь к вашему обучающему файлу JSON и будет использоваться для инициализации data
. Мы инициализируем BertTokenizer
также здесь.
Далее мы определяем load_data()
функция. Эта функция будет считывать файл JSON в объект данных JSON и извлекать из него контекст, вопрос, ответы и их индекс. Он добавляет извлеченные поля в список и возвращает его.
Ассоциация getitem
использует токенизатор BERT для кодирования вопроса и контекста во входные тензоры, которые input_ids
и attention_mask
, encode_plus
разметит текст и добавит специальные токены (такие как [CLS] и [SEP]). Обратите внимание, что мы используем squeeze()
метод удаления любых одноэлементных измерений перед вводом в BERT. Наконец, он возвращает обработанные входные тензоры.
class diabetes(Dataset): def __init__(self, file_path): self.data = self.load_data(file_path) self.tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') def load_data(self, file_path): with open(file_path, 'r') as f: data = json.load(f) paragraphs = data['data'][0]['paragraphs'] extracted_data = [] for paragraph in paragraphs: context = paragraph['context'] for qa in paragraph['qas']: question = qa['question'] answer = qa['answers'][0]['text'] start_pos = qa['answers'][0]['answer_start'] extracted_data.append({ 'context': context, 'question': question, 'answer': answer, 'start_pos': start_pos, }) return extracted_data def __len__(self): return len(self.data) def __getitem__(self, index): example = self.data[index] question = example['question'] context = example['context'] answer = example['answer'] inputs = self.tokenizer.encode_plus(question, context, add_special_tokens=True, padding='max_length', max_length=512, truncation=True, return_tensors='pt') input_ids = inputs['input_ids'].squeeze() attention_mask = inputs['attention_mask'].squeeze() start_pos = torch.tensor(example['start_pos']) return input_ids, attention_mask, start_pos, end_pos
Как только вы его определите, вы можете продолжить и создать экземпляр этого класса, передав file_path
аргумент к этому.
file_path = 'diabetes.json'
dataset = diabetes(file_path)
Обучение модели
я буду использовать BertForQuestionAnswering
модели, так как она лучше всего подходит для задач обеспечения качества. Вы можете инициализировать предварительно обученные веса bert-base-uncased
модель, позвонив в from_pretrained
функция на модели. Вы также должны выбрать функцию потери оценки и оптимизатор, который вы будете использовать для обучения.
Ознакомьтесь с нашим практическим руководством по изучению Git с рекомендациями, принятыми в отрасли стандартами и прилагаемой памяткой. Перестаньте гуглить команды Git и на самом деле изучить это!
Я использую оптимизатор Адама и функцию потери перекрестной энтропии. Вы можете использовать класс Pytorch DataLoader
загружать данные разными пакетами, а также перемешивать их, чтобы избежать смещения.
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model = BertForQuestionAnswering.from_pretrained('bert-base-uncased')
model.to(device) optimizer = torch.optim.AdamW(model.parameters(), lr=2e-5)
loss_fn = torch.nn.CrossEntropyLoss()
batch_size = 8
num_epochs = 50 data_loader = DataLoader(dataset, batch_size=batch_size, shuffle=True)
Как только загрузчик данных определен, вы можете продолжить и написать окончательный цикл обучения. Во время каждой итерации каждая партия, полученная из data_loader
содержит batch_size
количество примеров, на которых выполняется прямое и обратное распространение. Код пытается найти наилучший набор весов для параметров, при котором потери будут минимальными.
for epoch in range(num_epochs): model.train() total_loss = 0 for batch in data_loader: input_ids = batch[0].to(device) attention_mask = batch[1].to(device) start_positions = batch[2].to(device) optimizer.zero_grad() outputs = model(input_ids, attention_mask=attention_mask, start_positions=start_positions) loss = outputs.loss loss.backward() optimizer.step() total_loss += loss.item() avg_loss = total_loss / len(data_loader) print(f"Epoch {epoch+1}/{num_epochs} - Average Loss: {avg_loss:.4f}")
На этом ваша тонкая настройка завершена! Вы можете протестировать модель, установив ее в model.eval()
. Вы также можете использовать точную настройку скорости обучения и параметров отсутствия эпох, чтобы получить наилучшие результаты для ваших данных.
Лучшие советы и практика
Вот некоторые моменты, на которые следует обратить внимание при точной настройке любых больших языковых моделей на пользовательских данных:
- Ваш набор данных должен представлять целевую область или задачу, в которой языковая модель должна преуспеть. Чистка и хорошо структурированные данные имеют важное значение.
- Убедитесь, что в ваших данных достаточно обучающих примеров, чтобы модель могла изучить закономерности. В противном случае модель может запомнить примеры и переобучиться, не имея возможности обобщают к невиданным примерам.
- Выберите предварительно обученную модель, которая была обучена на корпусе, соответствующем вашей задаче. Для ответа на вопрос мы выбираем предварительно обученную модель, которая обучена на наборе данных Stanford Question Answering. Аналогично этому, существуют различные модели для таких задач, как анализ тональности, генерация текста, суммирование, классификация текста и многое другое.
- Попытка Накопление градиента если у вас ограниченная память графического процессора. В этом методе вместо обновления весов модели после каждой партии градиенты накапливаются по нескольким мини-пакетам перед выполнением обновления.
- Если вы столкнулись с проблемой переоснащения при тонкой настройке, используйте регуляризация техника. Некоторые часто используемые методы включают добавление выпадающих слоев в архитектуру модели, реализацию снижения веса и нормализацию слоев.
Заключение
Большие языковые модели могут помочь вам автоматизировать многие задачи быстро и эффективно. Точная настройка LLM поможет вам использовать возможности трансферного обучения и адаптировать его к вашей конкретной области. Тонкая настройка может быть необходима, если ваш набор данных относится к таким областям, как медицина, техническая ниша, финансовые наборы данных и т. д.
В этой статье мы использовали BERT, поскольку он имеет открытый исходный код и хорошо подходит для личного использования. Если вы работаете над крупномасштабным проектом, вы можете выбрать более мощные LLM, такие как GPT3, или другие альтернативы с открытым исходным кодом. Помните, что точная настройка больших языковых моделей может потребовать значительных вычислительных ресурсов и времени. Убедитесь, что у вас достаточно вычислительных ресурсов, включая GPU или TPU в зависимости от масштаба.
- SEO-контент и PR-распределение. Получите усиление сегодня.
- PlatoData.Network Вертикальный генеративный ИИ. Расширьте возможности себя. Доступ здесь.
- ПлатонАйСтрим. Интеллект Web3. Расширение знаний. Доступ здесь.
- ПлатонЭСГ. Автомобили / электромобили, Углерод, чистые технологии, Энергия, Окружающая среда, Солнечная, Управление отходами. Доступ здесь.
- Смещения блоков. Модернизация права собственности на экологические компенсации. Доступ здесь.
- Источник: https://stackabuse.com/guide-to-fine-tuning-open-source-llms-on-custom-data/
- :имеет
- :является
- :нет
- :куда
- $UP
- 1
- 12
- 20
- 8
- a
- в состоянии
- О нас
- доступ
- Доступ
- Учетная запись
- накопленный
- Достигать
- действия
- на самом деле
- Адам
- добавить
- Добавляет
- принял
- После
- впереди
- AI
- причислены
- альтернативы
- am
- среди
- количество
- суммы
- an
- анализ
- и
- Другой
- ответ
- ответы
- любой
- подхода
- архитектура
- МЫ
- аргумент
- гайд
- AS
- At
- попытки
- автоматизировать
- автоматически
- доступен
- в среднем
- избежать
- основанный
- BE
- было
- до
- ниже
- ЛУЧШЕЕ
- Лучшая
- между
- смещение
- миллиард
- Цвести
- граница
- бизнес
- но
- by
- вызова
- CAN
- Пропускная способность
- случаев
- Привлекайте
- изменения
- ChatGPT
- проверка
- выбор
- Выберите
- класс
- классификация
- код
- обычно
- сообщество
- зАВЕРШАЕТ
- заключение
- состоит
- содержит
- контекст
- контекстной
- преобразование
- соответствующий
- Создайте
- создали
- Создающий
- Пересекать
- решающее значение
- Текущий
- В настоящее время
- изготовленный на заказ
- настроить
- данным
- Наборы данных
- определенный
- развернуть
- желанный
- развитый
- устройство
- Диабет
- DID
- Диета
- различный
- размеры
- Разное
- do
- документ
- Документация
- приносит
- домен
- доменов
- Дон
- сделанный
- в течение
- каждый
- легко
- эффективный
- эффективно
- еще
- позволяет
- конец
- достаточно
- обеспечивать
- организация
- эпоха
- эпохи
- существенный
- оценка
- Даже
- НИКОГДА
- пример
- Примеры
- Excel
- отлично
- дорогим
- экспорт
- извлечение
- Face
- Водопад
- Особенности
- ФРС
- поле
- Поля
- Файл
- окончательный
- в заключение
- финансовый
- Найдите
- Фокус
- Что касается
- формат
- вперед
- КАДР
- Бесплатно
- от
- функция
- в общем
- поколение
- генеративный
- идти
- Go
- хорошо
- GPU / ГРАФИЧЕСКИЙ ПРОЦЕССОР
- Графические процессоры
- градиенты
- инструкция
- рука
- обрабатывать
- практический
- происходит
- Есть
- Медицина
- услышанный
- тяжелый
- помощь
- следовательно
- здесь
- Выделите
- капот
- зависать
- Как
- How To
- HTTPS
- огромный
- человек
- Humongous
- i
- if
- изображение
- картина
- Осуществляющий
- импортирующий
- in
- включают
- включены
- В том числе
- индекс
- лиц
- информация
- вход
- затраты
- устанавливать
- пример
- инструкции
- взаимодействовать
- в
- Введение
- IT
- итерация
- работа
- JSON
- Сохранить
- Этикетки
- язык
- большой
- крупномасштабный
- слой
- слоев
- УЧИТЬСЯ
- узнали
- изучение
- позволять
- Кредитное плечо
- LG
- Библиотека
- такое как
- Ограниченный
- Список
- ll
- LLM
- загрузка
- загрузчик
- погрузка
- от
- серия
- сделать
- менеджер
- способ
- вручную
- многих
- массивный
- Май..
- значить
- смысл
- основным медицинским
- Память
- метод
- методы
- может быть
- миллионы
- минимальный
- модель
- Модели
- изменять
- Модули
- Модули
- БОЛЕЕ
- самых
- много
- с разными
- my
- национальный
- Необходимость
- необходимый
- потребности
- Новые
- следующий
- NIH
- НЛП
- нет
- "обычные"
- сейчас
- номер
- объект
- получать
- полученный
- of
- Предложения
- .
- on
- ONE
- онлайн
- только
- открытый
- с открытым исходным кодом
- Опция
- Опции
- or
- организации
- Другое
- наши
- внешний
- за
- собственный
- пакет
- пакеты
- выплачен
- пар
- параметры
- особый
- Прохождение
- путь
- паттеранами
- для
- производительность
- выполнены
- выполнения
- личного
- план
- Платон
- Платон Интеллектуальные данные
- ПлатонДанные
- пунктов
- возможности,
- мощностью
- Питание
- мощный
- практическое
- предварительно
- Проблема
- Обработанный
- Проект
- обеспечивать
- приводит
- pytorch
- Вопросы и ответы
- вопрос
- Вопросы
- САЙТ
- быстро
- Обменный курс
- скорее
- достигать
- Читать
- признание
- признавать
- Управление по борьбе с наркотиками (DEA)
- уменьшить
- назвало
- Отношения
- относительно
- соответствующие
- помнить
- удаление
- представлять
- Требования
- Полезные ресурсы
- ответственный
- Итоги
- Возвращает
- кольцо
- Run
- s
- сообщили
- Шкала
- поцарапать
- Поиск
- посмотреть
- SELF
- предложение
- настроение
- набор
- установка
- Shadow
- лист
- должен
- показывать
- показанный
- перемешивание
- означать
- аналогичный
- небольшой
- малого бизнеса
- меньше
- некоторые
- Источник
- особый
- конкретный
- конкретно
- Стекабьюс
- стандартов
- стоит
- Стэнфорд
- Начало
- Начало
- современное состояние
- Шаг
- Stop
- строка
- подписка
- такие
- достаточный
- РЕЗЮМЕ
- поддержка
- Убедитесь
- взять
- Говорить
- цель
- Сложность задачи
- задачи
- Технический
- терминология
- terms
- тестXNUMX
- Классификация текста
- чем
- который
- Ассоциация
- их
- Их
- тогда
- Там.
- Эти
- они
- этой
- Через
- время
- кропотливый
- Советы
- в
- токенизировать
- tokenizing
- Лексемы
- инструментом
- топ
- факел
- к
- Train
- специалистов
- Обучение
- перевод
- переданы
- трансформеры
- переход
- Переводы
- лечение
- пыталась
- два
- напишите
- Типы
- под
- понимать
- понимание
- В отличие от
- новейший
- Обновление ПО
- обновление
- использование
- используемый
- Информация о пользователе
- использования
- через
- разнообразие
- Вид
- хотеть
- we
- вес
- ЧТО Ж
- были
- Что
- в то время как
- , которые
- в то время как
- широкий
- широко
- будете
- без
- Word
- слова
- работает
- работает
- беспокоиться
- бы
- Wouldn
- записывать
- Ты
- ВАШЕ
- зефирнет