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


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як запропонував Флоундер у коментарях. На жаль, як показано нижче, навіть встановлення nstartдо 1000 призводить до тем, які різко різняться від випадкового насіння до випадкового насіння. Ще раз наголошу, єдине, що я змінюю в оцінці двох моделей, наведених нижче, - це випадкове насіння, яке використовується для початку оцінки моделі, і все ж такі теми, схоже, зовсім не узгоджуються на цих двох етапах.

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 дав достовірні результати. Можливо, я просто гірко, але я витратив величезну кількість часу, намагаючись змусити цей метод працювати над іншою моделлю подібними авторами, і він був абсолютно абсолютно невідповідним від запуску до запуску навіть при використанні крихітних прикладів. Наскільки я знаю, не так багато робіт, які обговорюють вибір вихідних точок для таких алгоритмів.
Flounderer

Флоундере, дуже дякую за ваш внесок! Мені трохи невтішно почути, що не існує більше вказівок щодо LDA, але я вважаю, що це застосовується на території непідконтрольного методу. Я спробую скоригуватись nstartі перегляну веб-сайт курсу, щоб побачити, чи хтось із них дає щось корисне. (До речі, якщо ви вставите свої коментарі у відповідь, я проголосую за неї. Я хотів би побачити, чи є ще хтось хтось, перш ніж я щось прийму, але я вважаю, що ваших коментарів більш ніж достатньо, щоб вважати відповіддю).
Патрік С. Форшер

Я відчуваю твій біль у суспільствознавчому шахрайстві, Патріку, але я думаю, що твій підхід починати неправильно. Якщо ви хочете скористатися статистичними тестами, вам потрібно буде змусити людей кодувати частину їх, щоб отримати ступінь помилок класифікації, чи це особисто ви зробили? Якщо так, то ви дізнаєтеся, які функції є найбільш помітними, і ви зможете спроектувати / вибрати кращий алгоритм.
Indolering

Відповіді:


6

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

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

Здається, проблема полягає не в початкових точках або алгоритмі, а в даних. Ви можете «розумно» (суб’єктивно, за моїм обмеженим досвідом) отримати хороші кластери навіть із 147 примірниками, якщо є деякі приховані теми / концепції / теми / кластери (як би ви хотіли назвати).

Якщо дані не мають добре розділених тем, то незалежно від того, яким алгоритмом ви користуєтесь, ви не зможете отримати хороших відповідей.


@ Siddharth.Gopal Дякую за відповідь! Це правда, що я б очікував певного збігу в кластерах, враховуючи, що всі учасники описують одну гіпотетичну студентську організацію (яку ми назвали "BadgerConnect"). Так, на відміну, наприклад, від застосування тематичного моделювання до наукових праць, де деякі теми сильно відрізняються від паперу до паперу, усі теми трохи схожі. Однак це правда, що деякі нариси виступають за BadgerConnect, а деякі написані проти BadgerConnect.
Патрік С. Форшер

Правда також, що нариси сильно різняться між типом аргументів, які вони викладають, та способом їх викладу. Я хотів би зафіксувати частину цієї мінливості, якщо це можливо. Чи маєте ви якесь уявлення, чи можливо вилучити деякі з цих відмінностей (принаймні, різниця між есе на користь та есе проти цієї гіпотетичної студентської програми)? Чи були ваші результати кластеризації стабільними, коли ви використовували різні випадкові насіння?
Патрік С. Форшер

1
1. Якщо ви суто стурбовані стабільністю алгоритму, спробуйте запустити алгоритм багато разів і виберіть модель з найбільшою ймовірністю.
Siddharth Gopal

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 з оригінальним алгоритмом, реалізованим Blei та колегами.
Патрік С. Форшер

(3) Я знаю, що LDA вимагає певної рандомізації, тому я не прошу точних результатів від запуску до запуску, але думаю, що розумно очікувати подібних тем, використовуючи різні випадкові насіння (дійсно, я вважаю, що це стандартне очікування, коли люди використовують алгоритми на основі рандомізації). Я хочу знати, як досягти зазначеної стабільності в результатах.
Патрік С. Форшер

@ PatrickS.Forscher На ваш перший коментар: Ні, це суперечливо. Назва "теми" - це те, що ми, як люди, ставимо мітки на цих розподілах слів. Ці структури кластеризації можуть бути або не пов’язані з реальними, читаними людьми темами. Існує кількість робіт, щоб ввести узгодженість у тематичні моделі, щоб зменшити точну проблему.
Ліанджі Гонг

@ PatrickS.Forscher На ваш другий коментар: Спробуйте кілька різних варіантів, щоб побачити, чи отримуєте ви подібні (необґрунтовані результати) чи ні. Наприклад, UMASS Mallet.
Ліанджі Гонг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.