電子科技大學電子商務實驗室Kai Yip,歡迎同行指正,也歡迎互相指導,學習。
廣告打完,進入正題。
關於程序運行結果的分析請參照我的另一篇博客:http://www.cnblogs.com/nlp-yekai/p/3858705.html
Gibbslda有很多版本,我所用的版本為C++版(下載地址http://gibbslda.sourceforge.net/),平台是linux,博主試過windows上運行,有兩個主要問題很煩~,一個是path,一個是vc平台太大。最后還是投入了ubuntu的懷抱,感覺配置好g++環境后速度還不錯。由於系統版本等原因,不同的情況下可能會出現或多或少的問題,在做lda抽取的過程中,參考了幾個博客,地址如下,我在這里做了一個總結,基本上應該避免了網上教程從來都不能使用的毛病。所以如果按照博主的過程出現問題,可以留言或者郵箱。
http://weblab.com.cityu.edu.hk/blog/luheng/2011/06/24/%E7%94%A8gibbslda%E5%81%9Atopic-modeling/
http://gibbslda.sourceforge.net/
先說一下最有可能的問題,當然,你可以先按照下面的過程去配置,如果有麻煩再回過頭來看看。
sudo apt-get install build-essential
然后查看自己系統的GCC的版本
gcc --version
安裝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就是用訓練好的模型進行文檔主題分布的推斷。大家可以試試,在博主的數據集上效果很好。