Я пытаюсь выяснить, какой вес присваивается каждому слову в теме в 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
}