使用sLDA

来源:互联网 发布:ubuntu gcc下载 编辑:程序博客网 时间:2024/06/06 08:54

说明

LDA是一个文本主题分类模型,sLDA是有监督的LDA。LDA的具体讲解请参考博客 通俗理解LDA主题模型 。在 https://www.cs.princeton.edu/~blei/topicmodeling.html 上有LDA的多种语言编写的程序。由于实验需要,我用的是C++版本的 sLDA ,上面有算法、说明以及实验数据。

使用方法

只介绍在Linux系统上的使用方法,我的系统是CentOS 6.5 64bit

安装GSL库

在GSL的镜像页面中找一个版本(我用的是gsl-1.9.tar.gz)。下面是安装过程:

# 可以切换到root用户,不然输入命令需要sudo# /usr/local是GSL的下载目录,此目录可以根据自己情况而定cd /usr/local# 下载wget http://mirrors.ustc.edu.cn/gnu/gsl/gsl-1.9.tar.gz# 解压tar zxvf gsl-1.9.tar.gz# 进入解压后的文件夹cd gsl-1.9./configure# 编译make# 安装make install

安装后使用可能会出现无法找到共享库的问题,执行下面一句可以解决(网上还有其他的方法)

ldconfig /usr/local/lib

下载并编译slda代码

下载链接: http://www.cs.cmu.edu/~chongw/slda/slda.tgz

# 下面这个目录根据自己情况而定,随便选一个cd ~/workspace# 下载wget http://www.cs.cmu.edu/~chongw/slda/slda.tgz# 解压tar zxvf slda.tgz# 进入解压后的文件夹cd slda# 编译make

此时出现了一个名字为slda的可执行文件,就可以使用了。

数据格式说明

下载网站提供的 数据,解压后可以看到里面有四个文件:train-data.dat,train-label.dat,test-data.dat,test-label.dat,分别是训练集和测试集。下面以训练集为例说明:train-data.dat和train-label.dat分别是训练数据和对应的分类标签,

train-data.dat

其中每一行代表一篇文档,格式为[M] [term_1]:[count] [term_2]:[count] … [term_N]:[count]
[M]表示这篇文档中出现的所有不相同的词数,[term_i]:[count] 表示编号term_i对应的词在这篇文档中出现了 count 次。同一个编号term_i在不同文档中表示相同的词。文件部分内容如下:

136 0:9 1:2 3:2 4:21 5:4 6:29 7:15 8:14 9:49 10:25 11:38 13:6 14:2 15:41 16:7 19:33 21:13 22:26 23:7 24:14 25:9 26:5 27:19 28:12 29:10 30:12 33:29 34:18 35:16 36:17 37:7 38:17 40:20 41:20 42:5 43:7 44:12 45:38 46:30 47:44 48:13 49:10 50:1 52:20 53:16 54:42 55:34 56:6 57:3 58:5 59:35 60:6 61:13 62:12 63:56 64:66 65:1 66:6 68:7 69:11 70:3 71:68 72:29 73:3 74:5 75:29 76:6 77:4 78:2 79:19 80:12 81:10 82:24 83:14 84:26 85:14 86:12 88:12 89:4 90:36 91:15 92:4 93:9 94:23 95:6 97:26 98:4 99:3 102:12 104:25 105:20 106:22 107:9 110:7 111:33 112:1 113:9 114:22 115:9 116:1 117:19 118:28 119:30 121:12 122:8 125:14 126:61 127:7 129:8 130:19 131:16 132:11 134:4 135:6 136:21 137:66 138:45 139:5 140:6 141:3 142:10 143:6 144:4 145:5 146:37 147:41 148:9 149:25 150:20 151:26 152:64 153:27 154:20 155:24 156:14 157:21152 0:17 1:3 3:11 4:12 5:15 6:72 7:14 8:17 9:6 10:77 11:22 12:3 13:4 14:4 15:38 16:19 18:4 19:20 20:4 21:20 22:18 23:8 24:1 25:7 26:6 27:16 28:19 29:12 30:24 31:20 33:13 34:10 35:10 36:12 37:10 38:9 39:2 40:22 41:10 42:5 43:8 44:15 45:12 46:12 47:25 48:16 49:89 50:48 51:7 52:12 53:14 54:38 55:10 56:52 57:3 58:13 59:22 60:30 61:9 62:16 63:25 64:13 65:12 66:2 68:6 69:9 70:6 71:18 72:22 73:10 74:10 75:47 76:14 77:8 78:5 79:2 80:11 81:17 82:13 83:8 84:4 85:8 86:6 87:3 88:3 89:26 90:10 91:12 92:20 93:9 94:10 95:51 97:11 98:9 99:15 101:1 102:10 103:2 104:11 105:7 106:14 107:13 108:3 109:1 110:8 111:30 112:6 113:78 114:7 115:26 116:3 117:21 118:9 119:76 120:2 121:27 122:5 123:3 124:20 125:24 126:19 127:11 128:1 129:22 130:18 131:15 132:9 133:2 134:10 135:15 136:21 137:8 138:18 139:3 140:22 141:36 142:8 143:17 144:4 145:8 146:14 147:11 148:9 149:15 150:13 151:15 152:19 153:11 154:6 155:8 156:18 157:66152 0:8 1:7 2:10 3:10 4:20 5:3 6:59 7:7 8:20 9:9 10:17 11:9 12:3 13:12 14:4 15:18 16:9 18:2 19:5 20:12 21:7 22:19 23:5 24:43 25:1 27:12 28:14 29:20 30:6 31:22 32:4 33:24 34:13 35:7 36:70 37:5 38:6 40:6 41:20 42:7 43:4 44:3 45:10 46:12 47:13 48:5 49:421 50:61 51:1 52:6 53:7 54:14 55:10 56:53 57:7 58:10 59:33 60:9 61:12 62:3 63:6 64:38 65:1 66:9 68:2 69:13 70:8 71:16 72:19 73:6 74:7 75:76 76:7 77:5 78:4 79:8 80:7 81:9 82:14 83:9 84:10 85:13 86:1 87:16 88:28 89:24 90:10 91:7 92:9 93:15 94:10 95:11 97:8 98:14 99:6 100:5 101:18 102:20 103:8 104:5 105:11 106:8 107:15 108:4 109:2 110:11 111:16 113:46 114:11 115:12 116:5 117:11 118:22 119:42 120:5 121:6 122:4 123:9 124:30 125:10 126:12 127:11 128:1 129:5 130:11 131:12 132:8 133:4 134:8 135:9 136:8 137:9 138:11 139:2 140:14 141:5 142:6 143:9 144:5 145:11 146:33 147:7 148:10 149:12 150:14 151:12 152:17 153:16 154:9 155:4 156:3 157:72

train-label.dat

其中每一行是train-data.dat文件中相应行所代表文档的类别编号。假设文档一共分了C类,则编号为:0,1,2,…,C-1。文件部分内容如下:

    0    0    1    1    2

使用

slda的第一个参数可以取两个值,est 和 inf,分别代表训练模型和测试,下面解释一下参数的设置

训练模型

slda [est] [data] [label] [settings] [alpha] [k] [seeded/random/model_path] [directory]

[data] 和 [label] 就是训练集和训练集对应的标签
[settings] 是一些参数的配置文件,在下载的slda代码包中有,可以自己修改
[alpha] 是主题分布的先验分布(即Dirichlet 分布)的参数,这个值的设置请参考 通俗理解LDA主题模型 。经过测试0.1,0.5和1三个值,发现0.5比较好(对于我的实验)。可以在实验时根据结果不断调整。
[k] 代表分类数,即label文件中数字的种类数(0,1,2,3,…,k-1)
[seeded/random/model_path] 具体不是很清楚,我选的是random
[directory] 训练出来的模型的存放位置

示例:

./slda est train-data.dat train-label.dat settings.txt 0.5 8 random ./model

执行结束后,会在当前目录下出现一个model文件夹,里面的final.model就是我们训练出来的模型,这是一个可以被函数加载的二进制文件,对应的final.model.txt是我们可以直接看的。

测试

slda [inf] [data] [label] [settings] [model] [directory]

[model] : 上一步训练的模型
其他参数意同“训练模型”中的参数

示例:

./slda inf test-data.dat test-label.dat settings.txt ./model/final.model ./test_out

执行后,会显示准确率,test_out/inf-labels.dat文件即是测试出来的分类结果。

2 0
原创粉丝点击