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

Скрытое распределение Дирихле (LDA) - это генеративная вероятностная модель для набора документов, которые представлены в виде смеси скрытых тем, где каждая тема характеризуется распределением по словам.

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

Примеры использования LDA:

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

Идея алгоритма

Технически модель предполагает, что темы указываются до создания каких-либо данных. LDA представляет документы как смесь тем, которые с определенной вероятностью выплевывают слова.

Например, предположим, что есть тема «спорт», которая представлена ​​множеством слов, относящихся к спорту, и слово «футбол» является наиболее подходящим словом для описания этой темы (используется 20%). А теперь давайте вернемся на некоторое время в направлении, противоположном алгоритму. Представьте, что вы пытаетесь написать статью, которая должна быть на 30% о «еде» и 70% о «спорте». Чтобы сгенерировать каждое слово в документе, нам необходимо: -

  1. Сначала выберите тему (в соответствии с полиномиальным распределением документа, который вы выбрали выше; например, вы можете выбрать тему еды с вероятностью 3/10, а спортивную тему - с вероятностью 7/10)
  2. Используйте тему для создания самого слова (в соответствии с полиномиальным распределением темы). Например, если мы выберем тему «еда», мы можем сгенерировать слово «молоко» с вероятностью 30%, «бананы» с вероятностью 15% и так далее.

Используя такую ​​генеративную модель для коллекции документов, LDA пытается вернуться к документам, чтобы найти набор тем, которые, вероятно, породили коллекцию.

Возьмем небольшой пример

Примеры документов (каждая строка представляет документ):

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

Предположим, мы выбрали k=2 (количество тем 2) для нашей модели:

  • Тема A: 30% брокколи, 15% бананов, 10% завтрак, 10% жевание,… (мы могли бы интерпретировать тему A как о еде)
  • Тема B: 20% шиншилл, 20% котят, 20% милых, 15% хомяков, ……… (мы могли бы интерпретировать тему B как о милых животных)

Теперь некоторый новый документ может быть помечен указанными выше темами с использованием наблюдений, сделанных моделью LDA.

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

Здесь мы можем сказать, что предложение 1 - это 100% тема A, а предложение 2 - это 40% тема B и 60% тема A.

Обзор того, как работает алгоритм

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

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

  1. Мы рассмотрим каждый документ (d).
  2. Затем для каждого слова (w) в документе мы вычислим следующее: -
  • X = p (тема | документ) = доля слов в документе d, которые в настоящее время присвоены теме t.
  • Y = p (слово w | тема t) = доля заданий теме t по всем документам, которые происходят из этого слова w. (Одно и то же слово может быть в нескольких документах, следовательно, оно распространяется на все документы)

3. X * Y - это, по сути, вероятность того, что тема `t` сгенерировала слово` w`, поэтому имеет смысл выполнить повторную выборку темы текущего слова с этой вероятностью.

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

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

Два важных параметра алгоритма:

  1. Концентрация тем / бета
  2. Концентрация документов / Альфа

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

Если, с другой стороны, распределение асимметрично, высокое значение альфа означает, что конкретное тематическое распределение (в зависимости от базовой меры) более вероятно для каждого документа. Точно так же высокие бета-значения означают, что каждая тема с большей вероятностью будет содержать определенное словосочетание, определенное базовой мерой.

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

Пришло время взглянуть на некоторые примеры результатов

Я использовал набор данных UCI Health News Twitter. Код написан с использованием Apache Spark, легко масштабируемого движка обработки в памяти. Полный код доступен на Github.

  1. N-грамм = 3, k = 10, минимальное количество ключевых слов в документе = 1

2. N-грамм = 3, k = 10, минимальное количество ключевых слов в документе = 2

3. N-грамм = 3, k = 16, минимальное количество ключевых слов в документе = 2.

Заключение

Анализировать результаты очень сложно. Темы просто выплевывают какие-то случайные слова. Это один из недостатков алгоритма, который нам предстоит пройти через множество проб и ошибок. Трудно сделать выводы из результатов. Нам понадобится какой-нибудь эксперт в предметной области для обратной связи, чтобы решить, подходят ли результаты для конкретного варианта использования или нет. Мы можем использовать показатель расхождение Кульбака – Лейблера, чтобы определить значение k (количество тем на выходе).

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

использованная литература

  1. Введение в LDA Эдвина Чена