Разметка данных в Label Studio при помощи GPT-4: интеграция ML Backend

Разметка данных в Label Studio при помощи GPT-4: интеграция ML Backend

Введение

Получение качественных данных — краеугольный камень любого проекта машинного обучения. Этот процесс, в котором традиционно доминирует трудозатратная разметка данных, часто может превращаться в длительную и дорогостоящую задачу. Но что, если мы сможем воспользоваться прогрессом в развитии больших языковых моделей (LLM) для перехода от разметки данных к проверке разметки?

На сцене появляется GPT-4. Эта система (разработанная на основе GPT-4), имеющая более ста миллионов пользователей — одна из самых популярных языковых моделей.

В предыдущей статье мы показали, как можно ускорить процесс разметки предварительным аннотированием данных при помощи GPT-4. Эта методика позволяет нам загружать готовый к проверке предварительно размеченный датасет, а не выполнять монотонный процесс, начиная с нуля. В этой статье мы продолжим развивать эту тему, оказав, как можно объединить GPT-4 с бэкендом машинного обучения (ML Backend) Label Studio.

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

Label Studio ML Backend

Label Studio ML Backend служит мостом между моделями машинного обучения и интерфейсом Label Studio. Он позволяет интегрировать в Label Studio любую модель, при условии, что она может возвращать прогнозы в определённом формате и обновлять своё состояние на основании полученных аннотаций. Благодаря такой гибкости он становится идеальным инструментом для внедрения вызовов OpenAI API в рабочий процесс разметки данных.

Подключение ML Backend к GPT-4 — достаточно простая задача. Мы можем обернуть наши вызовы API в класс LabelStudioMLBase, и он будет обрабатывать за нас весь веб-код. Ниже показан пример обёртывания этого класса.

Точная настройка модели тоже может быть мощным способом повышения качества модели; это реализуется предоставлением ей большего объёма данных предметной области. Хотя мы не включили в эту статью тему точной настройки (fine-tuning) по причинам, о которых расскажем ниже, это может быть невероятно полезной функцией, если вы работаете с собственной моделью.

from label_studio_ml.model import LabelStudioMLBase class OpenAIPredictor(LabelStudioMLBase): def __init__(self, **kwargs): super(OpenAIPredictor, self).__init__(**kwargs) # Parsed label config and initialize model def predict(self, tasks, **kwargs): # Predict on tasks passed to the predict function for task in tasks: predictions.append(model.predict(task)) return predictions def fit(self, annotations, workdir=None, **kwargs): # train the model # save output resources train_output = { 'labels': self.labels, 'model_file': model_file } return train_output

OpenAI API

Для взаимодействия с GPT-4 требуется OpenAI API. Этот API упрощает отправку промтов GPT-4 и получение сгенерированного текста ответов. Манипулирование промтами для получения нужных результатов называется промт-инжинирингом. Часто можно настраивать промты так, чтобы модель возвращала данные в JSON или другом формате, который можно потребить и структурировать для Label Studio.

Давайте взглянем на извлечение прогнозов анализа эмоционального настроя (sentiment analysis). В этом примере мы используем OpenAI API и немного промт-инжиниринга для генерации ответа при помощи модели GPT-4.

import openai import re openai.api_key = "<your_api_key>" input_text = "I had a wonderful time at the party last night!" prompt = f"Respond in the json format: {{'response': sentiment_classification}}\nText: {input_text}\nSentiment (positive, neutral, negative):" response = openai.ChatCompletion.create( model="gpt-4", messages=[ {"role": "user", "content": prompt} ], max_tokens=40, n=1, stop=None, temperature=0.5, ) response_text = response.choices[0].message['content'].strip() print("Result\n",f"{response_text}")

Интеграция этого кода в Label Studio ML Backend — относительно простая задача, требующая обёртывания вызова OpenAI API в функцию прогнозирования.

Запуск примера

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

Установка

Для начала мы воспользуемся Docker Compose для развёртывания и подключения серверов, необходимых для этого проекта. Если вы ещё не установили Docker Compose, то его можно найти на веб-сайте Docker. Выполните этапы установки, подходящие для вашей операционной системы.

Ключ OpenAI API

Наше приложение использует для генерации прогнозов модель GPT-4 компании OpenAI. Для применения этого API необходим аккаунт OpenAI. Его можно создать следующим образом:

  1. Зайдите на веб-сайт OpenAI.
  2. Нажмите на Sign Up и введите свои данные для создания аккаунта.
  3. После его создания можно сгенерировать ключ API.

Ключ API — необходимая часть для защиты ваших вызовов API к GPT-4. Храните его в безопасном месте и никогда не раскрывайте в публичных репозиториях и на веб-сайтах.

Конфигурирование Docker Compose

Получив ключ OpenAI API, добавьте его в файл конфигурации Docker Compose. Найдите переменную окружения OPENAI_API_KEY в файле docker-compose.yml и замените your_openai_key своим ключом API.

Запуск сервиса

Завершив конфигурирование, мы сначала запустим Label Studio в соответствии с инструкциями из документации Quick Start in Label Studio.

Затем запустим сервис ML Backend. В терминале перейдите к папке, содержащей файл docker-compose.yml, и выполните следующую команду:

docker-compose up

Docker Compose запустит все необходимые сервисы, указанные в файле docker-compose.yml.

Он запускает бэкенд-сервис машинного обучения по адресу http://localhost:9090. После его запуска можно подключиться к Label Studio по адресу http://localhost:8080. Если всё было настроено правильно, то вы должны увидеть интерфейс пользователя Label Studio.

Новая установка Label Studio
Новая установка Label Studio

Подключение ML Backend к Label Studio

Далее нам нужно подключить сервис ML Backend к Label Studio, но для начала создадим новый проект анализа эмоционального настроя в Label Studio и добавим данные. Эти данные не размечены, но мы воспользуемся GPT-4 для мгновенного добавления меток.

Создание нового проекта
Создание нового проекта

Затем нужно будет указать проекту наш Machine Learning (ML) Backend, выполнив следующие шаги:

Добавление новой модели ML
Добавление новой модели ML
  1. Нажать на Settings в правом верхнем углу.
  2. Прокрутить вниз к Machine Learning.
  3. Нажать на Add Model.
  4. В поле URL ввести адрес ML Backend http://localhost:9090 (при стандартной настройке Docker Compose).
  5. Нажать на Validate and Save.
Конфигурирование сервера в диалоговом окне добавления модели
Конфигурирование сервера в диалоговом окне добавления модели
Модель валидирована и подключена
Модель валидирована и подключена

Мы должны увидеть подтверждение, что успешно подключились к ML Backend и он готов к использованию.

Возврат прогнозов

Теперь мы готовы использовать функцию прогнозов Label Studio, получающую от GPT-4 прогнозы для наших задач. Для создания прогноза необходимо выполнить следующие шаги:

  1. Нажать на Tasks в боковой панели.
  2. Выбрать задачу, для которой необходим прогноз.
  3. Нажать на кнопку Predict наверху задачи.
Получение прогнозов от модели ML
Получение прогнозов от модели ML

Затем отобразятся прогнозы, полученные от GPT-4. Можно приступать напрямую к проверке прогнозов, а не начинать с нуля, размечая всё вручную.

Проверка прогнозов от ML Backend
Проверка прогнозов от ML Backend

Подробности см. в примерах ML Backend; также можно прочитать ML Backend Tutorial, чтобы больше узнать о работе бэкенда и о том, как создавать собственные интеграции.

Выполнение любой классификации текста

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

Classify text into different categories. Start each category prediction in a new line. Text: {text} Categories: {labels}

Можете свободно изменять команды и менять метку {text} в соответствии с вашей структурой данных, включая входные тексты и метаданные. Можно явным образом задать множество меток или использовать заполнители {labels}, соответствующие целевым меткам из вашего проекта Label Studio.

В конце статьи важно отметить, что удобство и возможности использования OpenAI имеют свои изъяны. Понимать их очень важно для принятия осознанных решений о внедрении ИИ в свой рабочий процесс.

Обучение и тонкая настройка

Тонкая настройка (fine-tuning) — это популярная методика машинного обучения, позволяющая подстраивать модели под конкретные требования. Однако это не универсальное решение. В случае с моделями OpenAI мощные версии GPT-3 и GPT-4 пока не поддерживают тонкую настройку, то есть их нельзя подстраивать под конкретные способы применения и необходимо применять предварительно обученные конфигурации.

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

Вопросы безопасности данных

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

Это вопрос не только конфиденциальности, но и контроля над своими данными. Когда вы отправляете свои данные сторонним сервисам, это может привести к потере прямого контроля над этой информацией. В некоторых случаях такой риск может быть неприемлемым. Возможно, на каком-то этапе вам придётся перейти на собственные модели.

Заключение

В этой статье мы узнали, как GPT-4 можно интегрировать с Label Studio ML Backend, чтобы совершить переход от трудозатратного процесса разметки данных к более простому процессу проверки. Использование мощи одной из лучших в мире LLM для предварительного аннотирования данных может позволить вам перейти на новый уровень эффективности.

Также мы рассмотрели некоторые из ограничений такой методики, например, конфиденциальность данных и качество модели, отметив, что она может быть применима не во всех случаях. Но хотя использование GPT не всегда может быть панацеей, мы считаем, что интеграция технологий ИИ наподобие GPT-4 в процесс разметки позволит в будущем раскрыть множество новых перспектив.

Полный пример можно посмотреть на GitHub!

Понравилась статья? Еще больше информации на тему данных, AI, ML, LLM вы можете найти в моем Telegram канале “Роман с данными”

  • Как подготовиться к сбору данных, чтобы не провалиться в процессе?
  • Как работать с синтетическими данными в 2024 году?
  • В чем специфика работы с ML проектами? И какие бенчмарки сравнения LLM есть на российском рынке?

Обо всем этом читайте в “Роман с данными”

Начать дискуссию