Перевод / Звезда и
Текстовые данные повсюду
Независимо от того, являетесь ли вы устоявшейся компанией или запускаете новую услугу, вы всегда можете использовать текстовые данные для проверки, улучшения и расширения функциональности вашего продукта. Наука извлечения смысла и обучения из текстовых данных известна как обработка естественного языка (NLP).
НЛП дает новые захватывающие результаты каждый день. Поработав с несколькими компаниями, команда Insight обнаружила несколько часто встречающихся реальных вариантов использования.
- Определите различные группы пользователей (например, предскажите отток, пожизненную ценность, предпочтения продукта)
- Точно обнаруживайте и извлекайте различные категории отзывов (положительные и отрицательные отзывы/мнения, извлекайте определенные атрибуты, такие как размер/подгонка одежды...)
- Предугадывать смысл текста (например, запрос базовой помощи, срочные вопросы)
Несмотря на то, что в Интернете есть много документов и учебных пособий по НЛП, нам было трудно найти руководства и советы о том, как эффективно решать эти проблемы с самого начала.
Что делает эта статья
После многочисленных проектов и уроков, извлеченных каждый год, мы написали эту статью, чтобы объяснить, как создать решение для машинного обучения для решения вышеуказанных проблем. Мы начнем с самого простого подхода и перейдем к решениям с более тонкими нюансами, таким как разработка признаков, векторы слов и глубина. После прочтения вы должны уметь:
- Сбор, подготовка и проверка данных
- Начните с простых моделей и при необходимости перейдите к глубокому обучению.
- Интерпретируйте и понимайте свою модель, чтобы убедиться, что вы действительно получаете достоверную информацию, а не шум.
Мы написали эту статью как пошаговое руководство; она также служит обзорным руководством по эффективному подходу. Кроме того, в этой статье также содержитсяИнтерактивный блокнот (блокнот ipython), продемонстрировать и применить все эти методы. Не стесняйтесь использовать и запускать эти коды на практике!
Шаг 1. Соберите данные
Образец источника данных
Каждая проблема машинного обучения начинается с данных, таких как список электронных писем, сообщений или твитов. Общие источники текстовой информации включают:
- Обзоры продуктов (Amazon, Yelp и различные магазины приложений)
- Пользовательский контент (твиты, посты в Facebook, вопросы StackOverflow)
- Решение проблем (апелляции пользователей, связанные тикеты, журналы чатов)
Набор данных «Катастрофы в социальных сетях»
В этой статье мы будем использоватьFigure EightЩедро предоставленный набор данных под названием «Катастрофа в социальных сетях», в котором:
Авторы просмотрели более 10 000 твитов, которые прошли через различные поисковые запросы, такие как «горение», «карантин» и «хаос», а затем определили, относятся ли эти твиты к катастрофическим событиям (а не к шуткам, обзорам фильмов или другой чепухе с слово) катастрофические вещи).
Наша задача — определить, какие твиты посвящены катастрофическим событиям, а не неактуальным обзорам фильмов. Зачем? Одним из возможных сценариев применения было бы информирование сотрудников правоохранительных органов о чрезвычайной ситуации при игнорировании рецензий на недавний фильм Адама Сэндлера. Особая сложность этой задачи заключается в том, что обе категории содержат одни и те же ключевые слова, используемые для поиска твитов, поэтому мы должны различать их, используя более тонкие различия.
В оставшейся части этого поста мы будем называть твиты о стихийных бедствиях «катастрофами», а твиты о чем-либо другом — «неуместными».
тег данных
Мы пометили данные, чтобы знать, какие твиты относятся к каким категориям. Как отметил Ричард Сочер, найти и пометить достаточно данных для обучения модели часто бывает быстрее, проще и дешевле, чем пытаться оптимизировать сложные неконтролируемые методы.
Шаг 2. Очистите данные
Первое правило, которому мы следуем: «Ваша модель не может быть лучше ваших данных».
Ключевым навыком специалиста по данным является знание того, работать ли дальше с моделью или с данными. Хорошее эмпирическое правило — сначала просмотреть данные, а затем очистить их.Чистый набор данных позволит модели изучить значимые функции без переобучения на нерелевантный шум.
Ниже приведен контрольный список для очистки данных: (Дополнительную информацию см.код):
- Удалите все ненужные символы, например любые небуквенно-цифровые китайские символы.
- Токенизировать: Разделить текст на отдельные слова
- Удалите нерелевантные слова, такие как «@» или «ур» в твиттере.
- Преобразует все символы в нижний регистр, чтобы такие слова, как «привет», «привет» и «привет», считались одним и тем же значением.
- Рассмотрите возможность преобразования групп слов с ошибками или повторяющимися ошибками в представление (например, «круто»/«кьюл»/«круто»).
- учитыватьлемматизация(сократите такие слова, как «есть», «есть» и «есть», до общеупотребительных форм, таких как «быть»)
Выполнив эти шаги и проверив другие неверные данные, мы можем начать обучение модели с чистыми помеченными данными!
Шаг 3. Найдите хорошее представление данных
Модели машинного обучения принимают числовые значения в качестве входных данных. Например, модель, обрабатывающая изображения, использует матрицу, которая представляет интенсивность каждого пикселя в каждом цветовом канале.
Наш набор данных представляет собой набор предложений, поэтому, чтобы наш алгоритм мог извлекать закономерности из данных, нам сначала нужно найти способ представить его таким образом, чтобы наш алгоритм мог его понять, т.е. преобразовать в представление набора чисел. .
Мешок слов
Естественным способом представления компьютерного текста является кодирование каждого символа в виде числа (например, ASCII). Если бы мы загрузили это простое представление в классификатор, ему пришлось бы изучать структуру слов с нуля на основе наших данных, что невозможно для большинства наборов данных. Нам нужно использовать подход более высокого уровня.
Например, мы можем создать словарь всех слов в наборе данных и связать уникальный индекс для каждого слова. Затем каждое предложение представляется в виде списка, длина которого равна количеству отдельных слов в нашем словаре. В каждом индексе в этом списке мы отмечаем, сколько раз данное слово встречается в предложении. Это называется моделью мешка слов (которая полностью игнорирует порядок слов в предложении). Следующее.
Модель мешка слов представляет предложения. Предложения находятся слева, а изображения справа. Каждый индекс в векторе представляет определенное слово.
Визуализация вложений слов
В примере с «катастрофой в социальных сетях» в нашем словарном запасе около 20 000 слов, а это значит, что каждое предложение будет представлено в виде вектора длиной 20 000. Векторы в основном содержат «0», потому что каждое предложение встречается только в небольшой части словаря.
Чтобы увидеть, захватывают ли наши вложения информацию, относящуюся к нашей проблеме (т. е. связаны ли твиты с бедствием), лучше всего визуализировать их и посмотреть, хорошо ли разделение между различными классами. Поскольку словари обычно очень велики, визуализировать данные в 20000 измерений невозможно, поэтомуАнализ главных компонентов (PCA)Такие методы, как помогут спроецировать данные в двух измерениях. Как на картинке ниже.
Два класса не кажутся хорошо разделенными, что может быть особенностью способа встраивания или просто особенностью нашего уменьшения размерности. Чтобы убедиться, что функции модели мешка слов полезны, мы можем сначала использовать эти данные для обучения классификатора.
Шаг 4: Классификация
Приступая к решению проблемы, рекомендуется начинать с самого простого инструмента, способного справиться с задачей. Когда дело доходит до классификации данных,Логистическая регрессияЭто распространенный метод с высокой степенью общности и интерпретируемостью. Таким образом, обучение очень простое, а результаты интерпретируются, потому что вы можете легко извлечь наиболее важные параметры, коэффициенты из модели.
Мы делим данные на обучающий набор и тестовый набор, которые используются для обучения модели и проверки эффекта модели соответственно, а тестовый набор используется, чтобы увидеть, насколько хорошо он обобщает невидимые данные. После тренировки мы получили точность 75,4%. Эффект не плохой! Если все угадать, то самый частый класс («все равно») составляет всего 57%. Однако даже если для наших нужд достаточно точности 75 %, нам все равно нужно попытаться понять модель перед ее развертыванием.
Шаг 5: Проверьте
Матрица путаницы
Первый шаг — понять, какие типы ошибок порождают наши модели и какие из них должны быть наименее вероятными. В нашем примере положительный пример ложного срабатывания — это твит, который предсказывает «нерелевантный» как катастрофу, а отрицательный пример ложного срабатывания — это твит о «катастрофе», который прогнозируется как «неуместный». Если бы нашим приоритетом было реагировать на каждое потенциальное событие, мы бы хотели уменьшить количество ложных срабатываний для контрпримеров. Однако, если мы ограничены в ресурсах, мы можем отдать приоритет более низкой частоте ложных срабатываний, чтобы уменьшить потребление ресурсов из-за ложных срабатываний. Хороший способ визуализировать эту информацию — использоватьматрица путаницы, который сравнивает прогнозы, сделанные нашей моделью, с достоверными метками. В идеале распределение матрицы представляет собой диагональную линию из левого верхнего угла в правый нижний угол (наш прогноз точно соответствует истине).
Наш классификатор выдает больше ложноотрицательных результатов, чем ложноположительных (пропорционально). Другими словами, самая распространенная ошибка, которую допускает наша модель, заключается в том, что стихийные бедствия ошибочно классифицируются как нерелевантные. Если ложные срабатывания представляют собой высокую стоимость выполнения, это может быть лучшим свойством нашей модели.
Объясните нашу модель
Чтобы проверить нашу модель и интерпретировать ее прогнозы, важно увидеть, для каких слов она делает прогнозы. Если наши данные необъективны, наша модель будет делать точные прогнозы на выборочных данных, но не будет хорошо работать в реальных сценариях. Здесь мы наносим слова с наибольшим весом как для аварийных, так и для нерелевантных классов. График важности слов с помощью мешка слов и логистической регрессии прост, потому что мы просто извлекаем коэффициенты, которые модель использует для прогнозов, и ранжируем их.
Наша модель правильно извлекает некоторые шаблоны (Хиросима, Холокост), но, по-видимому, переопределяет некоторые бессмысленные термины (heyoo, x1392). Теперь наша модель мешка слов обрабатывает большой словарный запас различных слов и обрабатывает все слова одинаково. Однако некоторые из этих слов встречаются очень часто, но только добавляют шума к нашим предсказаниям. Далее мы попробуем представить предложения таким образом, чтобы показать частоту слов, чтобы посмотреть, сможем ли мы извлечь больше информации из данных.
Шаг 6: Статистическая структура словаря
TF-IDF
Чтобы помочь нашей модели уделять больше внимания значимым словам, мы можем использовать в нашей модели мешка словОценка TF-IDF(частота термина, частота оборота документа). TF-IDF измеряет слова на основе их редкости в нашем наборе данных, уменьшая вес слов, которые встречаются слишком часто и только добавляют шум. Ниже приведено изображение нашего нового ввода для встраивания PCA.
Мы можем видеть более четкую разницу в распределении между двумя цветами. Это облегчит нашей модели разделение двух категорий. Посмотрим, приведет ли это к повышению производительности. Обучив другую логистическую регрессию на новых данных встраивания, мы достигаем точности 76,2%.
Немного улучшено. Наша модель начала учить более важные слова? Если мы получим лучшие результаты, предотвратив «обман» модели, тогда мы действительно сможем рассматривать эту модель как действительное улучшение.
Важные слова, которые он использует, кажутся более осмысленными! Хотя наша метрика точности в тестовом наборе увеличилась лишь незначительно, мы были более уверены в новых словах, используемых в модели, поэтому развертывание ее в системе, обращенной к пользователю, было бы более уместным.
Шаг 7: Используйте семантику
Word2Vec
Нашей последней модели удалось получить больше осмысленных слов. Однако, если мы развернем эту модель, очень вероятно, что мы встретим слова, которых раньше не было в нашем обучающем наборе. Предыдущая модель не смогла бы точно предсказать эти невидимые твиты, даже если бы увидела во время обучения очень похожие слова.
Чтобы решить эту проблему, нам нужно уловить семантику слов, а значит, нам нужно понять, что такие слова, как «хорошо» и «позитивно», ближе по смыслу, чем «абрикос» и «континент», которые мы будем использовать, чтобы помочь нам. инструмент для захвата семантики называется Word2Vec.
Используйте предварительно обученные слова
Word2Vec- это метод поиска непрерывности вложений слов. Он учится, читая большие объемы текста и запоминая слова, встречающиеся в похожем контексте. После обучения с достаточным количеством данных он генерирует 300-мерный вектор для каждого слова в словаре, и слова с похожими значениями находятся ближе друг к другу в векторном пространстве.
Авторы этой статьи открыли исходный код модели, предварительно обученной на очень большом корпусе, которую мы можем использовать для включения некоторых семантических знаний в нашу модель. можно найти вскладНайдите предварительно обученные векторы в .
Представление на уровне предложения
Быстрый способ генерировать вложения на уровне предложения для нашей модели — усреднить числа Word2Vec для всех слов в нашем предложении. Это подход с набором слов, как и раньше, но на этот раз мы сохраняем некоторую семантическую информацию и теряем только грамматику предложения.
Вот визуализация недавно сгенерированного встраивания с использованием ранее упомянутой техники:
Два набора цветов здесь выглядят более разделенными, и наше новое встраивание должно помочь нашей модели найти признаки разделения между двумя классами. После обучения той же модели в третий раз (логистическая регрессия) мы достигли точности 77,7%, нашего лучшего результата на сегодняшний день! Пришло время познакомиться с нашей моделью.
Компромисс сложности/объяснимости
Поскольку наши вложения не представлены векторами одного измерения на слово, как в предыдущих моделях, трудно понять, какие слова наиболее релевантны нашей модели. Хотя мы все еще можем получить коэффициенты логистической регрессии, они связаны с 300 измерениями встраивания, а не только с индексом слова.
Для такого низкого прироста точности потеря всей интерпретируемости кажется жестким компромиссом. Однако для более сложных моделей мы можем использовать интерпретатор черного ящика, такой как LIME, чтобы понять, как работает наша модель.
LIME
LIME — это программное обеспечение с открытым исходным кодом, доступное на Github. Объяснитель черного ящика, который позволяет пользователю объяснить процесс принятия решений каждой категории для конкретного примера, изменив входные данные (в нашем случае удалив слова из предложения) и увидев, как меняются прогнозы.
Давайте посмотрим на некоторые интерпретации предложений в наборе данных.
Слова о стихийных бедствиях выбраны для классификации как «релевантные»
В этом примере вклад слов в классификацию кажется менее очевидным.
Однако у нас нет времени изучать тысячи примеров в наборе данных. Вместо этого мы запускаем LIME на репрезентативной выборке тестовых случаев, чтобы увидеть, какие слова вносят значительный вклад. Используя этот подход, мы можем получить оценки важности слов, как и в нашей предыдущей модели, для проверки прогнозов нашей модели. Ниже приведен график важности слов с использованием Word2Vec.
Шаг 8. Используйте сквозную реализацию для использования синтаксической информации
Мы представили методы для быстрого и эффективного создания вложений на уровне предложений. Однако, игнорируя порядок слов, мы отбрасываем всю синтаксическую информацию предложения. Если эти методы не дают достоверных результатов моделирования, можно использовать более сложные модели, которые принимают целые предложения в качестве входных данных и предсказывают метки без создания промежуточных продуктов в качестве представлений данных. Обычный подход заключается в использовании Word2Vec или более новых моделей, таких какGloVeилиCoVe) представляет предложение как последовательность векторов слово-слово. Это то, что мы собираемся делать дальше.
Эффективная сквозная архитектура (источник)
для классификации предложенийСверточная нейронная сетьОн очень быстро обучается, хорошо работает и представляет собой архитектуру глубокого обучения начального уровня. Хотя сверточные нейронные сети (CNN) в первую очередь известны своей производительностью при работе с данными изображения, они также постоянно превосходно справляются с задачами, связанными с текстом, и, как правило, лучше, чем большинство сложных методов НЛП, таких какLSTMsи [Архитектура кодека] (https://www.tensorflow.org/tutorials/seq2seq) обучение намного быстрее. Модель сохраняет информацию о порядке слов и извлекает из нее ценную информацию для прогнозирования нашего целевого класса. Отличие от предыдущей модели в том, что она может различать «Алекс ест растения» и «растения ест Алекс».
Обучение этой модели не требует большой предварительной работы по сравнению с предыдущими методами (см.код), и получил текущую оптимальную модель с точностью 79,5%! Как и в случае с предыдущими моделями, следующим шагом должно быть изучение и интерпретация прогнозов с использованием описанных нами методов, чтобы убедиться, что это действительно лучшая модель для развертывания для пользователей. К настоящему времени вы должны быть в состоянии достаточно хорошо справиться с этой проблемой прогнозирования бедствий.
окончательное резюме
Вот краткий обзор подхода, который мы успешно использовали для этой статьи:
- Начните с простой и быстрой модели
- объяснить свои предсказания
- понять ошибки, которые он сделал
- Используйте эти знания, чтобы определить свои следующие шаги, независимо от того, работаете ли вы с данными или более сложными моделями.
Хотя упомянутые методы были применены к конкретному примеру с использованием моделей, адаптированных для понимания и использования коротких текстов, таких как твиты, идеи широко применимы к целому ряду проблем. Я надеюсь, это поможет вам.