主題模型 利用gibbslda做數據集主題抽樣


電子科技大學電子商務實驗室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/

先說一下最有可能的問題,當然,你可以先按照下面的過程去配置,如果有麻煩再回過頭來看看。

如果出現以下錯誤:
 g++ -c -o utils.o utils.cpp
utils.cpp: 在靜態成員函數‘static int utils::parse_args(int, char**, model*)’中:
utils.cpp:69:28: 錯誤: ‘atof’在此作用域中尚未聲明
utils.cpp:72:27: 錯誤: ‘atof’在此作用域中尚未聲明
utils.cpp:75:24: 錯誤: ‘atoi’在此作用域中尚未聲明
utils.cpp:78:29: 錯誤: ‘atoi’在此作用域中尚未聲明
utils.cpp:81:31: 錯誤: ‘atoi’在此作用域中尚未聲明
utils.cpp:84:29: 錯誤: ‘atoi’在此作用域中尚未聲明
utils.cpp: 在靜態成員函數‘static int utils::read_and_parse(std::string, model*)’中:
utils.cpp:270:41: 錯誤: ‘atof’在此作用域中尚未聲明
utils.cpp:273:40: 錯誤: ‘atof’在此作用域中尚未聲明
utils.cpp:276:37: 錯誤: ‘atoi’在此作用域中尚未聲明
utils.cpp:279:37: 錯誤: ‘atoi’在此作用域中尚未聲明
utils.cpp:282:37: 錯誤: ‘atoi’在此作用域中尚未聲明
utils.cpp:285:41: 錯誤: ‘atoi’在此作用域中尚未聲明
make[1]: *** [utils.o] 錯誤 1
make[1]:正在離開目錄 `/home/tonia/GibbsLDA++-0.2/src'
make: *** [all] 錯誤 2
 
解決方法:
1). 在src/utill.cpp 文件頭加入:
#include <stdio.h>  #include <stdlib.h>
2). 在src/utill.h 文件頭加入:
#include <stdlib.h>
3). 在src/lda.cp 文件頭加入:
#include <stdio.h>
4). 重新make
 
問題二,ubuntu g++環境的配置

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!現在開始模擬整個過程:

第一步:下載GibbsLDA++

第二步:把下載的文件放到一個文件夾。對於沒接觸過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就是用訓練好的模型進行文檔主題分布的推斷。大家可以試試,在博主的數據集上效果很好。

 


免責聲明!

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



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