Как использовать методы увеличения данных для улучшения контролируемых моделей НЛП
Обработка естественного языка (NLP) становится все более популярной как в академических кругах, так и в промышленности за последние годы. Потребители ежедневно пользуются преимуществами НЛП в своих телефонах (SwiftKey), личных помощниках (Alexa, Siri), музыкальных плейлистах (Spotify Discover) или механизмах рекомендаций по новостям (Medium). Тогда вполне естественно, что корпорации вскоре последуют их примеру и начнут создавать более надежные приложения НЛП корпоративного уровня в различных системах LegalTech, InsureTech или FinTech. Такое использование НЛП повышает эффективность и избавляет аналитиков от рутинной работы по выполнению бесконечных, бессмысленных повторяющихся задач. Но есть загвоздка.
Многие из этих задач НЛП выполняются неконтролируемым образом и поэтому редко нуждаются в обучающих данных. Однако для некоторых контролируемых классификационных задач, таких как разжигание ненависти и киберзапугивание, требуются образцы помеченного текста, которые может быть труднее получить. Для этих задач нередко возникает классовая неуравновешенность выборок. Например, при попытке определить язык вражды в Интернете существует гораздо больше обычных комментариев, чем оскорбительных. В результате большинство наборов данных для обнаружения языка вражды, вероятно, будет иметь сильный классовый дисбаланс по отношению к этим обычным образцам текста.
В других областях машинного обучения, таких как распознавание изображений или обработка видео, дисбаланс классов обычно устраняется с помощью методов увеличения данных. Увеличение данных корректирует существующие образцы наборов данных, применяя небольшие преобразования ко входным данным, а затем используя эти преобразованные входные данные в качестве дополнительных обучающих данных. Например, распространенной практикой является увеличение данных визуального изображения путем его поворота или отражения, поскольку это не меняет смысла изображения. Другими словами, перевернутое изображение кошки по-прежнему будет распознаваться людьми как кошка. Разумеется, перелистывание предложения не работает таким же образом, поскольку изменение порядка слов в предложении также меняет его семантику. Эта проблема также обсуждалась в предыдущей статье GammaScope.
В этом посте предлагаются три простых и быстрых способа улучшить производительность моделей машинного обучения для НЛП, где дисбаланс классов является проблемой. Для этого нам сначала нужно создать некоторую интуицию о том, как текст может быть представлен как числовой ввод, прежде чем мы покажем, как использовать это представление для увеличения текстовых данных и разработки более надежных систем НЛП. Мы разработаем следующие основные методы:
1. Изменение заполнения слова-вектора и замена синонимов как метод увеличения для коротких текстовых данных.
2. Модели генерации естественного языка (с RNN и цепями Маркова) для генерации новых образцов класса меньшинства.
3. Согласование техник встраивания в многошаговые модели НЛП.
Праймер для встраивания текста
Как и в случае со всеми проблемами машинного обучения, мы должны найти способ численного представления данных, которые служат входными данными для последующих задач (например, логистической регрессии, SVM или моделей глубокого обучения). Для изображений мы можем представить изображение как его высоту x ширину x, глубину цвета на пиксель, тем самым создавая трехмерное представление. Сделать это для текста сложнее, поскольку у нас нет фиксированного представления «глубины», присвоенного каждому слову или символу. Наивным подходом было бы использование лексикона, такого как WordNet, который дает фиксированное определение каждому слову. Затем мы могли бы использовать двоичный закодированный вектор («горячая» кодировка), который принимает истинное или ложное значение для каждого слова в лексиконе и использует конкатенацию этого вектора в качестве входных данных предложения. Проблема с этим подходом заключается в том, что размер этого быстро закодированного вектора становится неуправляемым для больших текстовых корпусов (размер вектора будет расти вместе с размером словарного запаса). Следовательно, нам нужно представление слов или предложений фиксированного размера, чтобы входные данные для последующей задачи оставались управляемыми - даже для больших текстовых корпусов.
Самый популярный метод для этого - Word2Vec, который использует идею зависимости от контекста. Вместо того, чтобы определять фиксированное значение для каждого слова (например, в лексиконе), мы «характеризуем слово по компании, которую оно составляет». Другими словами, каждому выражению в текстовом корпусе назначается вектор фиксированного размера, который представляет его значение относительно других слов в текстовом корпусе. Этого можно добиться, перемещая «окно» над каждым словом в текстовом корпусе. На каждом этапе мы смотрим на текущее «центральное слово» и пытаемся предсказать его контекстные слова. Это сводится к задаче оптимизации, чтобы найти наибольшую вероятность того, что при текущем центральном слове появятся контекстные слова.
В окончательной реализации на каждом временном шаге t данной последовательности слов мы максимизируем вероятность того, что два слова одновременно встречаются в первом журнале уравнения, и берем j отрицательные образцы, чтобы максимизировать вероятность появления настоящего внешнего слова. Мы также минимизируем вероятность того, что случайные слова появятся вокруг центральных слов (полную информацию об этом методе можно найти здесь). На основе этой настройки неглубокая двухслойная нейронная сеть регулирует векторы слов θ, используя стохастический градиентный спуск и обратное распространение для обновления градиента. Когда мы перебираем таким образом большие текстовые блоки, слова с похожими значениями (то есть те, которые появляются в аналогичных контекстах) в конечном итоге имеют аналогичный вектор. При этом обычно изучаются эти векторные представления на большом текстовом корпусе, который может не иметь отношения к обучающей задаче, например, в корпусе новостей Google объемом 3 миллиарда слов, CommonCrawl или корпусе Википедии. После изучения векторов слов мы можем оценить семантическое сходство между двумя словами, посмотрев на косинусное расстояние их векторов.
Используя этот метод, у нас есть способ характеризовать каждое слово в словаре относительно друг друга, что позволяет последующей задаче обучения абстрагироваться от кластеров слов с похожими значениями, как показано выше. Обратите внимание, что в эту простую модель Word2Vec внесен ряд корректировок, таких как Глобальные векторы, FastText или Doc2Vec - все они являются неконтролируемыми обучающими задачами для векторных представлений слов фиксированного размера.
Самостоятельная загрузка предложений с помощью распределительных встраиваний
Построив интуитивное представление о том, какой язык используется в большинстве моделей НЛП, мы можем придумать способы использовать это понимание для создания новых текстовых образцов. Один из способов создания текстовых данных - настроить существующие данные так, чтобы они приняли форму семантически похожего предложения. Основная цель этого метода - изменить числовой ввод для задачи последующего обучения, сохраняя при этом ту же семантику предложения. Еще раз используя пример классификации языка вражды, мы бы хотели, чтобы расистский комментарий (класс с недостаточной выборкой) оставался расистским комментарием, но с использованием других слов. Чтобы сгенерировать эти несколько альтернативные образцы, мы можем проверить две вещи для каждого слова в словаре:
1. Пороговое значение косинусного расстояния между всеми векторами слов в словаре.
2. Тег части речи (POS).
В приведенном выше примере косинусное сходство - это просто скалярное произведение любых двух заданных векторов слов, масштабированных по размеру векторов. Два вектора с более высоким скалярным произведением более похожи и, следовательно, более взаимозаменяемы друг с другом. Например, слова «мощность» и «сила» из приведенного выше, вероятно, будут использоваться в аналогичных контекстах и, в свою очередь, имеют более высокий скалярный продукт. Тег части речи - это грамматический тег, который мы можем присвоить каждому слову, чтобы убедиться, что два слова грамматически одинаковы. В приведенном ниже примере мы видим, что «letting» превышает порог подобия, но является герундийским, а «let» - правильным глаголом. Проверка на равенство POS-тегов просто гарантирует, что мы не сделаем предложение слишком грамматически неверным при увеличении выборки.
В простом примере выше мы видим, что мы расширили существующие образцы данного предложения. Как это может помочь нашей типовой модели классифицировать язык вражды? Предположим, что модель обучена на нескольких очень похожих оскорбительных образцах, где ключевое оскорбительное слово часто заменяется аналогичным оскорбительным словом из текстового корпуса. Последующий классификатор будет делать меньший акцент на отдельных словах ненависти, но более сильный акцент на контекстных словах, которыми, возможно, не было обмена. Таким образом, мы побуждаем модель изучать речевые модели, а не отдельные слова. Это полезно для этой конкретной учебной задачи, поскольку модель с меньшей вероятностью будет сбита с толку общими перестановками, которые пользователи могут использовать для обхода лексических проверок языка ненависти, или людьми, использующими оскорбительную лексику, не сказав при этом ничего оскорбительного (например, цитируя кого-то, кто , собственно говоря, говорит что-то расистское).
Порог в этом методе рассматривается как дополнительный гиперпараметр, который необходимо оптимизировать. Интуиция, лежащая в основе оптимизации порога косинусного подобия, заключается в том, что два слова должны были встречаться в достаточно равных контекстах, чтобы одно можно было заменить другим, не запутывая последующую задачу. Я попробовал этот метод на ряде наборов данных, разжигающих ненависть, и добился повышения точности на 4–6% и, что наиболее важно, улучшил запоминание на целых 25% по сравнению с классом с недостаточной выборкой.
Генеративные модели для увеличения текста
Альтернативный подход к пополнению класса меньшинства - создание новых образцов с нуля. Возможно, вы читали о чат-боте Microsoft, который случайно стал расистом. Как насчет целенаправленного создания максимально расистского и женоненавистнического чат-бота, способного генерировать новые образцы языка ненависти, которые нам больше не нужно будет маркировать?
Для этого мы могли бы обучить марковскую языковую модель или модель языка RNN на обучающих данных для каждого класса, затем выбрать случайное стартовое слово и позволить модели предсказать следующее слово в последовательности. Для простоты давайте начнем с изучения моделей марковского языка. Напомним, что цепь Маркова основана на концепции, согласно которой следующий элемент в последовательности определяется текущим элементом и его самой высокой вероятностью перехода к любому из предыдущих элементов. Если мы применим это к тексту, мы могли бы сопоставить каждое уникальное слово в корпусе, чтобы принять состояние, и определить переходные вероятности как вероятность того, что одно слово будет соседним словом с другим. Чтобы проиллюстрировать это, возьмем в качестве примера текст песни «Imagine» из группы Beatles:
Представьте себе, что нет рая,
Это легко,
Под нами нет ада,
Над нами только небо,
Представьте себе всех людей,
Живых на сегодня…
Если сопоставить каждое слово в этих текстах с определенным состоянием, мы увидим, что есть такие слова, как «воображать», «нет» или «нас», которые встречаются более чем с одним словом. Если мы начнем случайный обход цепочки состояний, показанной ниже, мы сможем получить новый образец:
Конечно, этот пример очень прост и работает намного лучше при применении моделей марковского языка к большим текстовым корпусам, где количество совпадений слов выше.
Проблема с использованием цепей Маркова заключается в том, что они являются моделями без памяти, что означает, что они учитывают только текущее состояние (слово) на каждом временном шаге и игнорируют всю предыдущую последовательность. Это приводит к предложениям, которые во многих случаях грамматически неверны. Усовершенствованием этого метода было бы обучение рекуррентной нейронной сети, которая учитывает как текущее слово, так и всю предыдущую последовательность. Для этого мы могли бы использовать модуль долгосрочной краткосрочной памяти (LSTM), который позволяет нам делать больший или меньший акцент на более поздних временных шагах. Затем мы могли бы настроить LSTM для генерации более длинных или более коротких текстовых последовательностей.
Чтобы реализовать это, необходимо обучить отдельную модель RNN для каждого класса, используя вложение W2V для слоя встраивания, который передается в два последующих 128-мерных рекуррентных слоя LSTM. Отдельные выходные данные уровня внедрения и каждого уровня LSTM объединяются, получая матрицу признаков размером N x 356 (N - количество слов). Эта матрица признаков передается в последний полностью связанный слой, выходные данные которого сопоставляются с вероятностями для каждого слова в корпусе. Наивысшая вероятность представляет следующее слово в сгенерированной последовательности. После обучения этому на ряде наборов данных, разжигающих ненависть (этот и этот), текстовый генератор создал образцы, все из которых были похожи на показанные ниже:
Обратите внимание, что созданные образцы (например, второй образец) не всегда понятны людям. Однако это не всегда имеет значение для последующей задачи, поскольку она все равно сможет распознать больше комбинаций языковых шаблонов и словарного запаса из корпуса обучения. Опробовав эту технику на ряде наборов данных, разжигающих ненависть, мы обнаружили, что можем дополнительно повысить точность на 2–3% и вспомнить классы языка вражды на 8–10% в нашем самом богатом наборе данных. Но эти генеративные методы отнюдь не идеальны и, иногда создавая больше шума, могут принести больше вреда, чем пользы. Например, наличие только 100 образцов в классе меньшинства недостаточно для обучения модели генерации естественного языка. В результате эти сгенерированные образцы просто запутают последующую задачу.
НЛП и китайский шепот
Позвольте мне сделать последнее замечание относительно проектирования систем НЛП для более крупных систем при использовании множественных встраиваний (т. Е. Сопоставления слов с числами, например Word2Vec, описанного выше). В этой ситуации производительность максимальна, когда все методы внедрения в системе согласованы. Например, предположим, что мы разработали модель, которая обучила расширение предложения с начальной загрузкой в корпусе GoogleNews, модель генерации естественного языка с использованием альтернативной техники встраивания (например, GloVe) и последующее встраивание с использованием другого текстового корпуса по той же методике (например, CommonCrawl). Возможно, неудивительно, что эта модель, вероятно, будет работать хуже, чем модель, использующая одно и то же встраивание и текстовые корпуса. Это потому, что каждый компонент модели будет иметь немного другое понимание языка.
Интуитивно мы могли бы связать это с игрой китайского шепота: если игрок A (расширение) понимает слово иначе, чем игрок B (последующее встраивание), результат в конце игры с большей вероятностью будет запутан. Поэтому мы хотим, чтобы все компоненты (или игроки) в этой многошаговой модели понимали слова одинаково. Обычно после согласования методов представления слов и обучающих корпусов встраиваний точность модели увеличивается примерно на 2% для разных наборов данных.
Повышение уровня ваших проектов в области науки о данных с помощью интеллектуальных дополнений
Существует тонкая грань между эффективным использованием дополнений и угрозой утечки данных в вашем проекте по науке о данных. Хотя это приложение предназначено для увеличения текстовых данных, придумывание способов увеличения ваших наборов данных может быть полезно для повышения производительности для всего диапазона типов данных. При этом будьте осторожны при нанесении. Обратите внимание, что во избежание возможных утечек данных очень важно тщательно разделять свертки перекрестной проверки и следить за тем, чтобы данные из набора тестов не использовались для обучения методов дополнения.
Заключительные замечания
В этом посте мы продемонстрировали два относительно простых, но непростых метода увеличения данных для текста. При использовании этих методов следует помнить о нескольких вещах. Во-первых, тот факт, что в некоторых случаях сгенерированные образцы не будут понятны людям, может не иметь большого значения для модели. Пока модель может абстрагироваться от другого языкового шаблона или слова, используемого в аналогичном контексте, ее способность обобщать невидимые данные, вероятно, улучшится. Во-вторых, эти методы ни в коем случае не идеальны, и может быть много способов их оптимизации в отношении используемых показателей расстояния или архитектур нейронных сетей. Одним из расширений будет использование генерирующих состязательных сетей (GAN) для генерации текста. Другой вариант - согласовать метрики расстояния, используемые для обучения встраиванию слов, и метрики, используемые для увеличения. В настоящее время это решение использует Word2Vec, который предполагает евклидово пространство и оптимизирует точечный продукт во время обучения, в то время как косинусное расстояние является сферической метрикой. Мы ожидаем, что это решение значительно улучшится, если в первую очередь использовать метод сферического вложения.
Это сообщение в блоге было написано, чтобы сопровождать публикацию следующей статьи:
Ризос, Г., Хемкер, К. и Шуллер, Б. (2019). Дополнение для предотвращения: увеличение коротких текстовых данных в глубоком обучении для классификации языка вражды. 28-я Международная конференция ACM по управлению информацией и знаниями (CIKM ’19), 3–7 ноября 2019 г., Пекин, Китай.
[1] Миколов, Т., Чен, К., Коррадо, Г., и Дин, Дж. (2013). Эффективная оценка представлений слов в векторном пространстве. препринт arXiv arXiv: 1301.3781.