主題模型-LDA淺析

個性化推薦、社交網絡、廣告預測等各個領域的workshop上都提到LDA模型,感覺這個模型的應用挺廣泛的,會后抽時間了解了一下LDA,做一下總結:

(一)LDA作用

? ? ? ? 傳統判斷兩個文檔相似性的方法是通過查看兩個文檔共同出現的單詞的多少,如TF-IDF等,這種方法沒有考慮到文字背后的語義關聯,可能在兩個文檔共同出現的單詞很少甚至沒有,但兩個文檔是相似的。

? ? ? ??舉個例子,有兩個句子分別如下:

? ? ? ?? ? ? ???“喬布斯離我們而去了。”

? ? ? ??? ? ? ??“蘋果價格會不會降?”

? ? ? ??可以看到上面這兩個句子沒有共同出現的單詞,但這兩個句子是相似的,如果按傳統的方法判斷這兩個句子肯定不相似,所以在判斷文檔相關性的時候需要考慮到文檔的語義,而語義挖掘的利器是主題模型,LDA就是其中一種比較有效的模型。

? ? ? ??在主題模型中,主題表示一個概念、一個方面,表現為一系列相關的單詞,是這些單詞的條件概率。形象來說,主題就是一個桶,里面裝了出現概率較高的單詞,這些單詞與這個主題有很強的相關性。

? ? ? ??怎樣才能生成主題?對文章的主題應該怎么分析?這是主題模型要解決的問題。

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


? ? ? ??這個概率公式可以用矩陣表示:


? ? ? ??其中”文檔-詞語”矩陣表示每個文檔中每個單詞的詞頻,即出現的概率;”主題-詞語”矩陣表示每個主題中每個單詞的出現概率;”文檔-主題”矩陣表示每個文檔中每個主題出現的概率。

? ? ? ??給定一系列文檔,通過對文檔進行分詞,計算各個文檔中每個單詞的詞頻就可以得到左邊這邊”文檔-詞語”矩陣。主題模型就是通過左邊這個矩陣進行訓練,學習出右邊兩個矩陣。

? ? ? ??主題模型有兩種:pLSA(ProbabilisticLatent Semantic Analysis)和LDA(Latent Dirichlet Allocation),下面主要介紹LDA。

(二)LDA介紹

? ? ? ??如何生成M份包含N個單詞的文檔,LatentDirichlet Allocation這篇文章介紹了3方法:

? ? ? ??方法一:unigram model

? ? ? ??該模型使用下面方法生成1個文檔:

? ? ? ??For each ofthe N words w_n:?
? ? ? ??? ? ? ??Choose a word w_n ~ p(w);?

? ? ? ??其中N表示要生成的文檔的單詞的個數,w_n表示生成的第n個單詞w,p(w)表示單詞w的分布,可以通過語料進行統計學習得到,比如給一本書,統計各個單詞在書中出現的概率。

? ? ? ??這種方法通過訓練語料獲得一個單詞的概率分布函數,然后根據這個概率分布函數每次生成一個單詞,使用這個方法M次生成M個文檔。其圖模型如下圖所示:


? ? ? ??方法二:Mixture of unigram

? ? ? ??unigram模型的方法的缺點就是生成的文本沒有主題,過于簡單,mixture of unigram方法對其進行了改進,該模型使用下面方法生成1個文檔:

? ? ? ??Choose a topicz ~ p(z);?

? ? ? ??For each ofthe N words w_n:?

? ? ? ??? ? ? ??Choose a word w_n ~ p(w|z);?

? ? ? ??其中z表示一個主題,p(z)表示主題的概率分布,z通過p(z)按概率產生;N和w_n同上;p(w|z)表示給定z時w的分布,可以看成一個k×V的矩陣,k為主題的個數,V為單詞的個數,每行表示這個主題對應的單詞的概率分布,即主題z所包含的各個單詞的概率,通過這個概率分布按一定概率生成每個單詞。

? ? ? ??這種方法首先選選定一個主題z,主題z對應一個單詞的概率分布p(w|z),每次按這個分布生成一個單詞,使用M次這個方法生成M份不同的文檔。其圖模型如下圖所示:


? ? ? ??從上圖可以看出,z在w所在的長方形外面,表示z生成一份N個單詞的文檔時主題z只生成一次,即只允許一個文檔只有一個主題,這不太符合常規情況,通常一個文檔可能包含多個主題。

? ? ? ??方法三:LDA(Latent Dirichlet Allocation)

? ? ? ??LDA方法使生成的文檔可以包含多個主題,該模型使用下面方法生成1個文檔:

? ? ? ??Chooseparameter θ ~ p(θ);?

? ? ? ??For each ofthe N words w_n:?

? ? ? ??? ? ? ??Choose a topic z_n ~ p(z|θ);?

? ? ? ??? ? ? ??Choose a word w_n ~ p(w|z);?

? ? ? ??其中θ是一個主題向量,向量的每一列表示每個主題在文檔出現的概率,該向量為非負歸一化向量;p(θ)是θ的分布,具體為Dirichlet分布,即分布的分布;N和w_n同上;z_n表示選擇的主題,p(z|θ)表示給定θ時主題z的概率分布,具體為θ的值,即p(z=i|θ)= θ_i;p(w|z)同上。

? ? ? ??這種方法首先選定一個主題向量θ,確定每個主題被選擇的概率。然后在生成每個單詞的時候,從主題分布向量θ中選擇一個主題z,按主題z的單詞概率分布生成一個單詞。其圖模型如下圖所示:


? ? ? ??從上圖可知LDA的聯合概率為:


? ? ? ??把上面的式子對應到圖上,可以大致按下圖理解:


? ? ? ??從上圖可以看出,LDA的三個表示層被三種顏色表示出來:

? ? ? ??1. corpus-level(紅色):α和β表示語料級別的參數,也就是每個文檔都一樣,因此生成過程只采樣一次。

? ? ? ??2.document-level(橙色):θ是文檔級別的變量,每個文檔對應一個θ,也就是每個文檔產生各個主題z的概率是不同的,所有生成每個文檔采樣一次θ。

? ? ? ??3. word-level(綠色):z和w都是單詞級別變量,z由θ生成,w由z和β共同生成,一個 單詞w對應一個主題z。

? ? ? ??通過上面對LDA生成模型的討論,可以知道LDA模型主要是從給定的輸入語料中學習訓練兩個控制參數α和β,學習出了這兩個控制參數就確定了模型,便可以用來生成文檔。其中α和β分別對應以下各個信息:

? ? ? ??α:分布p(θ)需要一個向量參數,即Dirichlet分布的參數,用于生成一個主題θ向量;

? ? ? ??β:各個主題對應的單詞概率分布矩陣p(w|z)。

? ? ? ??把w當做觀察變量,θ和z當做隱藏變量,就可以通過EM算法學習出α和β,求解過程中遇到后驗概率p(θ,z|w)無法直接求解,需要找一個似然函數下界來近似求解,原文使用基于分解(factorization)假設的變分法(varialtional inference)進行計算,用到了EM算法。每次E-step輸入α和β,計算似然函數,M-step最大化這個似然函數,算出α和β,不斷迭代直到收斂。

?

? ? ? ??參考文獻:

David M. Blei, AndrewY. Ng, Michael I. Jordan,?LatentDirichlet Allocation, Journal of Machine Learning Research 3, p993-1022,2003

【JMLR’03】Latent Dirichlet Allocation (LDA)- David M.Blei

搜索背后的奧秘——淺談語義主題計算

http://bbs.byr.cn/#!article/PR_AI/2530?p=1

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387331.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387331.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387331.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

dorado-SplitSpanel控件

1.這是一個界面布局控件 2.分為SideControl邊區域和MainControl主區域 3.常用屬性 3.1 collapsed:打開頁面時,邊區域是否顯示 3.2 position:邊區域占總的大小 轉載于:https://www.cnblogs.com/ergougougou/p/10438752.html

mysql-視圖、事物等

一、視圖 視圖是一個虛擬表(非真實存在),其本質是【根據SQL語句獲取動態的數據集,并為其命名】,用戶使用時只需使用【名稱】即可獲取結果集,可以將該結果集當做表來使用。 使用視圖我們可以把查詢過程中的臨…

CAFFE怎樣跑起來

0、參考文獻 [1]caffe官網《Training LeNet on MNIST with Caffe》; [2]薛開宇《讀書筆記4學習搭建自己的網絡MNIST在caffe上進行訓練與學習》([1]的翻譯版,同時還有作者的一些注解,很贊); 1、*.sh文件如何執行? ①方…

運行caffe自帶的兩個簡單例子

為了程序的簡潔,在caffe中是不帶練習數據的,因此需要自己去下載。但在caffe根目錄下的data文件夾里,作者已經為我們編寫好了下載數據的腳本文件,我們只需要聯網,運行這些腳本文件就行了。 注意:在caffe中運…

quartz.net 執行后臺任務

... https://www.cnblogs.com/zhangweizhong/category/771057.html https://www.cnblogs.com/lanxiaoke/category/973331.html 宿主在控制臺程序中 using System;using System.Collections.Specialized;using System.IO;using System.Threading.Tasks;using Quartz;using Quart…

運行caffe自帶的mnist實例詳細教

為了程序的簡潔,在caffe中是不帶練習數據的,因此需要自己去下載。但在caffe根目錄下的data文件夾里,作者已經為我們編寫好了下載數據的腳本文件,我們只需要聯網,運行這些腳本文件就行了。 Mnist介紹:mnist是…

6 軟件的安裝

6 軟件包管理 6.1 簡介 軟件包分類: 源碼包 源代碼(大多數是C語言) 安裝時慢,容易報錯 >腳本安裝包 對源碼包進行改裝,使安裝更簡單,不多。 rpm包 二進制包 Ubuntu系列的二進制包不是rpm&#xf…

STD函數的內部計算公式

各股票軟件的標準差函數STD是不同的,而布林線的上下軌是以STD為基礎計算出來的,所以使用布林線應小心。以2008/3/28的上證綜指為例,利用如下代碼:"收盤價3日STD:STD(CLOSE,3);",三日收盤價分別是&#xff1a…

caffe路徑正確,卻讀不到圖片

調試caffe,用已有的網絡訓練自己的數據集的時候(我這里做的是二分類)。在生成均值文件之后,開始train,發現出現了這個問題。 1,路徑正確,卻讀不到圖片。 [db_lmdb.hpp:15] Check failed: mdb_st…

Eclipse可以執行jsp文件卻無法訪問Tomcat主頁

點擊Servers,然后雙擊本地的Tomcat服務器 出現如下界面 這里要選擇第二項 再重新啟動Tomcat就行了 轉載于:https://www.cnblogs.com/lls1350767625/p/10452565.html

caffe調用的一個例子

本文是學習Caffe官方文檔"ImageNet Tutorial"時做的,同樣由于是Windows版本的原因,很多shell腳本不能直接使用,走了不少彎路,但是收獲也不少。比如:如何讓shell腳本在Windows系統上直接運行、如何去用Caffe給…

孔銅的銅厚

---恢復內容開始--- 表面處理方式注釋&#xff1a; 噴錫 噴錫鉛合金是一種最低成本PCB表面有鉛工藝&#xff0c;它能保持良好的可焊接性。但對于精細引腳間距(<0.64mm)的情況&#xff0c;可能導致焊料的橋接和厚度問題。 無鉛噴錫 一種無鉛表面處理工藝&#xff0c;符合“環…

1 kafka簡介

Publish-subscribe distributed messaging system. A distributed commit log. kafka集群中的服務器都叫broker。 客戶端有兩類&#xff1a;producer、consumer。 客戶端和broker之間使用TCP協議。 不同業務系統的消息通過topic進行區分。 消息的topic會分區&#xff0c;以…

各種機器學習的優缺點及應用場景

目錄 正則化算法&#xff08;Regularization Algorithms&#xff09; 集成算法&#xff08;Ensemble Algorithms&#xff09; 決策樹算法&#xff08;Decision Tree Algorithm&#xff09; 回歸&#xff08;Regression&#xff09; 人工神經網絡&#xff08;Artificial…

微信公眾號接入開發者模式,服務器配置Token驗證

概述 接入微信公眾平臺開發&#xff0c;開發者需要按照如下步驟完成&#xff1a; 填寫服務器配置驗證服務器地址的有效性依據接口文檔實現業務邏輯官方指南文檔服務器配置 服務器地址(URL)&#xff1a;填寫完URL后&#xff0c;微信服務器會發送GET請求&#xff0c;并攜帶以下參…

2 kafka安裝

單節點&#xff1a; 1、解壓kafka壓縮包到安裝目錄&#xff08;自己指定&#xff09;&#xff1b; 2、進入kafka目錄并執行命令 > bin/zookeeper-server-start.sh config/zookeeper.properties #如果報錯&#xff0c;修改kafka-run-class.sh&#xff0c;將 -XX:UseComp…

TensorFlow自帶例子

TensorFlow自帶例子已經包含了android和ios下的攝像頭圖像分類示例Inception&#xff0c;這里補充一個Windows下的&#xff0c;使用AForge庫(www.aforgenet.com)操作攝像頭。 代碼在這里下載&#xff0c;使用Visual Studio 2017編譯。 http://files.cnblogs.com/files/autosoft…

遇到Visual Studio 當前不會命中斷點.還沒有為該文檔加載任何符號的情況

一.問題及原因 有這樣一種調用邏輯:A.exe調用B.dll.現在想要在B的源代碼中打斷點,從A發起進行調試,卻給出了"當前不會命中斷點.還沒有為該文檔加載任何符號"的提示.感覺十分奇怪,各種重新生成,重啟VS都沒啥用,最后不得以網上搜了一番,找到了問題的根源. 原來我把舊的…

java01基礎簡介

1 java概述 開發服務器端應用程序最流行語言&#xff0c;產生網頁、運行后端邏輯。 當對java了解到一定程度&#xff0c;閱讀源碼才能解決問題。 Applet&#xff1a;在網頁中運行的java程序&#xff0c; Java的應用領域&#xff1a; 桌面應用系統開發 企業級應用開發 多媒…