Совместное тематическое моделирование (CTM) теперь находится в авангарде всех цифровых новостей.
Выше указаны темы, связанные с историей, опубликованной на ведущем новостном веб-сайте, но написанные автором / экспертом вручную. Такая система упоминания тем называется контентной фильтрацией.
Этот подход интуитивно понятен: если пользователь прочитает десять статей, помеченных словом «рост ВВП», он, вероятно, захочет будущие статьи с пометкой «Рост ВВП». И этот метод работает как со свежим контентом, так и со старым контентом, поскольку он полагается на данные, доступные на момент публикации.
Но метод, основанный на контенте, обеспечивает ограниченную степень новизны, поскольку он должен соответствовать функциям профиля и изделий. Совершенно совершенная фильтрация по содержанию не может предложить ничего «удивительного». Кроме того, для нового пользователя: когда информации недостаточно для создания надежного профиля пользователя, рекомендация не может быть предоставлена правильно.
Чтобы устранить недостатки предыдущего метода, пригодится совместное тематическое моделирование (CTM). CTM, содержание модели, он корректирует эту модель, просматривая сигналы от читателей, моделирует предпочтения читателей и дает рекомендации по сходству между предпочтениями и контентом.
Это были репортажи CNN, которые не были разделены на категории и были получены из Департамента компьютерных наук Нью-Йоркского университета.
Общий объем данных составлял около 92 000 историй.
Скрытое размещение Дирихле
После сбора данных они подверглись обширной предварительной обработке, которая была очень долгой и повторяющейся, но оказалась полезным методом. Метод включал лемматизацию глаголов и токенизацию распознавателей идентичности Name. Для этого использовались библиотеки Python, такие как NLTK и spaCy.
После каждой итерации обучения словарь стоп-слов пополнялся доступным английским словарём NLTK.
Поскольку для скрытого распределения Дирихле (LDA) требуется только частота слов, для модели использовался векторизатор Count (с некоторой настройкой гиперпараметров). Окончательный размер векторизатора составил 92579 (рассказов) X 420000 (терминов / слов).
Далее TruncatedSVD, пакет от Sklearn был использован для определения силы сингулярного значения, чтобы получить приблизительное количество тем. «Диаграмма изгиба» показывает крутой наклон (указывает на компоненты, которые предоставляют максимум информации) в районе 24–25 компонентов.
Модель LDA была обучена на экземпляре AWS EC2 с 16 ядрами с 64 ГБ ОЗУ, с начальными темами, как 25, но в результате в большинстве историй были раскрыты все темы.
Поэтому я протестировал несколько значений тем в LDA от 25 до 50, и, наконец, на 33 модель сошлась. Общее время обучения модели составило 6:15 часов на 16-ядерном инстансе EC2.
Каждый пузырь представляет собой тему, а тема состоит из нескольких слов, таких как 'команда', 'победа', 'игра', 'лига', 'клуб', 'кубок', 'мир', 'игра', 'футбол. ',' совпадение '.
Таким образом, эта тема может называться Футбол / Спорт.
Кроме того, размер пузыря / темы отображает количество рассказов, которые он представляет.
Когда у меня были темы, мне стало интересно проверить, как они расположены вместе в косинусоидальном угловом пространстве тем.
Косинусное угловое пространство тем
На приведенном выше рисунке представлена тематическая иллюстрация модели с использованием пакета pyLDavis от Gensim.
Все пространство разделено на пространство углов 360 косинус, где тема в том же угловом пространстве изображает сходство внутри них. Чтобы поместить это в контекст, я попытался разделить его на 4 тематические зоны, названные ‹Экономика, Политика, Безопасность, Террор, Международная политика, Выборы› в правом верхнем углу, прямо под ним - темы. ‹Погода, гендерные вопросы, права, аэропорты, наркотики, стихийные бедствия›, а затем в левом нижнем углу темы, такие как ‹Студенты, Путешествия, Жизнь, Здоровье› и темы в левом верхнем углу, например ‹Спорт, Религия, История›.
Неудивительно, что в рассказах / статьях, написанных на тему «Философия, книги» и т. Д., В космосе можно найти как «Кино, развлечения» и т. Д.). Но то, что показалось очень интересным, было ( см. ниже), что статьи, написанные на такие темы, как «Безопасность, TSA, Сноуден» разошлись почти на 180 градусов.
И темы спорта, гольфа и чемпионатов были ортогональны (90 градусов) обеим темам. Следовательно, как только данные о предпочтениях пользователя также доступны, похожие истории, понравившиеся другим пользователям, можно рекомендовать пользователям с такими же предпочтениями.
Теперь, чтобы понять, уловила ли модель семантические значения или нет, я случайным образом выбрал одну из тем «Здоровье / Медицина» и нанес на график все слова в документах, относящиеся к вышеупомянутому термину. Слова / термины были нанесены на график с оценкой частоты термина, измеренной по шкале F, и нанесены на логарифмическую шкалу частот.
Над рисунком был изображен визуал D3 с более чем 4 миллионами точек, отображаемых в HTML. Все время на обучение и построение графика заняло около 1:30 часа по каждой теме.
Синие точки представляют слова / термины, относящиеся к теме, а красные точки - слова, присутствующие в рассказах, которые не имеют отношения к теме. Теперь, чтобы проверить семантическую ценность модели, я проверил то же самое для случайного слова «разработать», присутствующего в области синих точек.
Истории в левой части - это те, в которых слово «развитие связано с темой « Здоровье », а в правой части - истории, которые не сопоставлены с В теме слово «развивать» используется в совершенно ином контексте.
Вывод: Скрытое распределение Дирихле лучше всего работает с большими наборами данных, содержащими большое количество терминов, но очень медленно сходится.
Следующая статья: Система рекомендаций для предложения читателям рассказов.