Тематическое моделирование вопросов Quora с LDA и NMF

Скрытое распределение Дирихле, неотрицательная матричная факторизация

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

  • Описание проблемы

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

  • Выявление проблем

Это проблема неконтролируемого обучения, в которой мы находим различные темы, представленные в вопросах Quora.

  • Цели

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

  • Подходы

Примените модели LDA и NMF к набору данных вопросов Quora и определите количество тем и тему каждой темы.

Я загрузил на свой Github небольшой набор данных, не стесняйтесь его использовать.

Это пример темы и того, как она выглядит на сайте Quora.

Предварительная обработка данных

Вот как выглядят вопросы до предварительной обработки текста:

Что мы будем делать во время предварительной обработки текста:

  • Строчные буквы
  • Удаление игнорируемых слов, скобок, знаков препинания и цифр
  • Лемматизация с использованием spaCy с удалением «-PRON-».

Чего мы не собираемся делать во время предварительной обработки текста:

  • Стемминг

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

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

EDA

Узнайте, какова общая продолжительность вопросов.

О чем были вопросы.

Униграммы

Биграммы

Триграммы

Наблюдения:

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

Тематическое моделирование

  • Для моделирования темы нам нужны следующие исходные данные: матрица «документ-термин». Порядок слов не имеет значения. Итак, мы называем это «мешком слов».
  • Мы можем использовать библиотеку scikit-learn или Gensim, методика называется Скрытое распределение Дирихле, сокращенно от LDA.
  • Результатом является количество тем по всем вопросам в данных и тема каждой темы.

Давайте углубимся в то, что такое матрица "документ-термин". Допустим, у нас есть всего три вопроса:

1). Как футболисты остаются в безопасности?

2). Какую футбольную команду НФЛ ненавидят больше всего?

3). Кто величайший политический лидер?

Матрица «документ-термин» для трех вопросов:

Каждая строка - это вопрос (или документ), каждый столбец - это термин (или слово), мы помечаем «0», если этот документ не содержит этого термина, «1», если этот документ содержит этот термин один раз, «2», если он документ содержит этот термин дважды и так далее.

Скрытое размещение Дирихле

Скрытый означает скрытый, Дирихле - это тип распределения вероятностей. Скрытое распределение Дирихле означает, что мы пытаемся найти все распределения вероятностей, а они скрыты.

Продолжим наши примеры. У нас есть четыре вопроса. Как люди, мы точно знаем, о чем идет речь.

1-й вопрос о футболе, 3-й вопрос о политике, 4-й вопрос о политике и футболе. Когда мы подгоним эти 4 вопроса к LDA, он вернет нам что-то вроде этого:

1-й вопрос - это 100% темы A, 3-й вопрос - 100% темы B, а последний вопрос разделен на тему A и тему B. Это наша работа как людей - интерпретировать их.

Слово «футбол» имеет наивысший вес в теме А, за ним следует «НФЛ», за которым следует «игрок». Таким образом, мы можем сделать вывод, что эта тема посвящена спорту.

Слово «политика» имеет наивысший вес в теме B, за ним следует «лидер», а за ним - «мир». Таким образом, мы можем сделать вывод, что эта тема посвящена политике. Как показано ниже:

  • Тема A: 40% футбол, 30% НФЛ, 10% игроки… Спорт
  • Тема Б: 30% политиков, 20% лидеров, 10% мировых ... Политика

Затем мы возвращаемся к нашим первоначальным вопросам, вот темы!

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

Технически говоря:

  • Вопрос - это вероятностное распределение тем, а каждая тема - вероятностное распределение слов.
  • Что делает LDA, так это то, что когда вы задаете ему все эти вопросы, он изо всех сил пытается найти наилучшее сочетание тем и наилучшее сочетание слов.

Как работает LDA:

  1. Мы хотим, чтобы LDA изучило сочетание тем в каждом вопросе и сочетание слов в каждой теме.
  2. Выберите количество тем, которые, по нашему мнению, есть во всем наборе данных вопросов (пример: num_topics = 2).
  3. Случайным образом присвойте каждое слово в каждом вопросе одной из двух тем (пример: слово «футбол» в приведенном выше вопросе случайным образом присваивается теме B, которая является политической темой)
  4. Просмотрите каждое слово и его тематическое назначение в каждом вопросе. Посмотрите на 1) как часто тема встречается в вопросе и 2) как часто слово встречается в теме в целом. Основываясь на этой информации, назначьте слово новой теме (пример: похоже, что слово «футбол» не часто встречается в теме B, поэтому слово «футбол», вероятно, следует назначить теме A).
  5. Выполните несколько итераций этого. В конце концов, темы начнут обретать смысл, и мы сможем их интерпретировать и дать им темы.

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

LDA ответило на 983 801 вопрос Quora

  • Нам передали 983 801 вопрос с Quora.
  • Мы хотим выявить скрытые или скрытые темы среди всего набора вопросов (например, технологии, политика, наука, спорт) и попытаться классифицировать их по тематике.
  • Выберите количество тем (больше тем - более мелкое зерно)

Например, спорт, когда у нас много тем, у нас могут быть футбол (тема1), теннис (тема2), хоккей (тема3) и так далее. Если мы сократим количество тем, в какой-то момент эти связанные со спортом темы сами собой рухнут и станут одной темой. Как и в случае любого обучения без учителя, здесь нет показателей лучше, чем этот. В основном мы должны выбирать для нашего собственного варианта использования.

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

LDA с Gensim

Сначала я попробовал Gensim с 20 темами и ...

Хорошая тематическая модель будет иметь небольшое перекрытие или совсем не будет совпадать, в данном случае это определенно не так. Давай попробуем Scikit-Learn.

LDA с Scikit-Learn

Я сохранил 20 самых частых слов из каждой темы, найденной LDA. Здесь мы показываем неполную таблицу:

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

Ниже приведена неполная таблица по назначению ключевых слов темы.

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

Из приведенной выше таблицы вопросы 2, 3 и 8 были отнесены к теме 18. Давайте проверим, имеют ли они смысл.

У нас есть эти 3 вопроса слева, и они были назначены теме справа, а также каждому ключевому слову в этой теме.

Я полностью согласен с заданием для 1-го и 2-го вопроса, не уверен насчет 3-го вопроса, может быть, из-за слов «скромно одеваться» по сравнению с «характером»?

Делать предсказания

Точнее, наверное, стоит сказать, как новый вопрос будет отнесен к одной из этих 20 тем.

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

Первый тестовый вопрос был «Какие самые важные уроки вы усвоили в своей жизни и когда вы их усвоили

Наша модель LDA смогла найти сочетание тем в этом новом вопросе и сочетание слов в каждой теме. Этот новый вопрос был отнесен к теме с основными ключевыми словами, такими как «работа, учеба, учеба» и т. Д., А тема этой темы - « Работа / Обучение / Повышение квалификации ». Я согласен.

Второй вопрос теста звучал так: «Подобно тому, как Ларри Пейдж и Сергей Брин сместили своих сотрудников с помощью более совершенной поисковой системы, насколько вероятно, что два аспиранта компьютерных наук создадут поисковую систему, которая вытеснит Google? Насколько уязвим Google к этой возможности? »

Таким же образом этот новый вопрос был отнесен к теме, в которой в качестве ключевых слов используются ключевые слова «страна, студент, компьютер, наука» и т. Д. В этом новом вопросе слова «компьютер» и «проект» имеют наибольшее значение. И тема темы - «Студент / Интернет / Компьютеры / Наука / Исследования». Я тоже согласен.

Неотрицательная матричная факторизация (NMF)

  • Семейство алгоритмов линейной алгебры для определения скрытой структуры данных, представленных в виде неотрицательной матрицы.
  • NMF может применяться для тематического моделирования, где входными данными является матрица терминов и документов, обычно нормализованная по TF-IDF.
  • Вход: матрица терминологического документа, количество тем.
  • Результат: Две неотрицательные матрицы исходных n слов по k темам и тех же k тем по m исходным документам.
  • В основном мы собираемся использовать линейную алгебру для тематического моделирования.

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

Давайте снова воспользуемся нашим примером из футбола и политики:

Слева у нас есть 3 вопроса, справа у нас есть матрица терминов-документов для этих 3 вопросов. Выбираем k = 2 темы.

После декомпозиции мы получили две неотрицательные матрицы исходных n слов по k темам и тех же k тем по m исходным документам.

Часть предварительной обработки текста была похожа на модель LDA, и я оставил существительные только для модели NMF, просто чтобы посмотреть, есть ли разница.

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

Например, для одной темы, глядя на все ключевые слова в каждой теме, я не могу найти никакой связи между собой, кроме того, что все они начинаются с «ph». Итак, я назначил тему «Word start from ph» в качестве темы этой темы.

Делайте прогнозы

Используя те же вопросы, мы увидим, как модель NMF собирается распределить его по одной из этих 20 тем.

Вопрос 1: «Какие самые важные уроки вы усвоили в своей жизни и когда вы их усвоили?»

Вопрос 1 был отнесен к теме, в которой основными ключевыми словами являются «жизнь, изменение, момент, значение, опыт» и т. Д., А тема этой темы - « Жизнь / Опыт / Любовь / Цель ». Я согласен!

Вопрос 2: «Подобно тому, как Ларри Пейдж и Сергей Брин сместили своих сотрудников с помощью более совершенной поисковой системы, насколько вероятно, что два аспиранта компьютерных наук создадут поисковую систему, которая вытеснит Google? Насколько уязвима Google для такой возможности? »

Вопрос 2 был отнесен к теме, у которой есть основные ключевые слова, такие как «школа, студент, колледж, университет, инженерное дело» и т. Д., И тема этой темы - « Школа / Студент / Колледж / Университет ». Я не могу найти лучшего способа.

Блокнот Jupyter для этого поста можно найти здесь и здесь. Наслаждайтесь остатком недели.

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



Https://learning.oreilly.com/videos/oreilly-strata-data/9781492050681/9781492050681-video328137

Https://scikit-learn.org/stable/auto_examples/applications/plot_topics_extraction_with_nmf_lda.html

Http://www.cs.columbia.edu/~blei/papers/Blei2012.pdf