План решения одной из самых распространенных проблем ИИ

Проблема несбалансированного распределения классов широко распространена в области науки о данных, и инженеры машинного обучения часто с ней сталкиваются. Я разработчик чат-бота в IMImoble Pvt Ltd и недавно столкнулся с этим сценарием во время обучения модулю классификации намерений. Любой действующий бизнес-чат-бот, доступный для реальных пользователей, обязательно привлечет значительное количество запросов, выходящих за рамки диапазона, а также сообщений, относящихся к задаче, для выполнения которой он предназначен. Даже среди релевантных сообщений, ориентированных на конкретные задачи, следует ожидать дисбаланса, поскольку все темы, затронутые ботом, не могут быть одинаково популярны. Например, в случае банковского использования запросов о балансе будет больше, чем заявок на жилищный кредит.

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

Почему точность не соответствует действительности в случае несбалансированного набора данных

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

Рассмотрим следующий случай: у вас есть два класса - A и B. Класс A составляет 95% вашего набора данных, а класс B - остальные 5%. Вы можете достичь точности 95%, просто каждый раз прогнозируя класс A, но это дает бесполезный классификатор для вашего предполагаемого варианта использования. Вместо этого правильно откалиброванный метод может обеспечить более низкую точность, но будет иметь значительно более высокий уровень истинных положительных результатов (или отзыв), что на самом деле является метрикой, для которой вы должны были оптимизировать.

Эта статья объясняет несколько методов обработки несбалансированного набора данных, но большинство из них не работают с текстовыми данными. В этой статье я делюсь всеми приемами и приемами, которые я использовал, чтобы сбалансировать свой набор данных вместе с кодом, который повысил показатель f1 на 30%.

Стратегии обработки несбалансированных наборов данных:

Можете ли вы собрать больше данных?

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

Удаление избыточности данных:

  1. Удаление повторяющихся данных - набор данных, с которым я имел дело, содержал много похожих и даже повторяющихся точек данных. «Где мой заказ» и «Где заказ» имеют одно и то же смысловое значение. Удаление такого повторяющегося сообщения поможет вам уменьшить размер вашего класса большинства.
  2. Было много сообщений, которые имели одинаковое семантическое значение, например, рассмотрим следующие сообщения, которые передают такое же значение. Сохранение одного или двух таких высказываний и удаление других также помогает сбалансировать классы. Что ж, вы можете использовать эти сообщения в наборе для проверки. Есть много способов найти сходство текста, но я использовал подобие Жаккара, потому что его очень легко реализовать, и он учитывает только уникальные наборы слов при вычислении сходства. Другие техники вы можете посмотреть в этой статье.

Могу ли я изменить время доставки своей доставки?

Могу ли я изменить время доставки?

Могу ли я изменить время доставки?

3. Объединение классов меньшинств - Иногда несколько классов имеют перекрывающиеся функции. Лучше объединить эти несколько классов меньшинств. Этот трюк помог мне улучшить результат f1 более чем на 10%.

Повторная выборка набора данных для обучения:

Самый простой способ исправить несбалансированный набор данных - просто уравновесить их путем передискретизации экземпляров класса меньшинства или экземпляров недостаточной выборки класса большинства. Использование передовых методов, таких как SMOTE (техника передискретизации синтетического меньшинства), поможет вам создать новые синтетические экземпляры из класса меньшинства.

  1. Недостаточная выборка - попытка случайным образом исключить точку данных из большинства классов до тех пор, пока классы не будут сбалансированы. Существует вероятность потери информации, которая может привести к плохому обучению модели.
  2. Передискретизация - это процесс случайного копирования экземпляров класса меньшинства. Такой подход может привести к неточным прогнозам на основе тестовых данных.
  3. SMOTE - SMOTE генерирует синтетические выборки, беря каждую выборку класса меньшинства и вводя синтетические примеры вдоль отрезков линии, соединяющих любые / все k ближайших соседей класса меньшинства, как показано в GIF ниже. Что еще более важно, этот подход фактически заставляет область принятия решений класса меньшинства стать более общей. Ознакомьтесь с этой статьей, чтобы получить простое объяснение. К сожалению, этот метод не работает с текстовыми данными, потому что числовые векторы, создаваемые из текста, очень многомерны.

Если сложно собрать больше данных и описанные выше уловки не дают многообещающих результатов, то это последнее средство.

Увеличение данных:

Увеличение данных - это метод, обычно используемый в компьютерном зрении. В наборе данных изображений он включает в себя создание новых изображений путем преобразования (поворота, перевода, масштабирования, добавления шума) изображений в наборе данных. Для текста увеличение данных может быть выполнено путем токенизации документа в предложение, перетасовки и повторного соединения их для создания новых текстов или замены прилагательных, глаголов и т. Д. Их синонимом для создания другого текста с тем же значением. Любое предварительно обученное встраивание слов или сеть слов NLTK можно использовать для поиска синонима слова.

Одна из интересных идей, используемых в конкурсе Kaggle, - преобразование английского текста в любой произвольный язык и обратное преобразование в английский с помощью нейронного машинного перевода. Этот трюк помог мне улучшить результат f1 на 17%. Проверьте это репозиторий GitHub, чтобы найти код для увеличения данных с использованием языкового перевода, пространственности, spacy_wordnet и встраивания слов.

Вывод:

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

Вы хотите больше? Следуйте за мной в Medium, LinkedIn и GitHub.