轉載一篇LDA算法使用總結

最近在做基於LDA(Latent Dirichlet Allocation)的文本分類處理,開始學習和接觸了LDA,因爲代碼採用的是Java,所以我選擇的LDA開源工具是JGibbLDA,這個是LDA的Java版本實現,下載地址爲:http://jgibblda.sourceforge.net/ ,當前最新版本爲v1.0。同時對應的C++版本爲GibbsLDA,下載地址爲:http://gibbslda.sourceforge.net/

       感謝Phantom(byr ID)在學習和使用過程中對我的指導和幫助。

   首先下載並解壓,解壓後文件目錄如下所示:


    bin存放的是編譯後的class文件,lib中放args4j-2.0.6.jar,models中存放已經生成好的主題模型示例,src存放那個源文件。我在使用時把jar文件放於工程中,另外直接把src下的jgibblda包複製於項目中。

    1.輸入文件格式

    輸入文件的格式形如下圖所示:


    其中第一行表述訓練語料文檔的數目,之後每一行是一個文檔,每一行的內容是文檔中的詞語。

    2.輸出文件

    輸出文件主要有<model_name>.others、<model_name>.phi、<model_name>.theta、<model_name>.tassign、<model_name>.twords,另外還有一個wordmap.txt文件。其中<model_name>根據採樣迭代次數來指定,如model-00800,最後一次採樣名稱命名爲model-final。

.others文件存儲LDA模型參數,如alpha、beta等。

.phi文件存儲詞語-主題分佈,每一行是一個主題,列內容爲詞語。

.theta文件主題文檔分佈,每一行是一個文檔,列內容是主題概率。

.tassign文件是訓練預料中單詞的主題指定(歸屬),每一行是一個語料文檔。

    3.使用方式

    JGibbLDA可以通過命令行或者代碼調用運行。

    3.1.命令行調用簡介

初次使用訓練模型

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. $ java [-mx512M] -cp bin:lib/args4j-2.0.6.jar jgibblda.LDA -est [-alpha <double>] [-beta <double>] [-ntopics <int>] [-niters <int>] [-savestep <int>] [-twords <int>] –dir <string> -dfile <string>  

-est 從訓練語料中評估出LDA模型

-alpha LDA模型中的alpha數值,默認爲50/K(K是主題數目)

-beta LDA模型中的beta數值,默認是0.1

-ntopics 主題數目,默認值是100

-niters GIbbs採樣的迭代數目,默認值爲2000

-savestep 指定開始保存LDA模型的迭代次數

-dir 訓練語料目錄

-dfile 訓練語料文件名稱

此處需要指出的是dfile最好寫輸入語料文件名稱,而dir指定語料文件所在的目錄,訓練過程中生成的模型文件會默認存放在dir下面。例如語料的絕對路徑爲/usr/Java/models/newDoc.dat,可以設置爲dir=/usr/Java/models,而dfile=newDoc.dat,這樣訓練過程中的模型文件會默認存放在/usr/Java/models下面。

在原有模型上繼續迭代

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. $ java [-mx512M]-cp bin:lib/args4j-2.0.6.jar jgibblda.LDA -estc -dir <string> -model <string> [-niters <int>] [-savestep <int>] [-twords <int>] 

具體參數的含義可以在官網上找到,這裏不一一介紹了。

根據現有LDA模型,預測新語料

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1. $ java [-mx512M] -cp bin:lib/args4j-2.0.6.jar jgibblda.LDA -inf -dir <string> -model <string> [-niters <int>] [-twords <int>] -dfile <string>  

       3.2代碼調用

       初次訓練,生成模型

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1.         LDACmdOption ldaOption = new LDACmdOption();   
  2.         ldaOption.est = true;  
  3.         ldaOption.estc = false;  
  4.         ldaOption.modelName = "model-final";  
  5.         ldaOption.dfile = "newDoc.dat";  
  6.         ldaOption.alpha = 0.5;  
  7.         ldaOption.beta = 0.1;  
  8.         ldaOption.K = 100;  
  9.         ldaOption.niters = 1000;  
  10.         topicNum = ldaOption.K;  
  11.         Estimator estimator = new Estimator();  
  12.         estimator.init(ldaOption);  
  13.         estimator.estimate();  

LDACmdOption類主要用於設置LDA所需的參數,Estimator用於評估生成LDA模型。

根據LDA模型,推斷新語料的LDA主題信息。

[java] view plaincopy在CODE上查看代碼片派生到我的代碼片
  1.         LDACmdOption ldaOption = new LDACmdOption();   
  2.         ldaOption.inf = true;  
  3.         ldaOption.estc = false;  
  4.         ldaOption.dir = "LDAResult";   
  5.         ldaOption.modelName = "model-final";  
  6.         ldaOption.dfile = "predictionDoc.dat";  
  7.         Inferencer inferencer = new Inferencer();   
  8.         inferencer.init(ldaOption);  
  9.         Model newModel = inferencer.inference();
需要指出的是,在根據已訓練的LDA模型預測時,當前目錄中需要包含已有的LDA訓練輸出文件。就上述配置來說,目錄LDAResult下需要包含model-final.others、model-final.phi、model-final.tassign、model-final.theta、model-final.twords、wordmap.txt文件。
測試語料的LDA模型文件將生成在LDAResult文件夾中。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章