Машинное обучение | Восемь шагов для решения 90% проблем NLP

машинное обучение NLP

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

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

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

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

  • Классифицировать текстовую информацию на основе намерений пользователя (например, запрос на базовую помощь, срочные вопросы)

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

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

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

  • Как собирать, подготавливать и анализировать данные

  • Как строить простые модели и, при необходимости, модели глубокого обучения

  • Как интерпретировать и понимать вашу модель, чтобы убедиться, что она изучает особенности, а не шум

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

Шаг 1. Соберите данные

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

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

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

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

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

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

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

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

Этикетка

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

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

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

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

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

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

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

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

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

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

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

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

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

One-hot и Bag of Words

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

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

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

визуализация

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

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

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

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

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

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

Шаг 5: Проверьте эффект анализа

Проверить матрицу путаницы

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

Матрица путаницы (более высокая доля зеленого, меньшая доля синего)

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

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

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

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

Пакет слов: представляет важность на основе частоты слов.

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

Шаг 6: Статистика лексической структуры

Метод извлечения признаков TF-IDF

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

Можно видеть, что существует более четкое различие между двумя цветами, что упрощает разделение двух типов данных с помощью классификатора. Обучая логистическую регрессию на новой модели, мы получаем точность 76,2%, что указывает на то, что метод извлечения признаков TF-IDF действительно помогает улучшить производительность распознавания.

Хотя это лишь очень небольшое улучшение, может ли наша модель выучить более важные слова об этом? Использование извлечения признаков TF-IDF можно рассматривать как значительное улучшение обучения, если можно получить лучшие результаты, избегая переобучения модели на нерелевантных словах.

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

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

Представление функций Word2Vec

Предыдущий пакет слов, one-hot и tfidf, все создают свои собственные наборы функций на основе анализируемого корпуса и используют набор функций для извлечения функций и преобразования корпуса для анализа в данные для компьютерного анализа.

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

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

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

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

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

https://code.google.com/archive/p/word2vec/

Иерархическое представление признаков предложения

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

Представление функции предложения для модели Word2vec 

Функции предложений Word2Vec представляют собой результаты визуализации анализа модели, и результаты следующие:

Здесь разделение двух наборов цветов больше, а это означает, что Word2Vec может помочь классификатору лучше разделить две категории. Снова используя логистическую регрессию, мы получили точность 77,7%, наш лучший результат на сегодняшний день!

Компромисс между сложностью и интерпретируемостью

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

Шаг 8. Тренируйте синтаксические функции сквозным образом

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

Обучение проходит быстро. Как архитектура глубокого обучения начального уровня, она может хорошо решать проблемы классификации. Хотя репутация CNN в основном связана с ее превосходными способностями к обработке изображений, она также обеспечивает отличные результаты при выполнении задач, связанных с текстом. И по сравнению с большинством сложных методов НЛП (таких как LSTM, архитектура кодировщика/декодера и т. д.) скорость обучения CNN также выше. Он способен сохранять порядок слов, хорошо запоминать особенности последовательности слов и другую полезную информацию. По сравнению с предыдущей моделью, он может определить разницу между «Алекс ест растения» и «Растения едят Алекс».

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

напиши в конце

Кратко повторим, подход, который мы используем на каждом этапе, таков:

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

  • Интерпретируйте предсказания модели

  • Понимание неправильных выборок в классификации моделей

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

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

Прошлые статьи

Учебные материалы по Python объемом 100 ГБ: от начального уровня до мастера! 

Почему вы планируете на 2019, а не на 2018 год?

Мой плохой мотив для публикации статей — получить поклонников!

15 лучших библиотек Python для науки о данных в 2017 году 

Как извлечь информацию об объектах из текста? 

Знакомство с алгоритмом К-средних

Что может сделать nltk для китайцев 

Каждое слово, оставленное в Интернете, раскрывает вашу личность

Элегантные и лаконичные списки

Получить список советов и рекомендаций

Как сортировать данные различными способами?

[Объяснение видео] Scrapy рекурсивно собирает информацию о пользователях Jianshu

Артефакт сбора информации о торговце Meituan 

Используйте библиотеку chardect для решения проблемы искаженных веб-страниц.

gevent: асинхронная теория и практика 

Легкая и эффективная библиотека асинхронного доступа

Подробное объяснение конфигурации селенового диска

Как использовать артефакт сканера PyQuery

Простое изучение базы данных SQLite3

Функция вызова Python по строке

Библиотека символьных вычислений в круге Python - Sympy

Как использовать библиотеку даты и времени в Python