Введение и мотивация

Прежде всего, я большой поклонник JRE - это, наверное, единственный непрофессиональный подкаст, который я регулярно слушаю.

Во-вторых, сделка, которую он заключил со Spotify об отказе от Apple Podcasts и YouTube (стоимостью 100 миллионов долларов!), Стала для Spotify громким заявлением об их намерениях в отношении подкастов.

… А также огромные изменения для его фанатов. Я лично «смотрю» его подкаст исключительно на YouTube, так что это сильно помешает мне.

Интересно отметить, что всего пару дней назад (я уже начал писать это в то время) Spotify объявил, что запускает видеоподкасты, и они начинают с некоторых создателей, которые ранее не включали видео в своем подкасте. Может, они сделали это из-за фанатов JRE?

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

Работая менеджером по продукту в приложениях для iOS и Android, я знаю, что Apple и Google не предоставляют никакого NLP-анализа полученных вами отзывов, поэтому вам нужно вручную читать их каждый день, чтобы хорошо понимать мнения, чувства, комментарии. и вопросы, которые публикуют ваши пользователи.

Таким образом, у меня есть мотивация изменить это, и я хочу помочь Джо понять, что его поклонники публикуют в Apple Podcasts!

1. Инструменты и процесс

a. Очистка данных: | Б. Очистка и предварительная обработка данных:

Так выглядят обзоры в Apple Podcasts

Чтобы понять, что и как я сделал для соскабливания, очистки и предварительной обработки данных, прочтите мой старый пост: ASOS: ИСПОЛЬЗОВАНИЕ МАШИННОГО ОБУЧЕНИЯ ДЛЯ ПОЛУЧЕНИЯ ДЕЙСТВУЮЩЕЙ ИНФОРМАЦИИ О ПРОДУКТЕ ИЗ ОТЗЫВОВ APP STORE ».

Я использую тот же уже встроенный скребок, но я добавил возможность очищать подкасты Apple. Я также отправил сообщение создателю парсера и предоставил ему код, который заставит парсер работать с Apple Podcasts, и он ответил, что собирается включить его - Ура!

Суммируя:

  • Удаление пустых обзоров (потому что в Apple Podcasts вы можете просто присвоить звездный рейтинг, а не писать текстовый комментарий)
  • Удалены нежелательные символы (@, #, $,%, &,.)
  • Удалены стоп-слова («а», «и», «но», «или» и т. Д.).
  • Сделал весь текст строчными буквами
  • Лемматизация (ходьба - ›гулять, гулять -› гулять и т. Д.)
  • Удалены обзоры короче 30 символов (не так много информации о обзорах с такой же длиной, как «отлично»).

В. Анализ данных

Как мы видим, у Джо Рогана в подавляющем большинстве положительные отзывы об Apple Podcasts - неудивительно, учитывая его огромную базу поклонников!

Ниже мы видим 20 самых популярных слов в его обзорах:

Вот как они выглядят как «мешок слов»:

Мне стало любопытно, почему так много говорится об изнасиловании, и, видимо, эта статья объясняет это:

2. Использование набора средств естественного языка (NLKT) и SentimentIntensityAnalyzer ()

Двигаясь вперед, я хотел сосредоточиться только на положительных отзывах, чтобы мы могли видеть, что нравится аудитории, поэтому я использую уже обученный SentimentIntensityAnalyzer (), который анализирует текст и возвращает значения от -1 до +1, чтобы показать, насколько отрицательно / положительно обзор есть.

Ниже приведены 20 наиболее часто используемых слов в положительных отзывах, представленных в виде столбчатой ​​диаграммы и «мешка слов».

Используя набор слов, мы можем увидеть, что люди бросают 5-звездочный обзор подкастов Apple:

  • Комедия, интересные гости, разговор о философии, разноплановые гости и разные мнения

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

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

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

Я собираюсь использовать Скрытое распределение Дирихле по следующим причинам:

  • Легко реализовать на Python
  • Вероятностная модель с интерпретируемыми темами и может работать с любым набором данных
  • Он хорошо работает с небольшими объемами данных (такими как короткие обзоры на Apple Podcasts).

Недостатки:

  • Нет объективного способа выбора гиперпараметров.
  • Это не самый быстрый подход к тематическому моделированию.

Базовый LDA

Запуск базового LDA дает нам следующие 5 тем, по 10 основных слов на тему (поясняется ниже):

[(0,
  '0.058*"bad" + 0.040*"conspiracy" + 0.029*"theory" + 0.026*"star" + '
  '0.022*"stupid" + 0.020*"annoying" + 0.020*"racist" + 0.018*"drug" + '
  '0.015*"terrible" + 0.012*"idiot"'),
 (1,
  '0.020*"open" + 0.016*"country" + 0.014*"death" + 0.014*"sad" + 0.013*"jre" '
  '+ 0.012*"minded" + 0.012*"medium" + 0.012*"dangerous" + 0.012*"self" + 0.011*"complete"'),
 (2,
  '0.048*"rape" + 0.026*"dumb" + 0.022*"well" + 0.017*"human" + 0.016*"fear" + '
  '0.014*"ignorant" + 0.013*"next" + 0.013*"crap" + 0.012*"factor" + '0.011*"white"'),
 (3,
  '0.036*"man" + 0.017*"last" + 0.016*"big" + 0.014*"platform" + 0.013*"fan" + '
  '0.013*"nonsense" + 0.012*"old" + 0.012*"woman" + 0.012*"hard" + '
  '0.012*"poor"'),
 (4,
  '0.031*"people" + 0.027*"guest" + 0.024*"time" + 0.018*"show" + '
  '0.017*"episode" + 0.016*"good" + 0.015*"thing" + 0.013*"guy" + 0.013*"day"+ 0.012*"life"')]

И дает нам следующее недоумение и последовательность (поясняется ниже):

Perplexity:  -7.430625960051932

Coherence Score:  0.36507586388016394

Объяснение результатов:

* Цифры * перед словами показывают вес каждого слова в каждой теме. Так что на самом деле каждая тема содержит все слова во всех обзорах, однако они имеют разный вес.

Так, например, тема 1 имеет вес 0,58 для слова «плохо», слово «плохо» также присутствует в теме 5, но с весом 0,0001.

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

Например, в теме 1 - ›« 0,058 * «плохо» и 0,012 * «идиот». Плохое более чем в 4 раза важнее для темы, чем идиотское.

Что такое недоумение?

Он показывает, насколько модель удивлена ​​новыми данными, которые она не видела раньше, и измеряется как нормализованная логарифмическая вероятность длительного набора тестов. * 1

Однако оптимизация для Perplexity обычно не приводит к понятным для человека результатам.

Что такое когерентность?

Из книги Интеллектуальная инженерия данных и автоматизированное обучение:

«Слаженность темы измеряет оценку отдельной темы путем измерения степени семантического сходства между высоко оцененными словами в теме».

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

Итак, в нашем случае мы хотим оптимизировать для Coherence.

4. Запуск 540 различных версий LDA, чтобы получить лучший результат Coherence

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

  1. Количество тем (K): от 2 до 10.
  2. Альфа гиперпараметра Дирихле: (плотность документа): 0,01, 1, 0,3
  3. Бета гиперпараметра Дирихле: (плотность слов): 0,01, 1, 0,3

А затем я собираюсь оценить все модели на основе согласованности и выбрать лучшую.

Использование сценария, который сделает все за меня и сохранит его в файле .csv - моему Macbook Pro 2017 года потребовалось около 5 часов, чтобы запустить все 540 вариантов LDA.

Фильтрация и сортировка данных, чтобы увидеть наиболее эффективный LDA и его параметры для всех номеров # тем (от 2 до 10):

Наивысшая согласованность обнаружена по 2 темам, за которыми следуют 7, а затем 4 и 8. Показатели согласованности варьируются от 0,54 до 0,57, что является значительным улучшением по сравнению с исходным уровнем с 0,36.

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

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

На основе этого я запускаю финальную модель, состоящую из 3-х тем со следующими параметрами:

  1. Количество тем: 3
  2. Альфа гиперпараметра Дирихле: асимметричный
  3. Бета гиперпараметра Дирихле: 0,1
Topic 1:
  '0.032*"guest" + 0.025*"good" + 0.020*"great" + 0.019*"time" + 0.019*"show" + 0.016*"episode" + 0.015*"interesting" + 0.015*"life" + 0.014*"day" + '0.013*"topic"'),
Topic 2:
  '0.025*"people" + 0.012*"opinion" + 0.009*"open" + 0.009*"view" + 
  '0.009*"right" + 0.008*"bad" + 0.007*"point" + 0.007*"question" + 
  '0.006*"side" + 0.006*"minded"')
Topic 3:
'0.010*"woman" + 0.009*"eye" + 0.005*"boy" + 0.005*"fear" + 0.005*"money" + '0.004*"deal" + 0.004*"hater" + 0.004*"industry" + 0.004*"air" + '0.004*"mouth"')]

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

Тема 1: «Мне это нравится, но…»

'0.032*"guest" + 0.025*"good" + 0.020*"great" + 0.019*"time" + '0.019*"show" + 0.016*"episode" + 0.015*"interesting" + 0.015*"life" + 0.014*"day" + '0.013*"topic"'),

Три лучших отзыва по этой теме

  1. Отзыв №1 → 98,8%

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

2. Отзыв №2 → 98,4%

Больше никогда Питер Шифф, что парень так раздражает и не умеет разговаривать. Он просто выплевывал тирады и не оставлял разговоров с Джо. Даже не рассматривал полностью идеи Джо и не рассматривал их полностью.

3. Отзыв № 3 → 98,3%

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

Тема 2: «Самые большие поклонники»

'0.025*"people" + 0.012*"opinion" + 0.009*"open" + 0.009*"view" + 
'0.009*"right" + 0.008*"bad" + 0.007*"point" + 0.007*"question" + 
'0.006*"side" + 0.006*"minded"')

Три лучших отзыва по этой теме

  1. Отзыв №1 → 97,6%

Самый развлекательный, мотивирующий и чертовски интересный подкаст КОГДА-ЛИБО !!! Спасибо, мистер Роган, вы вдохновляете !!!!!

2. Отзыв №2 → 97,3%

Сохраняйте реальность и ведите интеллектуальные беседы! Надо почаще надевать Джоуи Диаза, ты и он вместе - ВЕСЕЛЫЕ!

3. Отзыв № 3 → 96,9%

Обожаю шоу. Ненавижу повторение! Ваша уверенность в том, что можно преуменьшить значение вируса, вызывает беспокойство. Разве в настоящем слове нормальность не является нормальным явлением?

Тема 3: «Все остальное?»

'0.010*"woman" + 0.009*"eye" + 0.005*"boy" + 0.005*"fear" + 0.005*"money" + '0.004*"deal" + 0.004*"hater" + 0.004*"industry" + 0.004*"air" + '0.004*"mouth"')]

Три лучших отзыва по этой теме

  1. Отзыв №1 → 90,1%

Охватывает все, от древних пришельцев до нападения медведя на Берта. Безусловно, мое любимое шоу. Я мог бы больше поговорить о ММА и БДЖ, Эдди великолепен. Еще Берт, Стэнхоуп, Ари, Джоуи и отряд смерти.

2. Отзыв №2 → 90,01%

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

3. Отзыв № 3 → 90,01%

У Джо лучшие гости ... Джон Хеффрон, Джои Диаз, Ари Шафер, Эдди Браво. К тому же ему все равно, что думают другие. Он настоящий человек и уважает всех и каждого, если они открыты. Отличный подкаст, всегда заставляет меня смеяться, а иногда действительно заставляет позже оценивать принятые мною решения. Вернее, почему я решил принять эти решения.

Insights

  1. Быстрое предоставление полезной информации

Во-первых, невозможно прочитать 30–40 тысяч отзывов, особенно регулярно.

Из-за этого графики:

  • 20 самых употребительных слов из всех обзоров
  • 20 самых употребительных слов из положительных / отрицательных отзывов
  • «Мешок слов» для всех / положительных / отрицательных отзывов

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

2. Понимание основных тем (проблемы, комментарии, вопросы и т. Д.) Вашей аудитории.

Представьте, что вы публикуете изображение в Instagram - оно становится вирусным, и 30 000 человек оставляют комментарии под вашей фотографией. Если это происходит впервые, вы можете просмотреть все комментарии, однако теперь представьте, что это происходит с каждым размещенным вами изображением. Вы смотрите на фотографию, которую вы разместили на воздушном шаре во время отпуска в Кападокии, и задаетесь вопросом - комментируют ли эти люди мою внешность? они комментируют воздушный шар…. или, может быть, они рассказывают, как они попали в Кападокию и что у них было?

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

Более того, каждому обзору присваивается процент от того, к какой теме он относится.

Пример с обзором №2330

lda_model[corpus[2330]]

Из[]:

[(0, 0.869107), (1, 0.07557727), (2, 0.055315714)]

Этот обзор составляет ~ 87% по теме 1, ~ 7,5% по теме 2 и ~ 5,5% по теме 3.

Вы можете легко сортировать и читать обзоры по темам.

В нашем случае, предположим, что Джо хочет читать обзоры на тему «Мне нравится, НО» (которая, похоже, является Темой 1 и определена компьютером неконтролируемым образом).

Теперь он может очень легко фильтровать и читать обзоры на ежемесячной / еженедельной / ежедневной основе, сделанные поклонниками подкаста, НО есть некоторые конструктивные отзывы.
То, что он не мог бы сделать раньше.

Идти дальше

Области, требующие улучшения

  1. Оглядываясь назад, я думаю, что выбор трех тем был не лучшим решением, поскольку тема 3 кажется слишком широкой, чтобы дать реальное понимание. В лучшем случае я бы запустил все заново и поискал идеи по 4–5–6–7 темам.
  2. Мне было бы любопытно узнать, каковы настроения по каждой из тем. Какая-нибудь из тем более положительная или отрицательная?
  3. Кроме того, я вообще не использовал поле Заголовок, которое предоставляет очень подробные данные - обычно это краткое изложение проблемы, поэтому потенциально оно может дать даже лучшее понимание, чем Обзор . Другой вариант - объединить поля Заголовок + Отзыв, поскольку оба поля должны описывать одну и ту же проблему, поэтому мы потенциально можем получить больше данных по той же проблеме. Конечно, дополнительные слова в заголовке также могут сбивать с толку.
  4. Я также мог бы попробовать использовать методы тематического моделирования, такие как LSA, PLSA и lda2Vec, и сравнить результаты и, возможно, получить еще больше информации.
  5. Если бы у меня были «отраслевые знания», я бы, вероятно, захотел запустить контролируемую модель для определенных вещей в данных. Например, «найти отзывы, которые комментируют гостей». (Но в этом сила обучения без учителя, я мог бы очень легко запустить это на обзорах ядерных реакторов и все же получить представление!)

Конец заметок

На написание статьи ASOS у меня ушло около 20 часов, и для этой статьи я повторно использовал почти весь код, который у меня был, и потратил еще 20–30 часов на обновление. Это может показаться многообещающим, но действительно здорово в таких проектах то, что, как только вы все заработаете, продолжать получать те же идеи в будущем очень легко. Это почти просто запуск одного файла Python, который предоставит все данные, указанные выше.

_____

Если вам понравился этот пост, нажмите и удерживайте кнопку 👏 в течение 10 секунд, чтобы показать свою поддержку!