Введение


Получение качественных данных — краеугольный камень любого проекта машинного обучения. Этот процесс, в котором традиционно доминирует трудозатратная разметка данных, часто может превращаться в длительную и дорогостоящую задачу. Но что, если мы сможем воспользоваться прогрессом в развитии больших языковых моделей (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

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


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


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

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


Добавление новой модели 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

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


Проверка прогнозов от 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!

Понравилась статья? Еще больше контента на темы разметки, Data Mining и ML вы можете найти в нашем Telegram канале “Где данные, Лебовски?”


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

Обо всем этом читайте в “Где данные, Лебовски?”

Комментарии (1)


  1. temadiary
    20.05.2024 07:09

    и насколько качественно автоматизированный варик с разметкой работает? в цифрах хотелось бы.
    кажется что после него верифицировать итоговый вариант