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

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

先說一下最有可能的問題,固然,你能夠先按照下面的過程去配置,若是有麻煩再回過頭來看看。學習

若是出現如下錯誤:
 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的版本ui

gcc --versionspa

安裝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就是用訓練好的模型進行文檔主題分佈的推斷。你們能夠試試,在博主的數據集上效果很好。

相關文章
相關標籤/搜索