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

本文重在模型代码运行部分~

附上Github链接:xiaohuiyan / BTM

如果在linux环境下,代码包含 运行示例:

$ cd script

$ sh runExample.sh

windows下可分4步:

第1步: 为文档中的单词建立索引

id从0号开始

python script/indexDocs.py   

 输入要索引的文档,每行是一个文档,格式为 “word word…”

 输出文档索引,每行都是一个格式为 “wordId wordId…” 的文档

 输出词汇文件,每行是一个 “wordId word” 格式的单词

比如:(进入script路径下)

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

但直接运行可能会报错,因为文件的读写编码,所以要改写下script/indexDocs.py

【BTM】Biterm Topic Model 在windows下的运行_第1张图片

n(w)2422

 第2步: 主题学习

首先要生成btm.exe文件

我安装的是codeblocks,先设置环境变量“CodeBlocks\MinGW\bin”,再进行g++编译。进入src路径下:

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

运行:

$ ./src/btm est        

int型,主题数

int型,词汇量大小,应为文件的行数~

double型,P(z) 的对称Dirichlet先验,如1

 double型,P(w|z) 的对称Dirichlet先验,如0.01

 int型,Gibbs抽样的迭代次数

int型,保存结果的步骤

string型,训练文档的路径

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    

  string型,4种选择:sum_w, sum_b, lda, mix. sum_b

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   

BTM的输出目录

词汇表文件

可能会出错:编码问题

Traceback (most recent call last):
  File ".\topicDisplay.py", line 48, in
    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

 

你可能感兴趣的:(主题模型)