BTM學習小記


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變化不大。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM