2016-11-08 24 views
2

我試圖找出分配給主題中每個單詞的重量代表了馬槌中的重量。在Mallet中計算的主題中單詞的權重是多少?

我假設這是某種形式的文檔發生計數。不過,我很難弄清楚這個數字是如何得出的。

在我的模型,也有發生在多個主題幾個單詞,每個主題在他們分配不同的權重,這麼清楚的數量是不字數在整個語料庫。我的下一個猜測是,這個數字是分配給該主題的全套文檔中單詞的出現次數,但是當我嘗試手動驗證時,這似乎是不正確的。

作爲一個例子:我訓練模型在約12000文檔語料庫(阿爾法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 
    } 

回答

2

槌每個字令牌分配給主題。 getSortedWords()方法計算有多少字令牌是特定類型(例如knoflook)並且也被分配給主題k。這個計算中將令牌分成文檔並不重要。

如果我理解正確的話,你發現有一些有類型的文字標記knoflook也是1855個文檔具有一個文字標記分配給主題T1。但是不能保證這兩個標記是相同的。

從其他工作在看食譜,我猜想,大蒜是一種發生在許多情況下的常見成分,而且可能有很多話題概率很高。如果將該詞的許多實例分配給其他主題,那就不足爲奇了。

+0

感謝這一點,非常清楚的解釋。 –