天天看點

主題模型

摘要:

  兩篇文檔是否相關往往不隻決定于字面上的詞語重複,還取決于文字背後的語義關聯。對語義關聯的挖掘,可以讓我們的搜尋更加智能化。本文着重介紹了一個語義挖掘的利器:主題模型。主題模型是對文字隐含主題進行模組化的方法。它克服了傳統資訊檢索中文檔相似度計算方法的缺點,并且能夠在海量網際網路資料中自動尋找出文字間的語義主題。近些年來各大網際網路公司都開始了這方面的探索和嘗試。就讓我們看一下究竟吧。

關鍵詞:主題模型

技術領域:搜尋技術、自然語言處理

  假設有兩個句子,我們想知道它們之間是否相關聯:

  第一個是:“喬布斯離我們而去了。”

  第二個是:“蘋果價格會不會降?”

  如果由人來判斷,我們一看就知道,這兩個句子之間雖然沒有任何公共詞語,但仍然是很相關的。這是因為,雖然第二句中的“蘋果”可能是指吃的蘋果,但是由于第一句裡面有了“喬布斯”,我們會很自然的把“蘋果”了解為蘋果公司的産品。事實上,這種文字語句之間的相關性、相似性問題,在搜尋引擎算法中經常遇到。例如,一個使用者輸入了一個query,我們要從海量的網頁庫中找出和它最相關的結果。這裡就涉及到如何衡量query和網頁之間相似度的問題。對于這類問題,人是可以通過上下文語境來判斷的。但是,機器可以麼?

  在傳統資訊檢索領域裡,實際上已經有了很多衡量文檔相似性的方法,比如經典的VSM模型。然而這些方法往往基于一個基本假設:文檔之間重複的詞語越多越可能相似。這一點在實際中并不盡然。很多時候相關程度取決于背後的語義聯系,而非表面的詞語重複。

  那麼,這種語義關系應該怎樣度量呢?事實上在自然語言處理領域裡已經有了很多從詞、詞組、句子、篇章角度進行衡量的方法。本文要介紹的是其中一個語義挖掘的利器:主題模型。

  主題模型,顧名思義,就是對文字中隐含主題的一種模組化方法。還是上面的例子,“蘋果”這個詞的背後既包含是蘋果公司這樣一個主題,也包括了水果的主題。當我們和第一句進行比較時,蘋果公司這個主題就和“喬布斯”所代表的主題比對上了,因而我們認為它們是相關的。

  在這裡,我們先定義一下主題究竟是什麼。主題就是一個概念、一個方面。它表現為一系列相關的詞語。比如一個文章如果涉及到“百度”這個主題,那麼“中文搜尋”、“李彥宏”等詞語就會以較高的頻率出現,而如果涉及到“IBM”這個主題,那麼“筆記本”等就會出現的很頻繁。如果用數學來描述一下的話,主題就是詞彙表上詞語的條件機率分布 。與主題關系越密切的詞語,它的條件機率越大,反之則越小。

例如:

<a href="http://stblog.baidu-tech.com/wp-content/uploads/wp-display-data.php?filename=11322018984.jpg&amp;type=image/jpeg&amp;width=556&amp;height=75"></a>

  通俗來說,一個主題就好像一個“桶”,它裝了若幹出現機率較高的詞語。這些詞語和這個主題有很強的相關性,或者說,正是這些詞語共同定義了這個主題。對于一段話來說,有些詞語可以出自這個“桶”,有些可能來自那個“桶”,一段文本往往是若幹個主題的雜合體。我們舉個簡單的例子,見下圖

<a href="http://stblog.baidu-tech.com/wp-content/uploads/wp-display-data.php?filename=21322019038.jpg&amp;type=image/jpeg&amp;width=611&amp;height=330"></a>

  以上是從網際網路新聞中摘抄下來的一段話。我們劃分了4個桶(主題),百度(紅色),微軟(紫色)、谷歌(藍色)和市場(綠色)。段落中所包含的每個主題的詞語用顔色辨別出來了。從顔色分布上我們就可以看出,文字的大意是在講百度和市場發展。在這裡面,谷歌、微軟這兩個主題也出現了,但不是主要語義。值得注意的是,像“搜尋引擎”這樣的詞語,在百度、微軟、谷歌這三個主題上都是很可能出現的,可以認為一個詞語放進了多個“桶”。當它在文字中出現的時候,這三個主題均有一定程度的展現。

  有了主題的概念,我們不禁要問,究竟如何得到這些主題呢?對文章中的主題又是如何進行分析呢?這正是主題模型要解決的問題。下面我簡要介紹一下主題模型是怎樣工作的。

  首先,我們用生成模型的視角來看文檔和主題這兩件事。所謂生成模型,就是說,我們認為一篇文章的每個詞都是通過“以一定機率選擇了某個主題,并從這個主題中以一定機率選擇某個詞語”這樣一個過程得到的。那麼,如果我們要生成一篇文檔,它裡面的每個詞語出現的機率為:

<a href="http://stblog.baidu-tech.com/wp-content/uploads/wp-display-data.php?filename=31322021156.jpg&amp;type=image/jpeg&amp;width=345&amp;height=56">  </a>

上面這個式子,可以矩陣乘法來表示,如下圖所示:

<a href="http://stblog.baidu-tech.com/wp-content/uploads/wp-display-data.php?filename=41322021194.jpg&amp;type=image/jpeg&amp;width=554&amp;height=167"></a>

  主題模型訓練推理的方法主要有兩種,一個是pLSA(Probabilistic Latent Semantic Analysis),另一個是LDA(Latent Dirichlet Allocation)。pLSA主要使用的是EM(期望最大化)算法;LDA采用的是Gibbs sampling方法。由于它們都較為複雜且篇幅有限,這裡就隻簡要地介紹一下pLSA的思想,其他具體方法和公式,讀者可以查閱相關資料。

  pLSA采用的方法叫做EM(期望最大化)算法,它包含兩個不斷疊代的過程:E(期望)過程和M(最大化)過程。用一個形象的例子來說吧:比如說食堂的大師傅炒了一盤菜,要等分成兩份給兩個人吃,顯然沒有必要拿天平去一點點去精确稱量,最簡單的辦法是先随意的把菜分到兩個碗中,然後觀察是否一樣多,把比較多的那一份取出一點放到另一個碗中,這個過程一直重複下去,直到大家看不出兩個碗裡的菜有什麼差别為止。

  對于主題模型訓練來說,“計算每個主題裡的詞語分布”和“計算訓練文檔中的主題分布”就好比是在往兩個人碗裡分飯。在E過程中,我們通過貝葉斯公式可以由“詞語-主題”矩陣計算出“主題-文檔”矩陣。在M過程中,我們再用“主題-文檔”矩陣重新計算“詞語-主題”矩陣。這個過程一直這樣疊代下去。EM算法的神奇之處就在于它可以保證這個疊代過程是收斂的。也就是說,我們在反複疊代之後,就一定可以得到趨向于真實值的 Φ和 Θ。

  有了主題模型,我們該怎麼使用它呢?它有什麼優點呢?我總結了以下幾點:

  1)它可以衡量文檔之間的語義相似性。對于一篇文檔,我們求出來的主題分布可以看作是對它的一個抽象表示。對于機率分布,我們可以通過一些距離公式(比如KL距離)來計算出兩篇文檔的語義距離,進而得到它們之間的相似度。

  2)它可以解決多義詞的問題。回想最開始的例子,“蘋果”可能是水果,也可能指蘋果公司。通過我們求出來的“詞語-主題”機率分布,我們就可以知道“蘋果”都屬于哪些主題,就可以通過主題的比對來計算它與其他文字之間的相似度。

  3)它可以排除文檔中噪音的影響。一般來說,文檔中的噪音往往處于次要主題中,我們可以把它們忽略掉,隻保持文檔中最主要的主題。

  4)它是無監督的,完全自動化的。我們隻需要提供訓練文檔,它就可以自動訓練出各種機率,無需任何人工标注過程。

  5)它是跟語言無關的。任何語言隻要能夠對它進行分詞,就可以進行訓練,得到它的主題分布。

  綜上所述,主題模型是一個能夠挖掘語言背後隐含資訊的利器。近些年來各大搜尋引擎公司都已經開始重視這方面的研發工作。語義分析的技術正在逐漸深入到搜尋領域的各個産品中去。在不久的将來,我們的搜尋将會變得更加智能,讓我們拭目以待吧。

LDA基本介紹以及LDA源碼分析(BLEI)

<a href="http://www.cnblogs.com/lixiaolun/p/4458126.html" target="_blank">http://www.cnblogs.com/lixiaolun/p/4458126.html</a>

繼續閱讀