電子科技大學電子商務實驗室Kai Yip,歡迎同行指正,也歡迎互相指導,學習。html
廣告打完,進入正題。linux
關於程序運行結果的分析請參照個人另外一篇博客:http://www.cnblogs.com/nlp-yekai/p/3858705.htmlweb
Gibbslda有不少版本,我所用的版本爲C++版(下載地址http://gibbslda.sourceforge.net/),平臺是linux,博主試過windows上運行,有兩個主要問題很煩~,一個是path,一個是vc平臺太大。最後仍是投入了ubuntu的懷抱,感受配置好g++環境後速度還不錯。因爲系統版本等緣由,不一樣的狀況下可能會出現或多或少的問題,在作lda抽取的過程當中,參考了幾個博客,地址以下,我在這裏作了一個總結,基本上應該避免了網上教程歷來都不能使用的毛病。因此若是按照博主的過程出現問題,能夠留言或者郵箱。ubuntu
http://weblab.com.cityu.edu.hk/blog/luheng/2011/06/24/%E7%94%A8gibbslda%E5%81%9Atopic-modeling/windows
http://gibbslda.sourceforge.net/函數
先說一下最有可能的問題,固然,你能夠先按照下面的過程去配置,若是有麻煩再回過頭來看看。學習
sudo apt-get install build-essential測試
而後查看本身系統的GCC的版本ui
gcc --versionspa
安裝G++
sudo apt-get install g++-4.4(4.4是GCC的版本號)
查看G++的版本
g++ --version
問題三,注意ubuntu目錄會區分大小寫的問題
OK!如今開始模擬整個過程:
第二步:把下載的文件放到一個文件夾。對於沒接觸過Linux的同窗來講,你能夠放到,,,好比說/home/user(你的用戶名)/LDA/ 下面。對於在Windows上用虛擬Ubuntu的同窗來講,在你找的地方,隨便造個文件夾裝下這文件就行了。
第三步:解壓縮及安裝。對於沒用過Linux的同窗來講,沒有右鍵解壓縮這個故事是很痛苦的。好吧,慢慢來。好比你這個狗屁文件放到了/home/user/LDA/下面。而你甚至連你在什麼文件夾下都不知道。你能夠這樣。在Terminal(也就是一個黑屏幕,只能輸入命令的那種)裏面輸入(下面的$表示一行命令的開始,不用輸入)
$ cd /home/user/LDA/
就好了。而後,解壓縮。輸入
$ gunzip GibbsLDA++-0.2.tar.gz(這個gunzip後面是你剛下載的文件的文件名,我下的是GibbsLDA++-0.2)
$ tar -xf GibbsLDA++-0.2.tar
而後進到你剛解壓出來的那個文件夾(假設你如今仍是在/home/user/LDA/下面)。輸入
$ cd \GibbsLDA++-0.2
如今,你已經在/home/user/LDA/GibbsLDA++-0.2/ 這個文件夾下面了已而後安裝GibsLDA。輸入
$ make clean
$ make all
到目前爲止,你已經大功告成了。安裝完成。
第四步:準備你要讓計算機去作Topic Modeling的文件。在C++的環境裏,Topic Modeling須要這樣的一個文件。文件格式是dat。這是最原始的txt文件。你也能夠用任何軟件存成txt文件以後,直接把後綴改爲dat就行。好比,你的文件包含1,000篇文章。那你的文件就是這樣的
第1行是你總共的文章篇數,在咱們的例子裏面是1000
第2行到第1001行就是你的那些文章,每篇文章佔一行。對於英文來講,每一個詞之間已經用空格分開了,可是中文不行,因此你要先對文章進行切詞。切詞這事兒,就不歸我這篇小臭長文管了。
第五步:運行GibbsLDA++,獲得你要的結果。
將你要跑的文件,好比就叫test.dat吧。將文件放到/home/user/LDA/ 下面,也就是/home/user/LDA/test.dat
而後進入到你裝了GibbsLDA++的文件夾,也就是/home/user/LDA/GibbsLDA++-0.2/,而後運行指令。其實就是在Terminal裏面輸入
$ cd /home/user/LDA/GibbsLDA++-0.2/
$ lda -est [-alpha <double>] [-beta <double>] [-ntopics <int>] [-niters <int>] [-savestep <int>] [-twords <int>] -dfile <string>
這句話「$ lda -est [-alpha <double>] [-beta <double>] [-ntopics <int>] [-niters <int>] [-savestep <int>] [-twords <int>] -dfile <string>」裏面實際上是GibbsLDA進行估算的各類參數設計,你實際輸入的指令多是:
$ src/lda -est -alpha 0.5 -beta 0.1 -ntopics 100 -niters 1000 -savestep 100 -twords 20 -dfile /home/luheng/LDA/test.dat
這意思是,參數alpha是0.5(這個能夠先無論),參數beta是0.1(這個也能夠先無論),產生100個topic,運算迭代1000次,每迭代100次以後的結果都保存出來,每一個topic包含20個詞,要運算的文件是/home/luheng/LDA/test.dat
第六步:看結果。
好了,若是你順利走到這一步,就去看結果吧。結果文件存在你的測試文件所在的目錄。在這個案例中,就是/home/luheng/LDA/ 下面。
會產生相似這樣的文件,不一樣的後綴表示不一樣的結果。全部這些文件均可以用記事本打開。newdocs.dat.others
newdocs.dat.phi
newdocs.dat.tassign
newdocs.dat.theta
newdocs.dat.twords
其中最直接的是.twords文件。這個文件裏面就是你要的n個topic,以及每一個topic下面包含的具體的字詞。
.others裏面是各類你設置的參數
.theta裏面是每篇文章對應你設置的n個topic的「因子載荷」(factor loading)
.phi裏面是每一個topic對應每篇文章的「因子載荷」(factor loading)
.theta 和 .phi 裏面的數據實際上是一回事,互爲轉置罷(transpose)了
模型訓練到此就差很少了。程序自帶的另外兩條命令,-estc的意思是繼續訓練模型,而-inf就是用訓練好的模型進行文檔主題分佈的推斷。你們能夠試試,在博主的數據集上效果很好。