Как и компьютерное зрение (CV), обработка естественного языка (NLP) в настоящее время является двумя наиболее важными направлениями в области искусственного интеллекта. Как заставить методы машинного обучения понимать мысли, заложенные в человеческом языке, из слов? В этой статье Эммануэль Амайзен из Insight AI даст нам краткий обзор идей, которым мы должны следовать для большинства задач. Статья выбрана из InsightDataScience, автор: Emmanuel Ameisen, составлена сердцем машины.
Текстовые данные повсюду
Независимо от того, создаете ли вы компанию или работаете над запуском новой услуги, вы можете использовать текстовые данные для проверки, улучшения и расширения функциональности вашего продукта. Наука об извлечении и обучении текстовых данных является активной темой исследований в области обработки естественного языка (NLP).
НЛП охватывает обширную область, каждый день получая новые захватывающие результаты. Но после работы с сотнями компаний команда Insight обнаружила, что несколько важных приложений появляются особенно часто:
Определите различные сегменты пользователей/клиентов (например, предскажите отток, пожизненную ценность клиента, предпочтения продукта)
Точно выявляйте и извлекайте различные категории отзывов (положительные и отрицательные отзывы/мнения, упомянутые конкретные атрибуты, такие как размер/подгонка одежды и т. д.)
Классифицировать текст на основе намерения (например, общая помощь, срочные вопросы)
Несмотря на то, что в Интернете есть много документов и учебных пособий по НЛП, трудно найти руководства и советы по эффективному изучению этих проблем с нуля.
Эта статья поможет вам
Объединив наш опыт руководства сотнями проектных команд каждый год и советы ведущих команд в США, мы завершили эту статью, в которой объясняется, как использовать решения машинного обучения для решения вышеуказанных проблем НЛП. Мы начнем с самых простых методов, а затем перейдем к более тонким схемам, таким как разработка признаков, векторы слов и глубокое обучение.
Прочитав эту статью, вы будете знать, как:
Сбор, подготовка и проверка данных
Создавайте простые модели и при необходимости переходите к глубокому обучению
Интерпретировать и понимать модели, чтобы обеспечить захват информации, а не шума
В этой статье мы дадим вам пошаговое руководство; его также можно использовать в качестве общего обзора для обеспечения эффективного стандартного подхода.
Этот пост сопровождается интерактивной записной книжкой, в которой демонстрируются и применяются все техники. Вы можете запускать код по желанию и учиться синхронно:GitHub.com/сотый блок…
Шаг 1. Соберите данные
Пример источника данных
Каждая проблема машинного обучения начинается с данных, таких как электронные письма, сообщения или твиты (микроблоги). Общие источники текстовой информации включают:
Обзоры продуктов (от Amazon, Yelp и различных магазинов приложений)
Контент, размещенный пользователями (твиты, посты в Facebook, вопросы в StackOverflow)
Устранение неполадок (запросы клиентов, запросы в службу поддержки, стенограммы чатов)
Набор данных «Катастрофы в социальных сетях»
В этой статье мы будем использовать набор данных под названием «Катастрофы в социальных сетях», предоставленный CrowdFlower, где:
Редакторы просмотрели более 10 000 твитов с различными поисковыми запросами, такими как «пожар», «карантин» и «хаос», чтобы увидеть, относится ли твит к катастрофе (исключая те слова, которые означают шутки или комментарии к фильмам и т. д. без катастрофы).
Наша задача — определить, какие твиты посвящены катастрофическим событиям, и исключить неактуальные темы, например фильмы. Зачем? Одним из возможных приложений может быть уведомление сотрудников правоохранительных органов только в случае возникновения чрезвычайных ситуаций (а не при обсуждении недавнего фильма Адама Сэндлера).
В других местах этой статьи мы будем называть твиты о стихийных бедствиях «катастрофами», а другие твиты — «не относящимися к делу событиями».
Этикетка
Мы пометили данные, чтобы знать, к какой категории относится твит. Как поясняет Ричард Сочер, найти и пометить достаточно данных для обучения модели часто бывает быстрее, проще и дешевле, чем пытаться оптимизировать сложные неконтролируемые методы.
Шаг 2. Очистите данные
Первое правило, которому мы следуем: «ваша модель связана с вашими данными».
Один из важных навыков специалиста по данным — знать, что будет следующим шагом в работе: модель или данные. Хороший подход — просмотреть данные перед их очисткой. Чистый набор данных позволяет модели изучать значимые функции, а не подгонять к нерелевантному шуму.
Вот список очищенных данных: (подробнее см. в коде code (GitHub.com/сотый блок…)):
1. Удалите все ненужные символы, такие как любые не буквенно-цифровые символы.
2. Разделите текст на отдельные слова для токенизации парсинга
3. Удалите ненужные слова, такие как «@» или URL-адреса в твитах.
4. Преобразуйте все символы в нижний регистр, чтобы объединить такие слова, как «привет», «привет» и «привет».
5. Попробуйте сгруппировать слова с ошибками и повторяющиеся слова вместе (например, «круто»/«кьюл»/«крутоооо»)
6. Рассмотрите возможность восстановления части речи (объедините такие слова, как «am», «are» и «is», в общую форму «be»)
Выполнив эти шаги и проверив наличие ошибок, вы готовы обучать свою модель чистым, размеченным данным!
Шаг 3. Найдите хорошее представление данных
Входными данными для модели машинного обучения является числовое значение. В таких моделях, как обработка изображений, используется матрица для представления интенсивности каждого пикселя в каждом цветовом канале.
Если наш набор данных представляет собой серию предложений, то для того, чтобы алгоритм извлек функции из данных, нам нужно представить его в форме, которую алгоритм может распознать, например, в виде ряда чисел.
Горячее кодирование (модель мешка слов)
Распространенным способом представления текста является кодирование каждого символа отдельно как числа (например, ASCII). Если бы мы использовали эту простую форму непосредственно для классификатора, было бы возможно только изучить структуру слов с нуля на основе наших данных, что недостижимо для большинства наборов данных. Поэтому нам нужен более продвинутый метод.
Например, мы можем создать словарь для всех слов в наборе данных, где каждому слову соответствует свой номер (индекс). Затем это предложение может быть представлено в виде списка различных слов в словаре. В каждом индексе списка отметьте, сколько раз слово встречается в предложении. Это модель Bag of Words, представление, которое полностью игнорирует порядок слов в предложении. Следующее.
Встраивание визуальных слов
В примере «катастрофа в социальных сетях» словарный запас составляет около 20 000 слов, что означает, что каждое предложение будет представлено в виде вектора длиной 20 000. В векторе много нулей, потому что каждое предложение содержит лишь очень маленькое подмножество словаря.
Чтобы понять, захватывают ли вложения слов информацию, относящуюся к проблеме (например, говорится ли в твите о катастрофе), хороший способ визуализировать их — посмотреть, насколько хорошо разделены классы. Визуализация данных в 20 000 измерений невозможна из-за большого словарного запаса, поэтому для разделения данных на два измерения необходимы такие методы, как анализ главных компонентов (PCA). Как показано ниже.
Разделить на две категории кажется затруднительным, а уменьшить размерность, являющуюся особенностью встраивания, непросто. Чтобы увидеть, полезны ли функции модели мешка слов, мы можем обучить классификатор на их основе.
Шаг 4: Классификатор
Когда у вас возникает проблема, вы обычно начинаете с поиска инструмента для ее решения. Когда мы хотим классифицировать данные, мы обычно используем логистическую регрессию для общности и интерпретируемости. Обучение очень простое, а результаты поддаются интерпретации, потому что наиболее важные параметры легко извлечь из модели.
Мы разделяем данные на обучающий набор для подбора модели и тестовый набор для анализа соответствия невидимым данным. После обучения точность составила 75,4%. Еще смотреть мимо! Самая частая категория («неактуальные события») составила всего 57%. Но для наших нужд достаточно даже 75% точности, и ее нужно моделировать на основе понимания.
Шаг 5: Осмотр
Матрица путаницы
Первое, что нужно сделать, это узнать, какие ошибки есть в нашей модели и какие ошибки меньше всего ожидаются. В нашем случае ложные срабатывания относятся к классификации нерелевантных твитов как стихийных бедствий, а ложноотрицательные — к классификации твитов о стихийных бедствиях как нерелевантных событий. Если мы хотим расставить приоритеты для каждого возможного события, мы хотим уменьшить ложноотрицательные результаты. Если мы отдаем приоритет проблемам с ограниченными ресурсами, то мы отдаем приоритет сокращению ложных срабатываний и, таким образом, уменьшению ложных срабатываний. Мы можем визуализировать эту информацию с помощью матрицы путаницы, которая сравнивает то, что предсказывает наша модель, с истинной реальностью. В идеале (наши прогнозы точно соответствуют действительности) матрица представляет собой диагональную матрицу, идущую сверху слева направо и снизу.
Ложноотрицательные результаты нашего классификатора (относительно) выше, чем ложноположительные. Тем не менее, модель, скорее всего, ошибочно классифицирует стихийные бедствия как несвязанные события. Мы предпочитаем использовать этот классификатор, если стоимость правоприменения в ложноположительных ситуациях высока.
объяснить модель
Чтобы проверить модель и интерпретировать прогнозы модели, нам нужно увидеть, какие слова играют основную роль в прогнозах. Если данные смещены, классификатор будет делать точные прогнозы на выборочных данных, но эффект прогнозирования модели не идеален для практического применения. На изображении ниже мы дали важную лексику о стихийных бедствиях и несвязанных событиях. Мы можем извлекать и сравнивать коэффициенты прогнозирования в модели, поэтому поиск важных слов с помощью набора слов и логистической регрессии очень прост.
Наш классификатор правильно нашел некоторые шаблоны (Хиросима, Холокост), но, видимо, это было переобучением на бессмысленных данных (heyoo, x1392). Теперь наша модель мешка слов имеет дело с огромным словарным запасом, в котором все слова одинаковы. Но некоторые слова появляются очень часто и только добавляют шума к нашим предсказаниям. Далее давайте попробуем представить частоту слов, чтобы посмотреть, сможем ли мы получить больше сигнала из данных.
Шаг 6: Статистический словарь
TF-IDF
Чтобы модель больше фокусировалась на значимых словах, мы можем оценить нашу модель набора слов, используя TF-IDF (частота терминов — обратная частота документа). TF-IDF взвешивает частоту слов в наборе данных и уменьшает вес слов, которые являются высокочастотными, но только добавляют шум. Это наш недавно встроенный прогноз PCA.
Из приведенного выше рисунка видно, что разница данных между двумя цветами более очевидна. Это упрощает группировку классификаторов. Посмотрим, приведет ли это к лучшим результатам. Обучая логистическую регрессию с новыми вложениями, мы получаем точность 76,2%.
Только немного улучшилось. Значит, теперь наша модель может выбирать более важные слова? Если модель предсказывает эффективный обход «подводных камней» и получение лучших результатов, то можно сказать, что модель оптимизирована.
Выбранные слова кажутся более актуальными! Хотя метрики для нашего тестового набора несколько увеличились, словарь, используемый моделью, более критичен, поэтому мы говорим «взаимодействие с клиентами более комфортно и эффективно, когда работает вся система».
Шаг 7: Используйте семантику
Word2Vec
Наша последняя модель может выбирать слова с высоким уровнем сигнала. Но очень вероятно, что когда мы запускаем модель, в обучающем наборе нет слов. Поэтому, даже если во время обучения встречались очень похожие слова, предыдущая модель не могла точно классифицировать эти твиты.
Для решения этой задачи нам нужно уловить значение слова, то есть нужно понять, что «хорошее» и «позитивное» ближе, чем «абрикос» или «континент». Инструмент, используемый для определения значения слов, называется Word2Vec.
Используйте предварительно обученные слова
Word2Vec — это метод поиска последовательных вложений слов. Учитесь, читая большое количество текста и запоминая, какие слова, как правило, используются в схожих контекстах. После обучения на достаточном количестве данных каждое слово в словаре генерирует 300-мерный вектор слов со схожими значениями.
Авторы статьи «Эффективная оценка представлений слов в векторном пространстве» открыли исходный код модели, предварительно обученной на достаточно большом доступном корпусе, чтобы включить некоторые ее семантики в нашу модель. Предварительно обученные векторы можно найти в репозитории, связанном с этой статьей: https://github.com/hundredblocks/concrete_NLP_tutorial.
представление предложения
Быстрый способ получить вложение классификатора в предложение — усреднить оценку Word2Vec по всем словам в предложении. Это то же самое, что и предыдущая модель мешка слов, но на этот раз мы сохраняем некоторую лингвистическую информацию и просто игнорируем грамматику предложения.
Вот визуализация нового внедрения предыдущей техники:
Данные для этих двух цветов более четко разделены, и наше новое встраивание позволяет классификатору раньше находить разделение между двумя классами. После обучения той же модели в третий раз (логистическая регрессия) мы получили точность 77,7%, что на данный момент является лучшим результатом! Пришло время протестировать нашу модель.
Компромисс сложности/интерпретируемости
Наше вложение не представляет каждое слово в виде одномерного вектора, как в предыдущей модели, поэтому очень легко увидеть, какие слова больше всего связаны с нашим вектором. Хотя мы все еще можем использовать коэффициенты логистической регрессии, они связаны с 300 измерениями нашего встраивания, а не с индексом слова.
Его точность настолько низка, что отказ от любой интерпретируемости кажется грубым компромиссом. Но для более сложных моделей мы можем использовать поясняющие программы типа «черный ящик», такие как LIME, чтобы понять, как работает классификатор.
LIME
LIME можно найти на Github в виде пакета с открытым исходным кодом: https://github.com/marcotcr/lime.
Интерпретаторы черного ящика позволяют пользователям интерпретировать решения любого классификатора для конкретного примера, искажая входные данные и наблюдая за изменением прогнозов.
Давайте посмотрим на интерпретацию нескольких предложений в наборе данных.
Выберите правильное слово о стихийном бедствии и классифицируйте его как «релевантное».
Здесь влияние слова на классификатор кажется менее очевидным.
Однако у нас нет времени изучать тысячи примеров в наборе данных. Что мы собираемся сделать, так это запустить LIME на репрезентативной выборке тестовых примеров, чтобы увидеть, какие слова вносят наибольший вклад. Таким образом, мы можем оценить важные слова, такие как предыдущая модель, и проверить предсказания модели.
Высокая корреляция слов, которые извлекает модель, означает, что она может принимать более интерпретируемые решения. Это наиболее релевантные слова в предыдущей модели, поэтому мы предпочли включить их в нашу модель.
Шаг 8. Используйте сквозной подход
Мы ввели быстрые и эффективные методы для создания кратких вложений предложений. Но игнорируя порядок слов, мы пропускаем всю грамматическую информацию предложения. Если эти методы дают недостаточные результаты, мы можем использовать более сложные модели, которые вводят целые предложения и предсказывают метки без промежуточных представлений. Обычный подход заключается в использовании Word2Vec или чего-то подобного (например, GloVe или CoVe) для обработки предложения как последовательности векторов слов. Это то, что мы будем делать ниже.
Сверточные нейронные сети для классификации предложений обучаются очень быстро и идеально подходят в качестве систем глубокого обучения начального уровня. Хотя сверточные нейронные сети (CNN) в основном известны своим использованием в обработке изображений, они также дают очень хорошие результаты для задач, связанных с текстом, и, как правило, лучше, чем большинство сложных методов НЛП, таких как LSTM и архитектуры кодировщика/декодера. . Эта модель учитывает порядок слов и узнает, какие последовательности слов могут предсказать целевой класс и другую ценную информацию, которая может различать «Алекс ест растения» и «Растения едят Алекс».
Обучение этой модели требует не больше усилий, чем предыдущая модель, и работает лучше с точностью 79,5%! Подробности смотрите в коде:GitHub.com/сотый блок…
Как и в случае с моделью выше, наш следующий шаг — использовать этот метод для изучения и интерпретации прогнозов, чтобы убедиться, что это лучшая модель для пользователя. К настоящему времени вы должны быть знакомы с такого рода проблемами.
Эпилог
Вот краткий обзор методов, которые мы успешно использовали:
Начните с простой и быстрой модели
объяснить свои предсказания
понять его тип ошибки
Основываясь на вышеизложенных знаниях, определите следующий шаг – обработка данных или поиск более сложной модели
Эти методы используются только для конкретных примеров — понимания и использования коротких текстов (твитов) с соответствующими моделями, но идея применима к множеству задач. Надеюсь, статья была вам полезна, комментарии и вопросы приветствуются!