私はトピックの各単語に割り当てられた重みがMalletでどのようなものであるかを調べようとしています。マレットでトピックの単語の重みがどのように計算されますか?
私はそれが何らかの形の文書発生カウントであると仮定しています。しかし、私はその人物がどのように到着したかを理解するのに苦労しています。
私のモデルでは、複数のトピックに複数の単語があり、それぞれのトピックに異なる重みが割り当てられているため、数字はコーパス全体の単語数ではありません。私の次の推測では、トピックに割り当てられているドキュメントの総数のうち単語の出現数が数字であることが推測されましたが、手動で検証しようとすると、これは正しくないようです。
例:約12,000のドキュメント(アルファ0.1、ベータ0.01、t = 50)のコーパスをモデルにしてトレーニングしています。
t1 = "knoflook (158.0), olie (156.0), ...."
私は手動でとが持っている単語が含まれている私のコーパスにおけるドキュメントの数をカウントしたときに単語「knoflookは」しかし、158の重みを割り当てられているので:訓練の後、私のモデルは、以下のトピックがありますt1
が割り当てられましたが、私は全く異なる番号(1855)を取得します。
私の手作業による検証はオフになっている可能性がありますが、一般的に各トピックの単語の重さがどのように到達しているかを知ることは有用です。ところで
、上記のトピックは、次のコードに基づいて、レンダリングされ:
// The data alphabet maps word IDs to strings
Alphabet dataAlphabet = instances.getDataAlphabet();
// Get an array of sorted sets of word ID/count pairs
ArrayList<TreeSet<IDSorter>> topicSortedWords = topicModel.getSortedWords();
for (int t = 0; t < numberOfTopics; t++) {
Iterator<IDSorter> iterator = topicSortedWords.get(t).iterator();
StringBuilder sb = new StringBuilder();
while (iterator.hasNext()) {
IDSorter idWeightPair = iterator.next();
final String wordLabel = dataAlphabet.lookupObject(idWeightPair.getID()).toString();
final double weight = idWeightPair.getWeight();
sb.append(wordLabel + " (" + weight + "), ");
}
sb.setLength(sb.length() - 2);
// sb.toString is now a human-readable representation of the topic
}
ありがとう、非常に明確に説明しました。 –