Стабильность темы в моделях темы

23

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

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

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

  1. Темы, раскрытые при моделировании тем, иногда трудно интерпретировать
  2. Когда я повторно запускаю свои тематические модели с другим случайным начальным числом, темы, кажется, резко меняются

Вопрос 2, в частности, касается меня. Поэтому у меня есть два связанных вопроса:

  1. Могу ли я что-нибудь сделать в процедуре LDA, чтобы оптимизировать процедуру подбора модели для интерпретации и стабильности? Лично меня не очень заботит поиск модели с наименьшим недоумением и / или наилучшим соответствием модели - я в основном хочу использовать эту процедуру, чтобы помочь мне понять и охарактеризовать то, что участники этого исследования написали в своих эссе. Однако я, конечно, не хочу, чтобы мои результаты были артефактом случайного семени!
  2. В связи с вышеупомянутым вопросом, есть ли какие-либо стандарты для того, сколько данных вам нужно для LDA? В большинстве работ, которые я видел, которые использовали этот метод, анализируются крупные корпорации (например, архив всех научных работ за последние 20 лет), но, поскольку я использую экспериментальные данные, мой объем документов намного меньше.

Я разместил здесь данные эссе для всех, кто хочет испачкать свои руки, и я вставил код R, который я использую ниже.

require(tm)
require(topicmodels)

# Create a corpus from the essay 
c <- Corpus(DataframeSource(essays))
inspect(c)

# Remove punctuation and put the words in lower case
c <- tm_map(c, removePunctuation)
c <- tm_map(c, tolower)

# Create a DocumentTermMatrix.  The stopwords are the LIWC function word categories
# I have a copy of the LIWC dictionary, but if you want to do a similar analysis,
# use the default stop words in tm
dtm <- DocumentTermMatrix(c, control = list(stopwords = 
  c(dict$funct, dict$pronoun, dict$ppron, dict$i, dict$we, dict$you, dict$shehe, 
    dict$they, dict$inpers, dict$article, dict$aux)))

# Term frequency inverse-document frequency to select the desired words
term_tfidf <- tapply(dtm$v/rowSums(as.matrix(dtm))[dtm$i], dtm$j, mean) * log2(nDocs(dtm)/colSums(as.matrix(dtm)))
summary(term_tfidf)

dtm <- dtm[, term_tfidf >= 0.04]

lda <- LDA(dtm, k = 5, seed = 532)
perplexity(lda)
(terms <- terms(lda, 10))
(topics <- topics(lda))

Редактировать:

Я попытался изменить, nstartкак предложено Flounderer в комментариях. К сожалению, как показано ниже, даже установка nstart1000 приводит к темам, которые довольно сильно варьируются от случайного семени до случайного семени. Еще раз подчеркну: единственное, что я изменяю в оценке двух моделей ниже, - это случайное начальное число, используемое для начала оценки модели, и, тем не менее, в этих двух прогонах темы, похоже, совсем не согласуются.

lda <- LDA(dtm, k = 5, seed = 535, control = list(nstart = 1000))
(terms <- terms(lda, 10))

      Topic 1         Topic 2      Topic 3      Topic 4       Topic 5      
 [1,] "international" "ethnicity"  "free"       "credit"      "kind"       
 [2,] "communicate"   "true"       "team"       "mandatory"   "bridge"     
 [3,] "gain"          "asians"     "cooperate"  "music"       "close"      
 [4,] "use"           "hand"       "order"      "seen"        "deal"       
 [5,] "big"           "hold"       "play"       "barrier"     "designed"   
 [6,] "communication" "effective"  "big"        "stereotypes" "effort"     
 [7,] "america"       "emphasis"   "beginning"  "asians"      "implemented"
 [8,] "chinese"       "halls"      "china"      "fantastic"   "websites"   
 [9,] "ethnicity"     "minorities" "difference" "focusing"    "planned"    
[10,] "networks"      "population" "easier"     "force"       "body"

lda <- LDA(dtm, k = 5, seed = 536, control = list(nstart = 1000))
(terms <- terms(lda, 10))

      Topic 1       Topic 2         Topic 3        Topic 4       Topic 5    
 [1,] "kind"        "international" "issue"        "willing"     "play"     
 [2,] "easier"      "ethnicity"     "close"        "use"         "trying"   
 [3,] "gain"        "communication" "currently"    "hand"        "unity"    
 [4,] "websites"    "communicate"   "implemented"  "networks"    "decision" 
 [5,] "credit"      "bridge"        "particularly" "stereotypes" "gap"      
 [6,] "effort"      "america"       "credit"       "communicate" "normally" 
 [7,] "barriers"    "connection"    "fulfill"      "came"        "asians"   
 [8,] "effects"     "kind"          "grew"         "asians"      "created"  
 [9,] "established" "order"         "perspectives" "big"         "effective"
[10,] "strangers"   "skills"        "big"          "budget"      "prejudice"
Патрик С. Форшер
источник
2
Спасибо, что поделились своими данными! На это было очень интересно смотреть. У меня нет хорошего ответа на ваши вопросы, но я хочу кое-что предложить. В вопросе 1 вы можете попробовать настроить параметры управления в LDAфункции из topicmodelsпакета. В частности, вы можете попробовать сделать nstartбольше. Это гарантированно сделает ваши результаты более стабильными, потому что функция LDA будет просто запускаться снова и снова с различными случайными начальными значениями, а затем возвращать лучший результат. К сожалению, увеличение nstartдо, скажем, 1000 заставит алгоритм выполнять в 1000 раз больше работы (продолжение)
Flounderer
1
так будет намного медленнее. И нет никаких гарантий, что он будет достаточно стабильным . В отношении обоих вопросов, мне кажется, что LDA действительно предназначен для классификации невидимых документов, когда слишком много данных для обработки человеком. Для этого нормально, если алгоритм VEM дает только «достаточно хороший» ответ, который может варьироваться от одного прогона к другому. Но для вас это нежелательно, и поэтому LDA может оказаться не лучшим выбором. В первых лекциях курса Шализи есть несколько отличных альтернатив: stat.cmu.edu/~cshalizi/350 , например, вы можете конвертировать каждую (продолжение)
Flounderer
2
эссе на вектор мешок слов, а затем сделать PCA на результаты, а затем искать кластеры. Что касается того, достаточно ли велик ваш корпус, то, честно говоря, я не удивлюсь, если он слишком велик для VEM, чтобы давать надежные результаты. Возможно, я просто горький, но я потратил огромное количество времени, пытаясь заставить этот метод работать на другую модель аналогичными авторами, и он был совершенно непоследователен от запуска к запуску, даже при использовании крошечных примеров. Насколько мне известно, не так много статей, в которых обсуждается выбор отправных точек для подобных алгоритмов.
Камбала
Камбала, большое спасибо за ваш вклад! Я немного разочарован, когда узнаю, что нет конкретных указаний относительно LDA, но я полагаю, что это связано с неконтролируемым методом. Я постараюсь настроить nstartи просмотреть веб-сайт курса, чтобы увидеть, принесет ли что-нибудь из этого что-нибудь полезное. (Кстати, если вы добавите свои комментарии в ответ, я проголосую за него. Я хотел бы узнать, есть ли у кого-нибудь еще совет, прежде чем я что-либо приму, но я думаю, что ваши комментарии более чем достаточны для того, чтобы считаться ответом).
Патрик С. Форшер
Я чувствую твою боль в социальной науке, Патрик, но я думаю, что твой подход неправильный с самого начала. Если вы хотите использовать статистические тесты, вам нужно будет, чтобы люди кодировали часть из них, чтобы получить уровень ошибок классификации, вы (лично) сделали это? Если это так, то вы будете знать, какие функции наиболее заметны, и сможете разработать / выбрать лучший алгоритм.
Прогулка

Ответы:

6

Для собственного любопытства я применил алгоритм кластеризации, над которым я работал, к этому набору данных.

Я временно выставил здесь результаты (выберите набор данных очерков).

Кажется, что проблема не в отправных точках или алгоритме, а в данных. Вы можете «разумно» (субъективно, в моем ограниченном опыте) получить хорошие кластеры даже с 147 экземплярами, если есть какие-то скрытые темы / концепции / темы / кластеры (как бы вы ни хотели назвать).

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

Сиддхарт Гопал
источник
@ Siddharth.Gopal Большое спасибо за ответ! Это правда, что я ожидаю некоторого совпадения в кластерах, учитывая, что все участники описывают одну гипотетическую студенческую организацию (которую мы назвали «BadgerConnect»). Так, в отличие, например, от применения тематического моделирования к статьям из Science, где некоторые темы сильно отличаются от бумаги к бумаге, все темы немного похожи. Тем не менее, это правда, что некоторые из эссе в пользу BadgerConnect, а некоторые написаны против BadgerConnect.
Патрик С. Форшер
Также верно, что эссе сильно различаются по типу аргументов, которые они представляют, и как они представлены. Я хотел бы захватить часть этой изменчивости, если это возможно. Есть ли у вас какие-либо идеи, возможно ли уловить некоторые из этих различий (по крайней мере, разницу между эссе в пользу и эссе против этой гипотетической программы для студентов)? Кроме того, были ли ваши результаты кластеризации стабильными, когда вы использовали разные случайные семена?
Патрик С. Форшер
1
1. Если вас беспокоит стабильность алгоритма - попробуйте запустить алгоритм много раз и выбрать модель с наибольшей вероятностью.
Сиддхарт Гопал
1
(хотя стабильность кажется второстепенной проблемой здесь). 2. Учитывая ваше описание того, что вы ожидаете с точки зрения аргументов и мнений, представление эссе как пакета слов не является хорошей идеей в этом контексте. Фактически модель темы сама по себе не может быть хорошим инструментом для этого. Я бы посоветовал вам выбрать несколько ключевых слов, которые вас интересуют (например, раса, еда, общежитие и т. Д.) И попытаться проанализировать настроение предложения, в котором встречается это слово. Например, посмотрите здесь для демонстрации.
Сиддхарт Гопал
1
Python имеет отличный инструментарий NLP под названием nltk. Возможно, вы захотите взглянуть на то, что он предлагает. Что касается tf-idf, «технически», вход в LDA должен быть только подсчетом слов, так как многочленное распределение не определено для произвольных действительных чисел.
Сиддхарт Гопал
10
  1. Понятие «темы» в так называемых «моделях темы» вводит в заблуждение. Модель не знает или не предназначена для того, чтобы вообще знать семантически согласованные «темы». «Темы» - это просто распределение по токенам (словам). Другими словами, модель просто фиксирует одновременное появление терминов высокого порядка. Являются ли эти структуры что-то значимыми или нет, это не цель модели.

  2. Модель «LDA» состоит из двух частей (по существу, всех графических моделей): а) определение модели и б) реализация алгоритма вывода для определения параметров модели / состояния. То, что вы упомянули, может быть или не быть проблемой модели "LDA", но может быть некоторой ошибкой / ошибкой / неправильной настройкой конкретной используемой вами реализации (пакет R).

  3. Почти все реализации "LDA" требуют некоторой рандомизации. А по характеру алгоритмов вывода (например, MCMC или вариационного вывода) вы получите локальные минимальные решения или распределение многих решений. Короче говоря, то, что вы наблюдали, как-то ожидается.

Практические предложения:

  1. Попробуйте разные пакеты R: Например, этот пакет сделан бывшим аспирантом Дэвида Блея. Или даже попробуйте другую среду, такую ​​как эта . Если вы получите похожие результаты от всех этих стабильных пакетов, по крайней мере, вы немного уменьшите проблему.

  2. Попробуйте немного поиграть, не удаляя стоп-слова. Смысл в том, что эти стоп-слова играют важную роль в соединении смысловых значений в таком маленьком корпусе (например, около 100 статей). Кроме того, постарайтесь не фильтровать вещи.

  3. Попробуйте немного поиграть с гиперпараметрами, например, с разными номерами тем.

Статьи о тематических связях:

  1. http://www.aclweb.org/anthology-new/D/D12/D12-1087.pdf

  2. http://people.cs.umass.edu/~wallach/publications/mimno11optimizing.pdf

Лянцзе Хонг
источник
Спасибо за ваш ответ. Я отвечу на ваши комментарии по одному. (1) Я понимаю, что модель ничего не знает о темах, но ваше утверждение о том, что структуры, раскрытые моделями тем (и что эти структуры что-то значат, не является целью этих моделей), прямо противоречит этой обзорной статье Дэвида Блея, создатель тематических моделей. Мне кажется, что цель тематических моделей состоит именно в том, чтобы помочь исследовать / охарактеризовать текстовые данные, что я и хочу делать в этом проекте.
Патрик С. Форшер
(2) Хотя возможно, что мои результаты связаны с ошибкой, я думаю, что более вероятно, что они вызваны какой-то ошибкой на моем конце (и если это действительно так, пожалуйста, сообщите мне!). Я использую topicmodelsпакет в R, который по сути является интерфейсом R к оригинальному алгоритму, реализованному Блеяем и его коллегами.
Патрик С. Форшер
(3) Я знаю, что LDA требует некоторой рандомизации, поэтому я не спрашиваю точных результатов от прогона к прогону, но я думаю, что разумно ожидать аналогичных тем, используя разные случайные начальные числа (действительно, я считаю, что это стандартное ожидание, когда люди используют алгоритмы, основанные на рандомизации). То, что я хочу знать, - это как добиться стабильности в результатах.
Патрик С. Форшер
@ PatrickS.Forscher На ваш первый комментарий: Нет, это противоречиво. Название «темы» - это то, что мы, люди, наносим метки на эти распределения слов. Эти кластерные структуры могут относиться или не относиться к реальным, читаемым человеком темам. Существует целый ряд работ для обеспечения согласованности тематических моделей для смягчения точной проблемы.
Лянцзе Хонг,
@ PatrickS.Forscher К вашему второму комментарию: попробуйте другую реализацию, чтобы увидеть, получаете ли вы похожие (необоснованные результаты) или нет. Например, UMASS Маллет.
Лянцзе Хонг