Обзор моделей, основанных на реальных приложениях

Современные модели больших языков (LLM) продемонстрировали наилучшую производительность для многих задач NLP от классификации текста до генерации текста. Но действительно ли они являются «серебряной пулей» или универсальным решением? Можно ли их применять повсеместно? Команда машинного обучения Толоки постоянно сталкивается с подобными задачами, и пока наш ответ — решительное «Нет». Производительность — не единственный фактор, который следует учитывать при разработке модели для реального варианта использования. И вы, вероятно, не хотите тратить на это весь бюджет вашего отдела.

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

Подходы к классификации текстов

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

Олдскульные модели tf-idf

Модели в этой категории основаны на базовой статистике, такой как количество слов и совпадения. Уменьшенное пространство функций обычно передается одной из классических моделей ML, таких как SVM, MLP или Naive Bayes. Этот метод прост в реализации и не требует каких-либо специальных библиотек или ускорителей — вы можете использовать одно из классических решений, таких как sklearn или NLTK. Причем эти модели легко справляются как с короткими, так и с длинными текстами. Учитывая их относительно небольшой размер, они очень эффективны, когда речь идет об обучении, развертывании и выводах.

Тем не менее, у этого подхода есть несколько недостатков, наиболее важным из которых является производительность. По сравнению с другими подходами модели tf-idf занимают самое низкое место. Кроме того, вам придется провести обширную предварительную обработку ваших текстов (орфографические ошибки, стоп-слова, пунктуация, лемматизация и многое другое). Вам также нужно много данных для создания надежной модели — и ваши данные должны напоминать академические тексты, а не социальные сети, которые могут содержать множество орфографических ошибок, а также сленг.

Первые вложения и предварительные поезда

Вложения слов отлично подходят для классификации текста, поскольку каждое слово (или последовательность символов) представлено числовым вектором, содержащим полезную информацию о контексте, использовании и семантике.

Возьмем, к примеру, Word2Vec, его варианты и реализацию в библиотеке fastText — двоичный файл, который вы можете запускать для достижения желаемого результата. Хотя вам по-прежнему нужен большой набор данных для создания вложений сплошных слов и для обучения головы классификатора, при правильной настройке вы можете значительно сократить свои усилия по предварительной обработке. Как единая многопроцессорная библиотека, она может работать прямо в системной консоли.

В среднем на создание модели fastText размером от 300 МБ до 2 ГБ уходит от 10 минут до часа. Эта модель может обрабатывать тексты любого размера, и вывод выполняется невероятно быстро, учитывая, что основное внимание уделяется построению и обработке встраивания текста с помощью MLP. Доступность предварительно обученных вложений слов для различных языков делает его основой практически для любой задачи классификации текста.

Маленькие трансформеры

В эту категорию входят языковые модели на основе преобразователей, такие как BERT и RoBERTa, которые в настоящее время считаются самыми современными НЛП. Хотя может показаться очевидным, что модель со 110 миллионами параметров является «маленькой», а модель со 175 миллиардами параметров — «большой», отличить малые и большие преобразователи непросто. Тем не менее, есть несколько ключевых преимуществ, которые делают трансформаторы отличным вариантом. А именно, они устойчивы к орфографическим ошибкам и обычно требуют небольшой предварительной обработки по сравнению с другими моделями.

Поскольку вы, вероятно, не будете обучать свой собственный BERT и, скорее всего, будете использовать предварительно обученную модель из библиотеки или хаба (например, Hugging Face), вы можете использовать сравнительно небольшие наборы данных для создания достойных моделей. Если у вас есть общая задача, и ваш домен похож на тот, у которого уже есть настроенная версия, вам может понадобиться всего пара сотен или тысяч образцов, чтобы немного настроить модель и добиться отличных результатов. Размер модели обычно колеблется от 600 МБ до нескольких гигабайт. Также рекомендуется иметь доступ к графическим процессорам, так как обучение может занять некоторое время.

Однако есть и некоторые недостатки, которые следует учитывать. Созданная модель намного медленнее по сравнению с Word2Vec, поэтому, если вам требуется вывод в реальном времени, вам нужно либо использовать устройство с графическим процессором, либо инвестировать в оптимизацию модели (оптимизация графов, ONNX, DeepSpeed ​​и другие). Кроме того, длина текстов, которые может обрабатывать модель, ограничена ее архитектурой и обычно составляет около 512 токенов (~ 380 слов). На практике лучше работает более простой подход, такой как взятие 192 токенов с самого начала.

LLM

Скорее всего, у вас нет своего LLM — они действительно большие! Размер большой загружаемой версии T5 составляет около 40 ГБ. Вам придется каким-то образом развернуть эту модель, и вывод может занять некоторое время. В этом случае вам нужно либо использовать дорогой вычислительный кластер, либо выбрать сервис, который предоставляет API, такой как OpenAI с его моделью GPT-3.

Одним из преимуществ является то, что для настройки LLM требуется мало данных, и вам не нужно беспокоиться о предварительной обработке. В качестве примечания, такие подходы, как нулевой выстрел или несколько выстрелов, плохо работают для задач классификации текста. Вам потребуется выполнить тонкую настройку или p-настройку (оперативную настройку) вашей модели. Работа с API находится на совершенно другом уровне — вам нужно учитывать доступ в Интернет, безопасность данных, соглашения об уровне обслуживания, цены и многое другое. Тем не менее, достижимая производительность является самым большим плюсом.

Выбор по сценарию

Как и следовало ожидать, все эти подходы имеют свои плюсы и минусы. Рассмотрите различные архитектуры, чтобы найти подходящую для конкретной реальной задачи. Мы рекомендуем основывать свое решение на реальных требованиях, предъявляемых к вашей задаче классификации текста.

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

Ваша цель — создать высокоэффективную модель

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

У вас мало данных

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

У вас есть много доступных данных

Начните с fastText и установите базовый уровень. Этого может быть достаточно, если ваши требования к производительности не такие строгие. Если да, займитесь процессом тонкой настройки одного из небольших предварительно обученных трансформаторов. Если API является вариантом и у вас есть выделенный бюджет, вы также можете попробовать настроить LLM.

У вас есть проблемы с конфиденциальностью или безопасностью ваших данных

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

У вас есть общая задача и домен

Возможно, кто-то уже решил задачу за вас, и вы можете применить их решения. Просто найдите подходящие настроенные трансформаторы. LLM, вероятно, тоже будут работать, но мы заметили, что ранее настроенные преобразователи могут превзойти LLM, если набор данных очень мал (пара сотен выборок). Хотя разница минутная.

Ваша задача или данные очень специфичны

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

Ваша модель будет использоваться для онлайн-вывода (менее сотен миллисекунд).

Попробуйте fastText из-за его скорости. Если вас не устраивает качество, вы можете попробовать использовать небольшой трансформатор. Однако вам, скорее всего, придется использовать механизм оптимизации или развернуть модель с доступом к графическому процессору. Есть много способов ускорить вывод с помощью BERT-подобных моделей. LLM обычно не подходят, если они не оптимизированы.

Ваша модель будет использоваться только для пакетной обработки

Выбирайте крупную модель. Хотя на первый взгляд это кажется простым, вам все равно нужно понимать тайминг, чтобы ваши партии не накапливались.

Вы беспокоитесь о масштабируемости

Например, ваша модель будет широко использоваться, и вы ожидаете высокого числа запросов в секунду на ее конечной точке. Вы, вероятно, примените механизм оркестровки, такой как Kubernetes, предполагая, что ваши модули могут быть быстро развернуты и уничтожены, и в этом случае могут быть ограничения на размер модели (а именно, размер образа). Поэтому fastText и небольшие трансформеры — распространенные варианты.

Вам доступен вычислительный кластер с современными GPU

Если да, то вам повезло! Вы можете играть с различными типами преобразователей, даже с большими, но реальный вопрос в том, можете ли вы использовать пул узлов с графическими процессорами для логического вывода? Если да, вы можете выбрать все, что хотите, даже LLM. Если нет, вы, вероятно, обнаружите, что оптимизируете небольшой трансформатор.

У вас нет доступа к современным аппаратным ускорителям

Это неприятно слышать! Начните с базовых подходов и обучите модель fastText. Вы также можете обучить модель трансформатора в этой настройке, но это потребует более глубокого понимания механизмов оптимизации. Другой вариант — перейти от классических библиотек к чему-то более специфичному, например FasterTransformer.

У вас есть много времени, чтобы построить модель

Попробуйте любую архитектуру, разные предварительные тренировки или параметры и выполните «наблюдение за потерями».

У вас почти нет времени на построение модели

В этом случае FastText и LLM, доступные через API, являются хорошими вариантами. Если ваша задача популярна, вы можете настроить соответствующий небольшой преобразователь с набором гиперпараметров по умолчанию. Тем не менее, LLM, доступные через API, обычно являются лучшим выбором.

Как видите, не существует «серебряной пули» или универсального подхода. В качестве ключевого вывода: постарайтесь не рассматривать задачу классификации текста только с точки зрения производительности. Есть и другие факторы, которые стоит учитывать, такие как время вывода и обучения, бюджет, масштабируемость, конфиденциальность, тип данных и так далее.

Свяжитесь с нами

Пожалуйста, не стесняйтесь обращаться к нам через Slack, если у вас есть какие-либо вопросы. Мы здесь, чтобы помочь.