【BTM】Biterm Topic Model 在windows下的運行

本文重在模型代碼運行部分~

附上Github鏈接:xiaohuiyan / BTM

如果在linux環境下,代碼包含 運行示例:

$ cd script

$ sh runExample.sh

windows下可分4步:

第1步: 爲文檔中的單詞建立索引

id從0號開始

python script/indexDocs.py <doc_pt> <dwid_pt> <voca_pt>

<doc_pt> 輸入要索引的文檔,每行是一個文檔,格式爲 “word word…”

<dwid_pt> 輸出文檔索引,每行都是一個格式爲 “wordId wordId…” 的文檔

<voca_pt> 輸出詞彙文件,每行是一個 “wordId word” 格式的單詞

比如:(進入script路徑下)

python indexDocs.py api_decs_NN_top10.txt dwid_pt.txt voca_pt.txt

但直接運行可能會報錯,因爲文件的讀寫編碼,所以要改寫下script/indexDocs.py

n(w)2422

 第2步: 主題學習

首先要生成btm.exe文件

我安裝的是codeblocks,先設置環境變量“CodeBlocks\MinGW\bin”,再進行g++編譯。進入src路徑下:

g++ .\infer.cpp .\model.cpp .\main.cpp -o btm

運行:

$ ./src/btm est <K> <W> <alpha> <beta> <n_iter> <save_step> <docs_pt> <model_dir>

<K> int型,主題數

<W> int型,詞彙量大小,應爲<voca_pt>文件的行數~

<alpha> double型,P(z) 的對稱Dirichlet先驗,如1

<beta> double型,P(w|z) 的對稱Dirichlet先驗,如0.01

<n_iter> int型,Gibbs抽樣的迭代次數

<save_step> int型,保存結果的步驟

<docs_pt> string型,訓練文檔的路徑

<model_dir> string型,輸出目錄

運行樣例:

.\btm.exe est 10 2422 1 0.01 200 501 ..\script\dwid_pt.txt .\result\

結果將被寫入目錄 “model_dir”:

  • k10.pw_z:P(w | z)的 K * M 矩陣,假設K = 10
  • k10.pz:P(z)的 K * 1 矩陣,假設K = 10

第3步:推斷文檔的主題比例,即P(z|d)

$ ./src/btm inf <type> <K> <docs_pt> <model_dir>

<type>  string型,4種選擇:sum_w, sum_b, lda, mix. sum_b

<docs_pt> string型,要推斷的文檔路徑(前面生成的“dwid_pt.txt”)

如:

.\btm.exe inf sum_b 10 ..\script\dwid_pt.txt .\result\

結果將輸出到 “model_dir”:

  • k10.pz_d:P(z | d) 的 N*K 矩陣,假設K = 10

第4步:結果顯示

說明主題的主題詞及其在集合中的比例

python script/topicDisplay.py <model_dir> <K> <voca_pt>

<model_dir> BTM的輸出目錄

<voca_pt> 詞彙表文件

可能會出錯:編碼問題

Traceback (most recent call last):
  File ".\topicDisplay.py", line 48, in <module>
    voca = read_voca(voca_pt)
  File ".\topicDisplay.py", line 12, in read_voca
    for l in open(pt):
UnicodeDecodeError: 'gbk' codec can't decode byte 0x99 in position 5363: illegal multibyte sequence

 修改對應地方的編碼爲utf-8

如果感覺參數含義不清楚,多看看 “BTM-master\script” 路徑下的 runExample.sh

運行示例:進入script路徑下

python .\topicDisplay.py ..\src\NN\ 10 .\voca_pt.txt

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章