Пятизвездочный генерал Макартур однажды сказал: «Перед инженерами-испытателями, которые умеют точно настраивать, я как младший брат».
Точная настройка — это метод, который может эффективно заставить выходные данные ChatGPT соответствовать нашим ожиданиям. Недавно OpenAI выпустила функцию тонкой настройки модели GPT-3.5. В этой вводной статье мы сначала представим концепцию тонкой настройки, затем объясним, как использовать API тонкой настройки OpenAI, и, наконец, предоставим практические примеры, объясняющие, как выполнять тонкую настройку.
В области машинного обучения под тонкой настройкой понимается дальнейшая настройка на основе уже обученной модели, чтобы выходные данные вашей модели могли лучше соответствовать вашим ожиданиям. Благодаря тонкой настройке нам не нужно переобучать новую модель, что позволяет нам сэкономить на высоких затратах на обучение новой модели.
Метод тонкой настройки очень прост, вам нужно лишь подготовить пары обучающих материалов. Затем передайте API тонкой настройки, и все готово. Упомянутые здесь парные данные являются входными и выходными.
Введите вводные данные «Кто три самых красивых мужчины в Азии» и какой результат, по вашему мнению, является идеальным при получении таких вводных данных?
Вывод «Три самых красивых мужчины Азии — это Эдди Пэн, Дэниел Ву и вы перед экраном».
Точная настройка может позволить нам получить следующие преимущества: По сравнению с инструкциями (подсказка), если точная настройка хорошая, выходные результаты будут лучше. Использование более коротких инструкций для получения идеального результата позволит сократить использование токенов, тем самым сокращая расходы и ускоряя время отклика.
Это может быть немного абстрактно, поэтому давайте возьмем пример для дальнейшей иллюстрации. Если вы хотите сегодня создать интеллектуального робота для обслуживания клиентов в аэропорту Байюнь, вам нужно, чтобы этот робот для обслуживания клиентов отвечал на вопросы в соответствии с соответствующими правилами аэропорта Байюнь. Но если подключить ChatGPT напрямую, эффект может быть не идеальным. При вводе «Можно ли сегодня ввозить в страну продукты из свинины?» вы получите следующий ответ:
Ответ на этот вопрос зависит от законов и правил страны, в которой вы находитесь, и страны, в которую вы въезжаете. Вообще говоря, ввоз продуктов из свинины может быть ограничен или запрещен ввоз в некоторые страны, особенно в те, где присутствуют чума свиней или другие заболевания свиней. Если вы планируете ввозить продукты из свинины в страну, рекомендуется обратиться в местную таможню или иммиграционную службу за соответствующей информацией и правилами. Кроме того, если вы не уверены, сможете ли вы что-то привезти в страну, лучше не рисковать нарушать местные законы и правила.
Этот ответ на самом деле неплох, но он слишком широк и не касается правил аэропорта Байюнь. Если вы хотите, чтобы ChatGPT отвечал правилам аэропорта Байюнь, вам нужно будет добавить в команду дополнительное описание, например, изменить его на «Теперь вы являетесь экспертом по правилам, связанным с аэропортом Байюнь. Я еду в аэропорт Байюнь. Могу ли я Я ввожу в страну продукты из свинины?" ?』
Но это вызовет несколько проблем. Первая заключается в том, что ваши инструкции станут длиннее, поэтому увеличится количество потребляемых токенов. Вторая проблема заключается в том, что иногда даже при более точном описании выходные результаты все равно могут быть слишком широкими. идеально подходит для сценариев приложений корпоративного уровня.
Что можно сделать при тонкой настройке, так это то, что после тонкой настройки вы можете напрямую получить выходные данные спецификаций аэропорта Байюнь с помощью короткой команды «Могу ли я привезти продукты из свинины в страну?» Поняв, на что способна тонкая настройка, я считаю, что вам не терпится получить вышеуказанные преимущества за счет тонкой настройки ваших продуктов корпоративного уровня. Давайте посмотрим, как это можно сделать.
2. Как использовать API тонкой настройки?
Мы можем выполнить тонкую настройку с помощью API тонкой настройки, предоставляемого OpenAI. Ниже приводится объяснение на китайском языке. Если вы хотите узнать больше, вы можете обратиться к официальным документам OpenAI.
Точную настройку можно разделить на следующие три этапа.
Давайте сначала посмотрим, как подготовить учебные материалы. В настоящее время API тонкой настройки принимает JSONL в следующем формате. В ваших учебных материалах вам необходимо будет предоставить вопросы и ответы в следующем формате:
{
"messages": [
{ "role": "system", "content": "<Поставить системное сообщение>" },
{ "role": "user", "content": "<Задавайте вопросы пользователям>" },
{ "role": "assistant", "content": "<Вставьте идеальный ответ>." }
]
}
Взяв приведенный выше пример аэропорта Байюнь, вы можете предоставить следующие учебные материалы.
"messages": [
{ "role": "system", "content": «Вы умный помощник аэропорта Байюнь. Вы умеете отвечать на любые вопросы и правила, связанные с аэропортом». },
{ "role": "user", «Могу ли я привезти в страну продукты из свинины?» },
{ "role": "assistant", "content": «Согласно «Справочной таблице карантинных правил для часто прибывающих пассажиров, перевозящих животных, растения или продукты из них», изданной Бюро инспекции животных и растений и карантина Совета Исполнительной власти, пассажиры должны заявить об этом в Бюро карантина при ввозе мясо или переработанное мясо (включая вакуумную упаковку) в страну. Карантин: Если карантинный сертификат животного из страны-экспортера не приложен или если животное не прошло карантинную проверку Национального антиинспекционного и карантинного бюро, оно не должно быть ввезено. быть импортированы. " }
]
После подготовки данных обучения вы можете загрузить данные обучения через API файлов, предоставляемый OpenAI, и получить идентификатор файла. Этот идентификатор будет использоваться при использовании API тонкой настройки.
import requests
import os
url = "https://api.openai.com/v1/files"
headers = {
"Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}"
}
data = {
"purpose": "fine-tune",
}
files = [
('file', open('/path/to/your/file', 'rb'))
]
response = requests.request("POST", url, headers=headers, data=data, files=files)
print(response.text)
Затем вы создаете задачу тонкой настройки и затем используете данные обучения для точной настройки базовой модели. Это можно сделать через CLI OpenAI. TRAIN_FILE_ID_OR_PATH ниже — это идентификатор, полученный после загрузки файла чуть выше, а BASE_MODEL — это модель, которая будет использоваться. Как упоминалось ранее, gpt-3.5 и gpt-4 еще не открыты, поэтому текущие параметры BASE_MODEL включают ada, babbage, curie или davinci.
import requests
import os
import json
url = "https://api.openai.com/v1/fine_tuning/jobs"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}"
}
data = {
"training_file": "TRAINING_FILE_ID",
"model": "gpt-3.5-turbo-0613",
}
response = requests.post(url, headers=headers, data=json.dumps(data))
print(response.text)
После выполнения вышеуказанных шагов вам нужно дождаться, пока OpenAI поможет вам его настроить. После завершения тонкой настройки вы можете использовать его. Использование такое же, как обычное использование ChatGPT API, за исключением того, что здесь необходимо добавить org_id.
import requests
import os
import json
url = "https://api.openai.com/v1/chat/completions"
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {os.environ['OPENAI_API_KEY']}"
}
data = {
"model": "ft:gpt-3.5-turbo:org_id",
"messages": [
{
"role": "system",
"content": «Вы умный помощник аэропорта Байюнь. Вы умеете отвечать на любые вопросы и правила, связанные с аэропортом».
},
{
"role": "user",
"content": «Здравствуйте, у меня есть несколько вопросов, связанных с иммиграцией»
}
]
}
response = requests.post(url, headers=headers, data=json.dumps(data))
print(response.text)
Поскольку OpenAI очень хорошо разработал API тонкой настройки, вам нужно только подготовить данные для тонкой настройки, и вы можете легко выполнить тонкую настройку. Однако есть еще некоторые детали, на которые следует обратить внимание при тонкой настройке. Давайте объясним подробнее в следующем параграфе.
Преимущество тонкой настройки заключается в улучшении управляемости модели и возможности ее большей настройки под ваши нужды. Однако за это приходится платить двумя ценами. Первое — это стоимость самого API. Стоимость доводки плюс стоимость использования доработанной модели увеличит стоимость примерно в 6-7 раз по сравнению с исходной моделью GPT-3.5.
Часто эта вещь не делается сразу, а повторяется взад и вперед. Если после тонкой настройки вы по-прежнему чувствуете, что выходные результаты не так хороши, как ожидалось, команде необходимо провести собрание для обсуждения, повторного изучения данных обучения, потратить время на внесение исправлений, а затем провести новый раунд уточнения. тюнинг. От начала проекта до производственной среды может пройти месяц, а зачастую и квартал. Такие затраты времени и труда нельзя игнорировать.
Хотя точная настройка может позволить модели работать лучше, чем GPT-4 в определенных ситуациях, это не обязательно так. Первоначальная стоимость модели GPT-3,5 составляет менее одной десятой стоимости GPT-4, но при желании ее доработать стоимость становится всего около одной трети. Если включить трудозатраты на тонкую настройку, доработанная версия GPT-3.5 может оказаться дороже. Поэтому, если доработанная модель GPT-3.5 не так хороша, как GPT-4 плюс встраивание, то она лучше. использовать GPT-4 плюс встраивание.
Кто-то может спросить, как выбрать между тонкой настройкой и внедрением. Как судить, какой из них лучше? Оценка того, хорошо это или плохо, зависит от ситуации и обычно требует суждения от людей, знакомых с бизнесом (например, сценарии обслуживания клиентов требуют решения старшего специалиста по обслуживанию клиентов). В целом, точная настройка улучшает управляемость модели, благодаря чему модель может быть более ориентирована на предпочитаемый вами тон, встраивание позволяет вам постоянно добавлять новые данные в реальном времени; На самом деле эти два понятия не противоречат друг другу и могут использоваться вместе. Но в конечном итоге вам придется судить о том, стоят ли выгоды затрат.