トピックモデルのトピックの安定性


23

私は、一連の自由記述式エッセイの内容に関する情報を抽出したいプロジェクトに取り組んでいます。この特定のプロジェクトでは、148人が、大規模な実験の一環として、仮想の学生組織についてのエッセイを書きました。私の分野(社会心理学)では、これらのデータを分析する典型的な方法はエッセイを手作業でコーディングすることですが、ハンドコーディングは労働集約的であり、私にとっては少し主観的であるため、これを定量的に行いたいと思います味。

無料の応答データを定量的に分析する方法についての調査中に、トピックモデリング(またはLatent Dirichlet Allocation、またはLDA)と呼ばれるアプローチを見つけました。トピックモデリングでは、データの単語の表現(用語ドキュメントマトリックス)を使用し、単語の共起に関する情報を使用して、データの潜在的なトピックを抽出します。このアプローチは私のアプリケーションに最適のようです。

残念ながら、トピックモデリングをデータに適用すると、2つの問題が見つかりました。

  1. トピックモデリングによって明らかにされたトピックは、解釈が難しい場合があります
  2. 別のランダムシードを使用してトピックモデルを再実行すると、トピックが劇的に変化するように見える

特に問題2は私に関係しています。したがって、2つの関連する質問があります。

  1. 解釈可能性と安定性のためにモデル適合手順を最適化するために、LDA手順でできることはありますか?個人的に、私は、最も低いパープレキシティおよび/または最高のモデル適合性を持つモデルを見つけることについてあまり気にしません-私は主にこの手順を使用して、この研究の参加者がエッセイで書いたものを理解し、特徴づけるのを助けたいです。ただし、結果がランダムシードのアーティファクトになりたくないのは確かです。
  2. 上記の質問に関連して、LDAを実行するために必要なデータ量の基準はありますか?この方法を使用した私が見たほとんどの論文は、大きなコーパスを分析します(たとえば、過去20年間のすべてのScience論文のアーカイブ)が、実験データを使用しているため、ドキュメントのコーパスははるかに小さくなります。

手を汚したい人のために、ここにエッセイデータを投稿しました。使用している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に設定しても、ランダムシードからランダムシードまで非常に劇的に変化するトピックになります。繰り返しますが、以下の2つのモデルの推定で変更しているのは、モデルの推定を開始するために使用されるランダムシードのみですが、これらの2つの実行でトピックはまったく一貫していないようです。

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ではLDAtopicmodelsパッケージ内の関数の制御パラメーターを調整してみてください。特に、nstart大きくすることができます。これにより、結果がより安定することが保証されます。LDA関数は、異なるランダムシードを使用して何度も繰り返し実行し、最適な結果を返すためです。残念ながら、増加しnstart1000は、アルゴリズムが1000倍以上の作業(続き)を行うようになります、と言う、に
Flounderer

1
そのため、はるかに遅くなります。そして、それが十分に安定するという保証はありません。再:両方の質問、私にとっては、人間にとって処理するにはデータが多すぎる場合、LDAは目に見えない文書を分類するように本当に設計されているようです。このため、VEMアルゴリズムが実行ごとに異なる可能性がある「十分な」回答のみを提供する場合は問題ありません。ただし、これは望ましくないため、LDAは最良の選択ではない可能性があります。ここShaliziのコースの最初の数の講義ではいくつかの優れた選択肢があります:stat.cmu.edu/~cshalizi/350は、例えば、あなたは(続き)それぞれを変換することができ
Flounderer

2
bag-of-wordsベクトルのエッセイを作成し、結果に対してPCAを実行してからクラスターを探します。コーパスが十分に大きいかどうかについては、正直なところ、VEMが信頼できる結果を得るには大きすぎるとしても驚かないでしょう。たぶん私は苦いだけかもしれませんが、似たような作者がこのメソッドを別のモデルで動作させるために膨大な時間を費やしました。私が知る限り、このようなアルゴリズムの出発点の選択について議論している論文は多くありません。
ヒラメ

ヒラメ、ご意見ありがとうございます!LDAに関して特にガイドラインがこれ以上ないことを聞くのは少し残念ですが、それは監視されていない方法の領域に伴うと思われます。nstartコースのWebサイトを調整して見て、どちらかが有用かどうかを確認します。(ところで、あなたがあなたのコメントを回答に挿入したら、私はそれを投票します。私が何かを受け入れる前に誰か他の人に助言があるかどうかを見たいと思いますが、あなたのコメントは答えとして数えるのに十分すぎると思います)。
パトリックS.フォーシャー

パトリック、あなたの社会科学のうんざりするような痛みを感じますが、あなたのアプローチはそもそも間違っていると思います。統計的検定を使用したい場合、分類エラー率を得るために人間がそれらの一部をコーディングする必要があります、あなたは(個人的に)それをしましたか?その場合、どの機能が最も顕著なかがわかり、より良いアルゴリズムを設計/選択できます。
Indolering

回答:


6

私自身の好奇心のために、このデータセットに取り組んできたクラスタリングアルゴリズムを適用しました。

ここに結果を一時的に掲載しました(エッセイデータセットを選択します)。

問題は出発点やアルゴリズムではなく、データにあるようです。隠されたトピック/概念/テーマ/クラスター(呼び出したいものは何でも)がある限り、147インスタンスでも「合理的に」(主観的に、限られた経験で)良好なクラスターを取得できます。

データのトピックが十分に分離されていない場合、どのアルゴリズムを使用しても、適切な答えが得られない可能性があります。


@ Siddharth.Gopal回答ありがとうございます!すべての参加者が1つの仮想的な学生組織(「BadgerConnect」と呼びます)を記述していることを考えると、クラスター内である程度の重複が予想されるのは事実です。そのため、たとえば、一部のトピックが紙ごとに大きく異なるScienceの論文にトピックモデリングを適用するのとは対照的に、トピックはすべて少し似ています。しかし、エッセイのいくつかはBadgerConnectを支持しており、一部はBadgerConnectに対して書かれていることは事実です。
パトリックS.フォーシャー

また、エッセイが提示する議論の種類と議論の提示方法が大きく異なることも事実です。可能であれば、その変動の一部をキャプチャしたいと思います。これらの区別のいくつかをキャッチすることが可能かどうか、ご存知ですか(少なくとも、賛成のエッセイとこの仮想的な学生プログラムに対するエッセイの違い)。また、異なるランダムシードを使用した場合、クラスタリング結果は安定していましたか?
パトリックS.フォーシャー

1
1.アルゴリズムの安定性のみに関心がある場合-アルゴリズムを何度も実行して、最も可能性の高いモデルを選択してください。
シッダールタGopalの

1
(ただし、安定性はここでは副次的な問題のように思われます)。2.議論や意見の観点からあなたが期待することについてあなたの説明を考えると、この文脈ではエッセイを言葉の袋として表すことは良い考えではありません。実際のトピックモデル自体は、このための良いツールではないかもしれません。興味のあるいくつかのキーワード(人種、食べ物、寮など)を選択し、その単語が出現する文の感情を分析することをお勧めします。たとえば、ここでデモをご覧ください
シッダールタGopalの

1
Pythonには、nltkと呼ばれる優れたNLPツールキットがあります。あなたはそれが提供するものを見たいと思うかもしれません。「技術的に」tf-idfに関しては、多項分布は任意の実数に対して定義されていないため、LDAへの入力はワードカウントのみである必要があります。
シッダールタGopalの

10
  1. いわゆる「トピックモデル」における「トピック」の概念は誤解を招くものです。このモデルは、意味的に一貫した「トピック」をまったく知らないか、まったく知らないように設計されています。「トピック」は、トークン(単語)の単なる分布です。つまり、モデルは用語の高次の共起をキャプチャするだけです。これらの構造が何かを意味するかどうかは、モデルの目的ではありません。

  2. 「LDA」モデルには、2つの部分(本質的にすべてのグラフィカルモデル)があります。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つずつコメントをお送りします。(1)モデルはトピックについて何も知らないことを理解していますが、トピックモデルによって明らかにされた構造(およびこれらの構造が何かを意味するかどうかはこれらのモデルの目的ではない)の主張は、David Bleiによるこのレビューペーパーと直接矛盾しています。トピックモデルの作成者。トピックモデルの目的は、テキストデータの探索/特性化を正確に支援することであり、まさにこのプロジェクトでやりたいことです。
パトリックS.フォーシャー

(2)私の結果はバグが原因である可能性がありますが、それらは私の終わりに何らかのエラーが原因である可能性が高いと思います(そして、これが事実であると思われる場合は、教えてください!)topicmodelsR のパッケージを使用しています。これは、基本的にBleiと同僚によって実装された元のアルゴリズムへのRインターフェイスです。
パトリックS.フォーシャー

(3)LDAはランダム化を必要とすることを知っているので、実行ごとに正確な結果を要求するわけではありませんが、異なるランダムシードを使用して同様のトピックを期待するのは合理的だと思います(実際、これは標準的な期待だと思いますランダム化に基づくアルゴリズムを使用します)。私が知りたいのは、結果の安定性を達成する方法です。
パトリックS.フォーシャー

@ PatrickS.Forscher最初のコメント:いいえ。それは矛盾しています。「トピック」という名前は、人間として、これらの単語の分布にラベルを付けるものです。これらのクラスタリング構造は、実際の人間が読めるトピックに関連している場合と関連していない場合があります。正確な問題を軽減するためにトピックモデルに一貫性を導入するための論文が多数あります。
梁家紅

@ PatrickS.Forscher 2番目のコメント:いくつかの異なる実装を試して、似たような(不合理な結果)が得られるかどうかを確認してください。たとえば、UMASS Mallet。
梁家紅
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.