написано Рафаэлем Сильвой.

Абстрактный

Вы когда-нибудь слышали о задачах двоичной классификации? Бинарная классификация - это задача искусственного интеллекта, в которой алгоритм должен определить, принадлежит ли что-либо к данному классу или нет. Типичная проблема бинарной классификации включает решения «да» или «нет» (делать или нет). См. Несколько примеров: (i) медицинское обследование, чтобы определить, есть ли у пациента определенное заболевание или нет; (ii) определить, является ли электронное письмо спамом; или (iii) классифицировать эмоциональную полярность текста как положительную или отрицательную.

В этой статье мы представляем наше решение (фреймворк) для работы с множеством проблем двоичной классификации с высокой точностью и предоставляем API (интерфейс прикладного программирования) для его использования. Большинство услуг, предлагаемых Sinch, связаны с текстами и сообщениями, например WhatsApp, SMS (служба коротких сообщений) и другие. Таким образом, наш фреймворк был разработан для работы с проблемами классификации текстов. Однако эта структура может быть расширена для решения любой задачи двоичной классификации, если этапы моделирования и кодирования адаптированы.

Как уже упоминалось, мы предлагаем услуги по обмену сообщениями. Таким образом, мы обрабатываем множество сообщений из разных каналов, и нам нужно было создать единое решение для решения множества различных проблем из разных каналов. Мы решили предоставить внутренний API, который будет использоваться нашими службами. Мы использовали структуру двоичного классификатора текста для: (1) обнаружения автоматического ответа на сообщение, например: «Привет, я скоро вернусь»; (2) фильтровать сообщения вне области действия, например, спам-сообщения или сообщения из других контекстов; (3) определить, недоволен ли пользователь, то есть бот не помогает пользователю (чтобы система могла переключить службу на человека, процесс, называемый разгрузкой), и другие случаи.

Решение

Хорошо, но как это работает? Это называется фреймворком, потому что это программная абстракция, которая обеспечивает общие функции; поэтому его можно использовать для решения разнообразных задач классификации двоичного текста без серьезных модификаций. Наша структура разделена на две основные процедуры: (i) машинное обучение; и (ii) сам API; давайте подробно рассмотрим каждый из этих шагов.

Учтите, что у нас есть проблема классификации двоичного текста, например, обнаружение спама. Во-первых, мы должны разработать алгоритм машинного обучения, который предскажет, является ли электронное письмо спамом. Первая процедура отвечает за разработку этого алгоритма, выполняя серию шагов: (i) сбор и предварительная обработка данных (удаление дубликатов, нулевые значения и передискретизация второстепенных классов); (ii) изучать особенности (извлекать слова, символы и n-граммы для разработки усовершенствованной модели набора слов); (iii) обучить оценщик, то есть алгоритм машинного обучения (мы использовали нейронную сеть с более чем тремя миллионами параметров); (iv) оценить алгоритм с использованием тестового набора данных (обычно тест представляет 20% от всех данных); наконец, (v) сохранить модель (создать дампы модели). Теперь у нас есть обученный оценщик для обнаружения спам-писем. Обратите внимание, что этот подход также может быть реализован для других задач классификации двоичного текста.

Мы просто переходим к следующей процедуре после нахождения хорошей модели и достижения хороших результатов. Посмотрите результаты оценки f1 для некоторых наших двоичных проблем: (1) при автоматическом обнаружении сообщений мы достигли 99,7%; (2) в сообщениях вне области фильтрации мы также получили 99,7%; и (3) в обнаружении недовольства пользователя, самой сложной проблемы, мы получили 76,8%. Как видите, этот фреймворк показывает высокую производительность в наших случаях и дает многообещающие результаты.

Вторая процедура отвечает за предоставление обученной модели через API. API поддерживает список всех обученных моделей и их файлов (дампов) и предоставляет их, используя уникальный идентификатор (ID) для каждой модели. Таким образом, наши службы могут использовать эти модели, вызывая этот API и сообщая уникальный идентификатор классификатора. Таким образом, этот API создается с помощью следующих шагов: (i) добавление сохраненных моделей в список уникальных идентификаторов; (ii) создать контейнер Docker со всеми файлами моделей; и (iii) развернуть контейнер в облаке, мы используем Google Cloud Platform (GCP); Таким образом, у нас есть один API, который можно использовать для использования нескольких классификаторов. В наших тестах каждое сообщение обрабатывается примерно за 0,1 секунды. Кроме того, API не зависит от продукта, что означает, что один и тот же классификатор может использоваться во многих продуктах.

Обсуждение

Мы представили нашу структуру для работы с любой проблемой классификации двоичного текста. Как уже говорилось, структура является общей и содержит некоторые шаги и параметры для обучения различных типов моделей. В некоторых случаях мы достигаем более 99% показателя f1. Кроме того, модель развернута в API, который может обрабатывать каждое сообщение за ~ 0,1 секунды. Если хотите, свяжитесь с нами, чтобы узнать об этом подробнее.

Будущая работа. Наши классификаторы понимают португальский только потому, что они обучаются с использованием набора слов, а используемые нами наборы данных написаны на этом языке. Поэтому, чтобы включить классификаторы для всех клиентов Sinch - во многие языки мы включаем встраивание предложений (функций), не зависящих от языка, которые могут понимать более 100 языков. Следуйте за нами, чтобы узнать больше в нашем следующем посте.

Если вы хотите с нами работать или узнать больше, свяжитесь со мной: