Научит вас решать 90% проблем НЛП

машинное обучение искусственный интеллект алгоритм NLP

Автор | Эммануэль Амайзен
Переводчик | Ван Мяоцюн
Редактор | Эмили
Руководство по передовой ИИ:Автор Эммануэль Амайзен шаг за шагом проведет вас в этой статье о том, как использовать методы машинного обучения для решения большинства проблем НЛП, В статье будет указан типичный случай классификации - связано ли содержимое Твиттера с событиями стихийных бедствий, чтобы подробно объяснить Какие шаги мы должны выполнить для обработки текстовых данных.

Для получения дополнительных галантерейных товаров, пожалуйста, обратите внимание на публичный аккаунт WeChat «AI Frontline» (ID: ai-front)
Текстовые данные повсюду

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

НЛП — это очень обширная область исследований, которая каждый день дает новые интересные результаты. Поработав с сотнями компаний, наша команда Insight обнаружила несколько ключевых практических приложений, которые будут появляться чаще:

  • Определите различные группы пользователей/клиентов (например, предскажите отток, пожизненную ценность, предпочтения продукта и т. д.).

  • Точное обнаружение и извлечение классификаций обратной связи (например, положительные и отрицательные отзывы/мнения, упоминания особых атрибутов, таких как размер одежды, удобство и т. д.)

  • Категоризация текста по намерениям (например, запрос общей помощи, срочное решение проблемы)

Учитывая, что в Интернете существует множество статей и руководств по НЛП, нам было трудно найти подробные и эффективные руководства или советы по решению этих проблем.

Чем эта статья может вам помочь

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

Прочитав эту статью, вы будете знать, как:

  • Сбор, подготовка и обнаружение данных

  • Начните с простых моделей и при необходимости перейдите к глубокому обучению.

  • Интерпретировать и понимать модели, чтобы убедиться, что вы действительно собираете достоверную информацию, а не шум

Эта статья представляет собой пошаговое руководство и общий обзор эффективного процесса стандартизации.

Статья также сопровождается интерактивной заметкой, в которой демонстрируются и применяются все задействованные методы. Вы можете попробовать запустить код и посмотреть ниже.

Шаг 1. Соберите данные
Образец источника данных

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

  • Обзоры продуктов (из Amazon, Yelp и других магазинов приложений)

  • Пользовательский контент (твиты, посты в Facebook, вопросы StackOverflow и т. д.)

  • Решение проблем (запросы клиентов, техническая поддержка, стенограммы чатов)

Набор данных «Катастрофа в социальных сетях»

В этом посте мы будем использовать набор данных, предоставленный CrowdFlower, под названием «Катастрофы в социальных сетях».

Участники просмотрели более 10 000 твитов с поисковыми запросами, такими как «пожар», «карантин», «хаос» и т. д., и отметили, был ли твит связан с катастрофой (в отличие от шуток, обзоров фильмов и т. д.) или с чем-то другим. некатастрофическое событие).

Наша задача — определить, какие твиты на самом деле связаны с катастрофой, а не с какой-то не относящейся к делу темой вроде описания фильма. Зачем? Одним из возможных приложений является оповещение сотрудников правоохранительных органов конкретно о чрезвычайных ситуациях, не отвлекаясь на другую не относящуюся к делу информацию, такую ​​как новый фильм Адама Сэндлера. Особая проблема в этой задаче заключается в том, что в обоих случаях при поиске твитов используются одни и те же термины, поэтому мы можем различать их только по тонким различиям.

В следующих статьях мы будем называть твиты, связанные с бедствием, «бедствием», а другие твиты — «не относящимися к делу».

Этикетка

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

Дополнительные советы Ричарда Сочера

Шаг 2. Очистите данные

Первое правило, которому нужно следовать: «Ваша модель должна быть такой же хорошей, как и ваши данные».

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

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

  • Удалите все ненужные символы, например любые не буквенно-цифровые символы.

  • Токенизируйте свои тексты, разделите их на отдельные слова

  • Удалите ненужные слова, такие как напоминания, такие как @ или URL-ссылки.

  • Преобразуйте все буквы в нижний регистр, чтобы «привет», «привет», «привет» считались одним и тем же словом.

  • Привяжите слова с ошибками или многократными написаниями к конкретному выражению (например, «круто»/«кьюл»/«крутоооол»)

  • Рассмотрите лемматизацию (например, трактуйте «есть», «есть», «есть» как «быть»)

После выполнения этих шагов и проверки на наличие других ошибок мы готовы использовать эти чистые размеченные данные для обучения модели!

Шаг 3. Найдите хорошее представление данных

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

Смайлик, представленный матрицей чисел

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

Горячее кодирование - Bag of Words

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

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

Используйте модель мешка слов для представления предложений. Предложения находятся слева, а модельные выражения — справа. Каждый индекс в векторе представляет определенное слово.

Встроенная визуализация

Примерный словарный запас «катастрофы в социальных сетях» будет содержать около 20 000 слов, что означает, что каждое предложение будет представлено вектором длиной 20 000. векторБольшинство будет дополнено 0, потому что каждое предложение содержит только небольшое подмножество словарного запаса.

Чтобы увидеть, действительно ли встраивания собирают информацию, относящуюся к проблеме (например, связаны ли твиты со стихийным бедствием), хороший способ сделать это — визуализировать их и посмотреть, хорошо ли распределяются результаты. Учитывая, что словарный запас обычно очень велик, а визуализация 20 000-мерных данных в принципе невозможна, мы использовали метод PCA для уменьшения данных до двух измерений. Нарисуйте следующим образом:

Визуализация вложений модели Bag-of-Words

Две категории, по-видимому, не очень хорошо разделены, что может быть связано с нашим выбором метода встраивания или просто из-за уменьшения размерности. Чтобы увидеть, будут ли особенности модели мешка слов играть какую-то роль, мы можем попробовать обучить классификатор на ее основе.

Шаг 4: Классификация

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

Мы делим данные на два набора, обучающий набор используется для сопоставления с моделью, а тестовый набор используется для наблюдения за влиянием приложения на неизвестные данные. После тренировки получаемточность 75,4%. Не плохой результат! Самый предполагаемый класс («нерелевантный») достигает только 57%. Тем не менее, даже 75% точности достаточно,Мы никогда не должны начинать применять модель, не поняв ее.

Шаг 5: Осмотр
матрица путаницы

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

Матрица путаницы (зеленый — высокая шкала, синий — низкая шкала)

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

Объясните и проиллюстрируйте модель

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

Модель «мешок слов»: важность слов

Наш классификатор правильно уловил некоторые признаки (хиросима, резня), но, видимо, переобучил некоторые бессмысленные слова (heyoo, x1392). Теперь наша модель мешка слов имеет дело с большим словарным запасом, и каждое слово обрабатывается одинаково. Однако некоторые слова появляются очень часто, но только создают помехи для предсказания. Далее мы попробуем выразить предложение таким образом, чтобы учитывать частоту слов, чтобы посмотреть, сможем ли мы получить больше информации из данных.

Шаг 6: Объясните структуру слова
TF-IDF

Чтобы наша модель уделяла больше внимания значимым словам, мы можем выполнить оценку TF-IDF (частота терминов, обратная частота документа) для модели мешка слов. TF-IDF оценивает слова на основе их редкости в наборе данных и обрезает слова, которые появляются слишком часто и только добавляют шум. На изображении ниже показана наша недавно встроенная карта проекции PCA:

Визуализация вложений TF-IDF

На изображении выше мы видим, что два цвета различаются более четко. Это облегчает нашему классификатору различие между двумя группами. Посмотрим, даст ли это лучшие результаты. Другая модель логистической регрессии, обученная с помощью наших новых вложений, достигла точности 76,2%.

Это очень маленькое усиление. Наша модель начала замечать более важные слова? Если мы получим лучшие результаты, убедившись, что модель не является «мошеннической», то модель можно считать улучшением.

TF-IDF: важность слов

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

Шаг 7: Используйте семантику
Word2Vec

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

Для того, чтобы решить эту задачу, нам нужно получить семантику слов, а значит, нужно понять, что «хороший» и «позитивный» ближе, чем «абрикос» и «континент». Мы будем использовать инструмент под названием Word2Vec, чтобы помочь нам получить смысл.

Используйте предварительно обученные слова

Word2Vec — это метод поиска непрерывных вложений слов. Он учится, читая большие объемы текста и запоминая слова, встречающиеся в похожем контексте. После обучения с достаточным количеством данных он генерирует 300-мерный вектор для каждого слова в словаре, где слова с похожим значением расположены ближе друг к другу.

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

Выражения на уровне предложения

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

Вложение предложений Word2Vec

Вот визуализация нового встраивания, сформированного с помощью техники, описанной ранее:

Встроенная визуализация Word2Vec

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

Компромисс сложности/интерпретируемости

Учитывая, что в предыдущих моделях наши вложения не представлялись в виде одномерного вектора для каждого слова, было труднее сказать, какие слова наиболее релевантны нашей классификации. Но мы по-прежнему можем использовать коэффициенты логистической регрессии, потому что они связаны с 300 измерениями нашего встраивания, а не с индексом слова.

Для такого небольшого выигрыша в точности потеря всякой интерпретируемости кажется суровым компромиссом. Но при работе с более сложными моделями мы можем воспользоваться преимуществами LIME.интерпретатор черного ящикаДавайте посмотрим, как работает наш классификатор.

LIME

LIME доступен в пакете с открытым исходным кодом на Github. Интерпретатор черного ящика позволяет пользователю объяснить решение любого из классификаторов, используя типичный случай, искажая входные данные (в нашем случае удаляя слова из предложения), чтобы наблюдать за изменением прогноза.

Взгляните на набор интерпретаций предложений в нашем наборе данных.

Правильная лексика стихийных бедствий, классифицированная как «релевантная»

Здесь влияние слов на классификацию не кажется очевидным.

Но у нас нет времени исследовать тысячи случаев в наборе данных. Вместо этого мы запустим LIME на репрезентативной тестовой выборке, чтобы увидеть, какие слова постоянно вносят значительный вклад. Используя этот подход, мы можем получить оценки важности слов, как в предыдущей модели, и проверить предсказания модели.

Word2Vec: Важность слова

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

Шаг 8. Обработайте грамматику сквозным подходом

Содержание предыдущих статей касалось быстрых и эффективных методов создания компактных вложений предложений. Однако, игнорируя порядок слов, мы теряем всю грамматическую информацию в предложении. Если эти методы не дают достаточно достоверных результатов, вы можете использовать более сложные модели, которые принимают целые предложения в качестве входных данных и предсказывают метки без необходимости построения промежуточных представлений. Распространенной практикой является использование Word2Vec или какого-либо более нового метода, такого как GloVe или CoVe, для обработки предложения как серии независимых векторов слов. Мы сделаем это ниже.

Эффективная сквозная архитектура (источник)

Сверточные нейронные сети (CNN) для классификации предложений обучаются очень быстро и являются очень полезными архитектурами глубокого обучения начального уровня. CNN широко известны своей производительностью на данных изображения, но они также обеспечивают отличные результаты для задач, связанных с текстом, и, как правило, быстрее обучаются, чем самые сложные алгоритмы NLP (такие как LSTM и архитектура кодировщика/декодера). Эта модель сохраняет порядок слов и извлекает ценную информацию из нашего целевого класса, для которого можно предсказать порядок слов. В отличие от предыдущей модели, он может различать «Алекс ест растения» и «Растения едят Алекса».

Обучение этой модели не потребует больше усилий, чем предыдущий метод (подробнее см. в коде), но эффект будет лучше предыдущего, а точность может достигать 79,5%! Используя приведенную выше модель, нашим следующим шагом будет изучение и интерпретация прогнозов, сделанных с помощью описанного нами метода, чтобы подтвердить, что это действительно лучшая модель, которую можно предоставить пользователю. Теперь вы можете смело попробовать это на себе.

Наконец

Давайте быстро пробежимся по ранее упомянутым методам успеха:

  • Начните с быстрой и простой модели

  • объяснить свои предсказания

  • понять ошибку, которую он производит

  • Используйте эту информацию, чтобы определить, будет ли ваше следующее действие работать с вашими данными или требуется более сложная модель.

Эти методы применяются в особых случаях с использованием моделей, которые понимают и обрабатывают небольшие тексты, такие как твиты, но этот способ мышления можно широко применять и к другим проблемам. Я надеюсь, что эта статья может быть полезна для вас, и я надеюсь услышать от вас некоторые предложения или консультации! Не стесняйтесь оставлять комментарии ниже или связываться с Эммануэлем Амайзеном здесь или в Твиттере.


Для большего содержания сухих товаров вы можете обратить внимание на AI Frontline, ID:ai-front, фоновый ответ "AI", "TF", "Большие данные«Вы можете получить серию мини-книг и карт навыков «AI Frontline» в формате PDF.