주제 모델의 주제 안정성


23

일련의 개방형 에세이의 내용에 대한 정보를 추출하려는 프로젝트를 진행 중입니다. 이 특정 프로젝트에서 148 명이 더 큰 실험의 일환으로 가상의 학생 조직에 대한 에세이를 썼습니다. 내 분야 (사회 심리학)에서 이러한 데이터를 분석하는 일반적인 방법은 수필로 수필을 코딩하는 것이지만 수작업으로 코딩하는 것은 노동 집약적이며 너무 주관적이기 때문에 정량적으로 수행하고 싶습니다. 미각.

무료 응답 데이터를 정량적으로 분석하는 방법에 대한 조사 중에 주제 모델링 (또는 Latent Dirichlet Allocation 또는 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))

편집하다:

nstartFlounderer가 제안한대로 의견을 수정하려고했습니다 . 불행히도 아래에 표시된 것처럼 nstart1000으로 설정하더라도 임의의 시드에서 임의의 시드에 이르기까지 주제가 크게 다릅니다. 다시 강조하기 위해, 아래 두 모델의 추정에서 변경하고있는 유일한 것은 모델 추정을 시작하는 데 사용되는 랜덤 시드 (random seed)이지만,이 두 실행에서 주제가 전혀 일치하지 않는 것 같습니다.

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 함수가 다른 임의의 시드로 반복해서 실행되고 최상의 결과를 반환하기 때문에 결과를보다 안정적으로 보장 합니다. 불행히도 nstart1000으로 증가 하면 알고리즘이 1000 배 더 많은 작업을 수행하게됩니다 (계속)
Flounderer

1
훨씬 느려질 것입니다. 그리고 그것이 충분히 안정적이라는 보장은 없습니다 . Re : 두 질문 모두, LDA는 사람이 처리 할 데이터가 너무 많을 때 보이지 않는 문서를 분류하도록 실제로 설계된 것 같습니다. 이를 위해 VEM 알고리즘이 실행마다 다를 수있는 "충분한"답변 만 제공하는 것이 좋습니다. 그러나 당신에게는 이것이 바람직하지 않으므로 LDA가 최선의 선택이 아닐 수도 있습니다. Shalizi의 처음 몇 강의에서 몇 가지 훌륭한 대안 물론 여기에있다 있습니다 stat.cmu.edu/~cshalizi/350는 , 예를 들어, 각 (계속) 변환 할 수 있습니다
Flounderer

2
bag-of-words 벡터에 에세이를 적용한 다음 결과에 대해 PCA를 수행 한 다음 군집을 찾으십시오. 당신의 코퍼스가 충분히 큰지, 솔직히 말해서 VEM이 신뢰할만한 결과를 내기에는 너무 크면 놀라지 않을 것입니다. 어쩌면 나는 쓴 맛이 있지만 비슷한 저자가 다른 모델 에서이 방법을 사용하는 데 많은 시간을 소비했으며 작은 예제를 사용할 때도 실행마다 완전히 일치하지 않았습니다. 내가 아는 한, 이와 같은 알고리즘의 시작점을 선택하는 것에 대해 논의한 논문은 많지 않습니다.
Flounderer

Flounderer, 입력 해 주셔서 감사합니다! LDA에 대해 더 많은 지침이 없다는 말을 듣는 것은 조금 실망 스럽지만 감독되지 않은 방법의 영역과 함께 제공되는 것으로 가정합니다. nstart코스 웹 사이트를 조정 하고 살펴보고 그 중 하나가 유용한 것이 있는지 확인합니다. (BTW, 귀하가 귀하의 의견을 답변에 삽입하면 투표하겠습니다. 다른 것을 수락하기 전에 다른 사람이 조언을하고 싶은지 알고 싶지만 귀하의 의견이 답변으로 계산하기에 충분하다고 생각합니다).
Patrick S. Forscher

패트릭은 사회 과학에 어려움을 겪고 있다고 생각합니다. 통계 테스트를 사용하려면 분류 오류율을 얻기 위해 사람이 코드의 일부를 코딩해야합니다 (개인적으로)? 그렇다면 가장 두드러진 기능을 알고 더 나은 알고리즘을 설계 / 선택할 수 있습니다.
Indolering

답변:


6

내 호기심을 위해이 데이터 세트에 대해 작업 한 클러스터링 알고리즘을 적용했습니다.

나는 한 일시적으로 넣어-까지 결과 여기 (에세이 데이터 세트를 선택).

문제가 시작점이나 알고리즘이 아니라 데이터 인 것 같습니다. 숨겨진 주제 / 개념 / 테마 / 클러스터 (전화하고 싶은 것이 무엇이든)가있는 한``합리적으로 ''(제한적으로 제한된 경험에서) 147 개의 인스턴스로도 좋은 클러스터를 얻을 수 있습니다.

데이터에 주제가 잘 구분되지 않은 경우 어떤 알고리즘을 사용하든 좋은 답변을 얻지 못할 수 있습니다.


@ Siddharth.Gopal 답변 주셔서 감사합니다! 모든 참가자가 하나의 가상 학생 조직 (우리가 "BadgerConnect"라고 함)을 설명하고 있다는 점에서 클러스터가 약간 겹칠 것으로 예상됩니다. 예를 들어, 주제 모델링을 Science의 논문에 적용하는 것과 달리, 주제 중 일부가 논문마다 크게 다른 주제는 모두 약간 비슷합니다. 그러나 일부 에세이는 BadgerConnect에 찬성하고 일부는 BadgerConnect에 대해 작성된 것입니다.
Patrick S. Forscher

에세이는 그들이 제시하는 논증의 종류와 논증이 제시되는 방식이 매우 다양하다는 것도 사실입니다. 가능하다면 그 가변성의 일부를 포착하고 싶습니다. 이러한 차이점 중 일부를 잡을 수 있는지에 대한 아이디어가 있습니까 (적어도이 가상 학생 프로그램에 대한 수필과 수필의 차이)? 또한 다른 무작위 시드를 사용할 때 군집 결과가 안정적 이었습니까?
패트릭 S. Forscher

1
1. 알고리즘의 안정성에 대해 완전히 우려하는 경우-알고리즘을 여러 번 실행하고 가능성이 가장 높은 모델을 선택하십시오.
Siddharth Gopal

1
(여기서는 안정성이 2 차 문제인 것처럼 보이지만). 2. 논증과 의견의 관점에서 당신이 기대하는 것에 대한 당신의 설명을 감안할 때, 에세이를 단어의 백으로 표현하는 것은이 맥락에서 좋은 생각이 아닙니다. 사실 주제 모델 자체는이를위한 좋은 도구가 아닐 수도 있습니다. 관심있는 키워드 (인종, 음식, 기숙사 등)를 골라 단어가 나오는 문장의 감정을 분석해 보시기 바랍니다. 예를 들어 데모 를 보려면 여기 를 살펴보십시오 .
Siddharth Gopal

1
파이썬에는 nltk라는 훌륭한 NLP 툴킷이 있습니다. 제공하는 기능을 살펴볼 수 있습니다. tf-idf, 'technically'와 관련하여, 다항 분포가 임의의 실수에 대해 정의되어 있지 않으므로 LDA에 대한 입력은 단어 개수 만되어야합니다.
Siddharth Gopal

10
  1. 소위 "주제 모델"에서 "주제"의 개념은 오해의 소지가 있습니다. 이 모델은 의미 적으로 일관된 "주제"를 전혀 알지 못하거나 알도록 설계되지 않았습니다. "주제"는 단지 토큰 (단어)을 통한 배포입니다. 다시 말해, 모형은 단지 고차의 동시 발생을 포착합니다. 이러한 구조가 무언가를 의미하는지 여부는 모델의 목적이 아닙니다.

  2. "LDA"모델은 두 가지 부분 (본질적으로 모든 그래픽 모델)을 갖는다 : a) 모델 정의 및 b) 모델 파라미터를 추론 / 부동산하기위한 추론 알고리즘의 구현. 언급 한 것은 "LDA"모델의 문제 일 수도 있고 아닐 수도 있지만 사용한 특정 구현 (R 패키지)의 일부 버그 / 오류 / 구성 오류 일 수 있습니다.

  3. "LDA"의 거의 모든 구현에는 약간의 무작위 화가 필요합니다. 또한 추론 알고리즘 (예 : MCMC 또는 변형 추론)의 특성에 따라 로컬 최소 솔루션 또는 여러 솔루션을 배포 할 수 있습니다. 요컨대, 당신이 관찰 한 것은 어떻게 든 예상됩니다.

실용적인 제안 :

  1. 다른 R 패키지를 사용해보십시오. 예를 들어이 패키지 는 David Blei의 전 대학원생이 수행합니다. 또는, 심지어 같은 다른 환경을하려고 이것 . 이 모든 안정적인 패키지에서 비슷한 결과를 얻는다면 최소한 문제를 조금 줄일 수 있습니다.

  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)이 모델은 주제에 대해서는 아무것도 모르지만 주제 모델에 의해 밝혀지지 않은 구조 (및 이러한 구조가 다른 모델을 의미하는지 여부는 이러한 모델의 목적이 아님)가 David Blei 의이 검토 논문과 직접 모순된다는 귀하의 주장 , 토픽 모델의 작성자. 주제 모델의 목적은 텍스트 데이터를 탐색 / 특성화하는 데 도움이되는 것 같습니다.이 프로젝트에서 정확히하고 싶은 것입니다.
패트릭 S. Forscher

(2) 내 결과가 버그로 인한 것일 수 있지만 내 결과에 어떤 종류의 오류가있을 가능성이 높다고 생각합니다 (이 경우에 해당되는 경우 알려주세요!). 필자 topicmodels는 Blei와 동료가 구현 한 원래 알고리즘에 대한 R 인터페이스 인 R 의 패키지를 사용하고 있습니다.
Patrick S. Forscher

(3) LDA에는 무작위 배정이 필요하다는 것을 알고 있으므로 달리기에서 정확한 결과를 요구하지는 않지만 다른 무작위 시드를 사용하여 비슷한 주제를 기대하는 것이 합리적이라고 생각합니다 (실제로 이것이 표준 기대라고 생각합니다 사람들은 무작위 화에 기반한 알고리즘을 사용합니다). 내가 알고 싶은 것은 결과에서 안정성을 얻는 방법입니다.
패트릭 S. Forscher

@ PatrickS.Forscher 첫 번째 논평 : 아뇨. 모순입니다. "주제"라는 이름은 우리가 인간으로서 단어의 분포에 레이블을 붙인 것입니다. 이러한 클러스터링 구조는 실제 인간이 읽을 수있는 주제와 관련되거나 관련되지 않을 수 있습니다. 정확한 문제를 완화하기 위해 주제 모델에 일관성을 도입 할 논문이 많이 있습니다.
Liangjie Hong

@ PatrickS.Forscher 두 번째 의견 : 유사한 구현 (합리적인 결과가 아닌지)을 확인하기 위해 다른 구현을 시도하십시오. 예를 들어 UMASS Mallet입니다.
Liangjie Hong
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.