Как настроить модель…

Маленькие модели

Представьте себе ребенка, увлеченного увлекательной игрой-головоломкой, основанной на сопоставлении фигур. Цель этой игры состоит в том, чтобы стратегически расположить различные геометрические объекты внутри куба. Предоставление подсказки было бы «классическим программным подходом», лучшим подходом было бы позволить ей/ему методом проб и ошибок без какой-либо помощи, «это машинное обучение». Задача — это выученная связь между двумя нейронами. Это соединение, называемое синапсом, позволяет нейронам общаться друг с другом и выполнять сложные задачи. ОИИ заключается в том, чтобы выполнять как можно больше задач. вам не нужен Альберт Эйнштейн (огромные LLM, такие как GPT или Bard), чтобы сделать это, это очень дорого и обобщенно.

А что, если мы возьмем небольшую модель и настроим ее с помощью нескольких образцов и получим аналогичную производительность?

В следующем упражнении я покажу вам, как это сделать с помощью «основных моделей Google», но перед этим нам нужно поговорить о том, что такое LLM и об основах подсказок.

LLM (большая языковая модель)

Большая языковая модель (LLM) — это тип алгоритма искусственного интеллекта (ИИ), который использует методы глубокого обучения и большие наборы данных для понимания, обобщать, создавать и предсказывать новый контент. (Спросите Google Барда).

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

В Естественном языке есть 3 области: текст|Язык, речь (аудио) и зрение (изображение), большая языковая модель — это математический алгоритм, готовый к использованию. что-то в одной из этих областей.

То, как вы взаимодействуете с этими LLM, — это задавать вопросы и давать инструкции, созданный ввод — это то, что мы называем подсказкой:

Нулевой выстрел, несколько выстрелов и настройка

Пример 1:

подсказка:

context: dear llm tell me if the following tweet is a [complaint, no complaint]
text: @mckelldogs This might just be me, but - eyedrops? 
Artificial tears are so useful when youre sleep-deprived
response:

Ответ должен быть «нет жалоб», попробуйте сделать это с помощью любого графического интерфейса с генеративным ИИ:

Я использую Generative AI studio на Google Vertex

Научить модель тому, как нам нужен ответ, является частью «быстрой разработки», для этого есть такие методы, как:

zero-shot (по классификации): это обычный вызов, в котором входные данные имеют структуру того, что мы ожидали, без явного указания результата:

Поручите модели выполнить классификацию на основе настроений, поскольку приведенный выше пример – нулевой выстрел.

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

Пример 2:

было доказано, что изучение нескольких выстрелов повышает точность прогноза.

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

Есть много способов сделать это, от самого «дорогого» до медленного способа, называемого «точной настройкой», который представляет собой подход к передаче обучение и включает в себя изменение всех весов предварительно обученной модели (помните, что нейронные сети — это матричное умножение данных и «весов»).

Это — отличный пост о нейронных сетях.

С помощью менее затратного метода быстрого проектирования (ничего не делать с весами) и эффективной настройки параметров, например «быстрой настройки», которая представляет собой еще один способ обучения подсказкам путем замораживания предварительно обученные веса модели и добавить адаптер только для сохранения изменений.

Задание модели настройки обрабатывается чем-то, что называется шаблоны конвейера, основано на kfp v2, и это управляемый сервис, который вы можете использовать для создания собственных конвейеров с вашими собственными компонентами (удивительно!). Сад моделей, представляющий собой специальный центр, где вы можете использовать модели с открытым исходным кодом и сторонние большие языковые модели для тонкой настройки, быстрой настройки и т. д. использует одну и ту же технологию!

Здесь более подробная информация об этом.

Руки вовремя!

Теперь давайте проверим то, что мы уже узнали:

Вы можете получить доступ к облачной платформе Google, взяв 300 долларов за пробную версию, консоль здесь.

Перейти к Vertex AI › Generative AI Studio › Обзор › Язык (открытый) › + ТЕКСТОВАЯ ПОДСКАЗКА

И протестируйте примеры с нулевым выстрелом и несколько выстрелов, как показано на снимках экрана выше…

После игры с подсказками пришло время настройки адаптера, мы будем использовать набор данных твитов из библиотеки pypi.

Набор данных должен быть отформатирован следующим образом:

jsonl -> строки json, это представление разных строк json в файл, примерно так:

{"input_text", "hello!"}
{"input_text", "hi!"}
# Format expected by Google
{"input_text": "[YOUR INSTRUCTIONS]", "output_text": "[ANSWER EXPECTED]"}

легко нет?, на всякий случай приведу пример:

{"input_text": "Classify the following text into one of the following classes:\n
['Unlabeled', 'complaint', 'no complaint']\n
Text:@EE On Rosneath Arial having good upload and download speeds but terrible latency 200ms. Why is this.", 
"output_text": "complaint"}

Подробнее о необходимом формате.

Набор данных представляет собой словарь с метками [0,1,2], эквивалентными ["Unlabaled", "жалоба", "нет жалоб"], новое поле метки "text_label" создается с помощью метода карты, и каждая строка сохраняется в файл tweet_dataset.jsonl:

#%%
import json
from datasets import load_dataset
#%%
dataset_name = "twitter_complaints"
dataset = load_dataset("ought/raft", dataset_name)

classes = [k.replace("_", " ") for k in dataset["train"].features["Label"].names]
print(classes)
dataset = dataset.map(
    lambda x: {"text_label": [classes[label] for label in x["Label"]]},
    batched=True,
    num_proc=1,
)
print(dataset)
dataset["train"][0]
# %%

with open("tweet_dataset.jsonl", "w") as f:
    for i in dataset["train"]:
        line={"input_text": f'Classify the following text into one of the following classes: \n{classes} \nText:{i["Tweet text"]}', "output_text": i["text_label"]}
        f.write(json.dumps(line)+"\n")

Теперь вы можете либо загрузить файл (tweet_dataset.jsonl) и протестировать API, либо загрузить файл в корзину облачного хранилища Google с помощью графического интерфейса, консоли или языка программирования:

Создайте сегмент:

# From ipykernel/jupyter notebook:
!gsutil mb -p [YOUR PROJECT] gs://[YOUR BUCKET NAME]

# From terminal:
gsutil mb -p [YOUR PROJECT] gs://[YOUR BUCKET NAME]

Загрузите файл в корзину:

# Remember to change the bucket name for yours

gsutil cp dataset.jsonl gs://vtxdemos-datasets-public/ga/tweet_sent.jsonl

or

# Programatic way | Python

# %%
## Uploading to GCS

dataset_uri = "gs://vtxdemos-datasets-public/ga/tweet_sent.jsonl"
client = storage.Client()
client.bucket(dataset_uri.split("/")[2]).blob("/".join(dataset_uri.split("/")[3:])).upload_from_filename("dataset.jsonl")

Опять же, мы можем использовать графический интерфейс или язык программирования, такой как Python, для настройки модели:

vertexai.init(project="vtxdemos")

model = TextGenerationModel.from_pretrained("text-bison@001")
model.tune_model(
    training_data=dataset_uri,
    # Optional:
    train_steps=10,
    tuning_job_location="europe-west4",  # Only supported in europe-west4 for Public Preview
    tuned_model_location="us-central1",
    model_display_name="tweet_sent_py"
)
print(model._job.status)

Создается новый конвейер, и время работы будет зависеть от количества шагов и размера данных (для 10 шагов потребовалось около 6 минут, для 100 — час):

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

После завершения работы мы можем просмотреть настроенные модели и вызвать метод прогнозирования:

tuned_model_names = TextGenerationModel.from_pretrained("text-bison@001").list_tuned_model_names()
print(tuned_model_names)
# %%

model = TextGenerationModel.get_tuned_model(tuned_model_names[0])
parameters = {
    "temperature": 0.2,
    "max_output_tokens": 256,
    "top_p": 0.8,
    "top_k": 40
}
model = TextGenerationModel.from_pretrained("text-bison@001")
model = model.get_tuned_model("projects/254356041555/locations/us-central1/models/4393993711244017664")
response = model.predict(
    """Classify the following text into one of the following classes: [\'Unlabeled\', \'complaint\', \'no complaint\'] 
Text:@BurberryService Thanks for sending my Christmas present with the security protection still on it!""",
    **parameters
    )
print(f"Response from Model: {response.text}")

Это окончательный ответ:

Попробуйте графический интерфейс пользователя!

Перейти в Vertex AI › Generative AI Studio › Обзор › Язык (Открытый) › + СОЗДАТЬ НАСТРАИВАЕМУЮ МОДЕЛЬ

Выберите свой набор данных:

Установите переменные настройки и нажмите «Начать настройку»:

После завершения работы мы можем выбрать модель из Generative AI Studio следующим образом:

Вот и все, надеюсь, вам понравилось…

Подписывайтесь на меня"…

Полный код здесь.