LLM и мультимодальность: как нейросети упрощают работу с данными
Разметка данных – долго, дорого и сложно
Разметка данных – это тот этап, который все любят... ненавидеть. Ручная разметка – это тысячи часов монотонной работы, значительные финансовые затраты и неизбежные ошибки.
Давайте посмотрим на цифры.
- Яндекс: асессоры получают около 300–400 рублей в час.
- Google: от $10 до $15 в час.
- Фриланс: на платформах, таких как Profi.ru, – примерно 500 рублей в час.
Представьте, что у вас есть 10 000 изображений для разметки. Даже при оптимистичной оценке в 500 рублей в час и скорости разметки 100 изображений в час, это потребует 100 часов работы и обойдется в 50 000 рублей. А если данных больше? Затраты возрастают пропорционально.
Я столкнулся с этим, когда работал с большим датасетом аптечных товаров. Специалисты тратили недели на разметку, что замедляло весь процесс и увеличивало расходы. Тогда я понял: нужен новый подход.
Прежде чем рассказать, как именно я использовал GPT-4o для авторазметки, давайте разберёмся: что вообще такое LLM?
Что такое LLM и мультимодальность?
LLM (Large Language Model) – это большие языковые модели, которые обучены на огромных объёмах текстовых данных. Они способны не только генерировать текст, но и анализировать информацию, давать ответы на вопросы и даже работать с изображениями.
Современные модели, такие как GPT-4o, обладают мультимодальностью – это значит, что они могут понимать не только текст, но и изображения, аудио и видео. Это открывает новые возможности для автоматизации, в том числе в разметке данных.
Я решил использовать GPT-4o API для авторазметки изображений. Как это работало:
- Кодировал изображения в Base64;
- Отправлял их в GPT-4o API;
- Добавлял промпт: «У меня есть изображение, каждое из которых нужно отнести к одной из следующих категорий: "Животные", "Пейзаж", "Техника". В каждой категории могут быть такие подкатегории, как: Животные: кошки, собаки, птицы. Пейзаж: горы, леса, озера, пляжи. Техника: автомобили, самолеты, компьютеры. Однако если изображение не подходит под эти категории или ты не можешь уверенно отнести его к какой-либо категории, отметь это как "Неопределённо". Пожалуйста, указывай для каждого изображения точную категорию или помечай, что оно не подходит для классификации.»;
- Получал готовую разметку.
Модель спокойно смогла отличить разные виды животных или техники.
Разберём промпт чуть подробнее. Чтобы было меньше ошибок, я выделил целевые классы и класс «Неопределённо». В него попадают все картинки, в которых модель не уверена. Это очень важный шаг! Если не вводить этот класс и строго просить всё распределить, модель начнёт некорректно определять категорию изображения.
В промпте я прошу, чтобы модель указывала нужный класс или «Неопределённо». Если этого не сделать, может произойти следующее: на картинку трактора она напишет, что это трактор, и он не попадет в класс «Техника», а для нас это важно!
В итоге разметка, которая раньше занимала недели, теперь выполнялась за пару дней и почти без затрат на специалистов.
Реальный кейс: 7 000 изображений за $20
Чтобы протестировать авторазметку, я загрузил 7 000 изображений в GPT-4o. Использовал тариф $20 и получил точность около 80%.
Сравним с ручной разметкой.
- Ручной труд:
- 7 000 изображений × 1 минута на разметку = 116 часов работы;стоимость – 58 000 рублей (~$640) при ставке 500 рублей в час.
- GPT-4o:
- разметка заняла несколько часов;стоимость – $20 вместо $640;точность – 80%, что достаточно для первичной фильтрации.
Вывод: даже с небольшой погрешностью нейросети позволяют экономить 95% бюджета и ускорять разметку в десятки раз.
```
@staticmethod
def _encode_image(image_path: Path) -> str:
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
```
Этой функцией я кодировал изображения. Тут ничего сложного не происходит.
- Открываем изображение.
- Кодируем изображение.
Дальше, нужно использовать client OpenAI, для этого предварительно установив библиотеку openai==1.12.0 (у меня такая версия).
```
self.client = OpenAI(api_key="Наш ключ")
```
```
def _process_single_image(self, image_path: Path, prompt_template: str) -> Dict[str, Any]:
base64_image = self._encode_image(image_path)
response = self.client.chat.completions.create(
model=self.config.model,
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": prompt_template},
{
"type": "image_url",
"image_url": {
"url": f"data:image/jpeg;base64,{base64_image}"
}
}
]
}
],
max_tokens=self.config.max_tokens
)
classification = response.choices[0].message.content.strip()
```
Следующей функцией мы всё объединяем:
- кодируем изображения;
- передаём, какую модель будем использовать (gpt-4o);
- помещаем наш промпт и изображение;
- получаем результат классификации.
Советую логировать результат, чтобы на первых итерациях посмотреть, на каких изображениях возникают проблемы и итеративно исправить промпт.
Какой вывод мы можем сделать?
Использование LLM и мультимодальных моделей, таких как GPT-4o, кардинально меняет подход к работе с данными. То, что раньше занимало недели и требовало десятков тысяч рублей, теперь можно автоматизировать за часы и $20 — без потери качества на этапе первичной фильтрации. Быстро, точно и без выгорания.
Что даёт такой подход:
- снижение затрат: вместо сотен тысяч рублей – десятки долларов;
- ускорение процесса: разметка сокращается с недель до часов;
- минимизация ошибок: модель работает по заданным правилам, не устаёт и не теряет концентрацию;
- освобождение ресурсов: специалисты могут заниматься более сложными задачами.
Автоматизация разметки — это мощное преимущество и правильный подход. Всё, как мы любим.