質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

Q&A

1回答

398閲覧

Rのldaパッケージで、top.words(LDA分析結果)の各単語をもとのドキュメントに紐付けたい

oika77

総合スコア184

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

0グッド

0クリップ

投稿2020/10/22 02:19

編集2020/10/22 05:09

現在Rのパッケージでldaを使ってLDA分析をしています。パッケージlda
最終的にtop.wordsで結果を取得するところまでうまくいきました。
次にやりたいことはtop.wordsの結果からその単語のもとのドキュメントをとりたいと思っています。

例えば以下のような結果が出たとします。
イメージ説明
top.words[2,1]にある"画素"という単語が使われていたドキュメントを特定することは可能なのでしょうか。


試したこと
LDAの分析結果(lda.collapsed.gibbs.sampler)にはassignmentsというものがあります。この説明には

A list of length D. Each element of the list, say assignments[[i]] is an integer vector of the same length as the number of columns in documents[[i]]

indicating the topic assignment for each word.

と書かれています。自分はあまり英語が得意ではないですが、翻訳にかけたり、結果を見たりする限り、その配列はドキュメントを表しており、その中の各要素はそれぞれの単語のトピック番号ではないかと思っています。(以下はassignmentsの中身です)
イメージ説明

だから試しにtop.wordsの"画素"という単語があるドキュメントを探し、そのドキュメントに対応するassignmentsをみたところ0(なぜかassignmentsではトピック数-1で表示されている)という数字がありませんでした。
つまり"画素"という単語はトピック1にあるので、assignmentsの説明によれば、この単語に対応する値は0になっているはず。

assignmentsの解釈が間違っているのでしょうか。誰か教えていただける方いらっしゃいますでしょうか。


しばらく考えて、なんとなく思ったこと

質問を投稿してからしばらく、考えていましたが、
LDAでは単語の抽象度を上げているので、ドキュメントの各単語はそれぞれトピックが割り当てられているが、逆にtop.words(LDA分析結果)に出てきた単語は必ずしもドキュメントに紐づかないのではないか。となんとなく思いました。
ただ実際、確信は持てていないので、もしわかる方がいらっしゃいましたら、何かお力添えをお願いいたします。

それからこのサイトをみてassignmentsの解釈は多分合っているのかなと思いました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ドキュメントの定義が以下の通りで、
ドキュメントの元になったセンテンスがあるとすれば以下のような感じでどうでしょう。

R

1library(lda) 2sentence <- c("I am the very model of a modern major general", "I have a major headache") 3test <- lexicalize(sentence, lower = TRUE) 4doc <- test$documents 5voc <- test$vocab 6k <- 10 7result <- lda.collapsed.gibbs.sampler(doc, 8 k, 9 voc, 10 25, 11 0.1, 12 0.1, 13 compute.log.likelihood=TRUE) 14top.words <- top.topic.words(result$topics, 3, by.score=TRUE) 15top.words 16library(stringr) 17str_detect(sentence, pattern=top.words[2,6])

投稿2020/10/22 09:28

shimiken

総合スコア368

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問