1. 程式人生 > >BTM學習小記

BTM學習小記

color lda col src ram pen 估計 param sel

BTM的原理跟LDA很像,下面是該模型的概率圖:

技術分享圖片

由該圖可以看出來,與LDA的區別在於確定主題分布和詞分布後相應地取兩個詞(而LDA只取一個,即類比常見的骰子說法:先投擲K面的骰子得到主題z,再根據相應的V面骰子,連續投擲兩次,得到一對詞匯),這倆詞叫做biterm(就是在把一個文檔分詞之後,對這些詞的設置一個距離指標,從第I個到第j個詞之間兩兩結對,都可以看作一對biterm).從原文檔得到biterm代碼如下:

def build_Biterms(self, sentence):

"""

獲取 document 的 biterms

:param sentence: word id list sentence 是切詞後的每一詞的ID 的列表

:return: biterm list

"""

win = 15 # 設置窗口大小

biterms = []

for i in xrange(len(sentence)-1):

for j in xrange(i+1, min(i+win+1, len(sentence))):

biterms.append(Biterm(int(sentence[i]),int(sentence[j])))

return biterms

BTM利用了整個文本集合來估計一個theta,解決了稀疏問題(我們通常有海量數據)。放寬了mixture of unigram中對整個文檔必須同屬於一個主題z的約束(相當於從整個文檔放松到了窗口長度內的兩個詞),加強了LDA中每個詞對應於一個Z的假設(BTM中約束了窗長內的兩個詞組成一個biterm對應於一個z)。這個假設很接近於人類認知,因為我們知道,通常在較短的一段文本內,topic變化不大。

BTM學習小記