先规范一下发间:bow的韵音同low而不是cow。
bow包含三个项目:rainbow用于文本分类;arrow用于文本检索;crossbow用于文本聚类。这三个程序是独立的。
Rainbow
使用rainbow前首先要建立原始文档的一个model----包含了原始文档的一些统计信息,使用rainbow命令时通过-d选项来指定model的路径。
rainbow -d ~/model --index ~/20_newsgroups/*
以上命令是为 20_newsgroups所有分类创建model,生成~/model文件。
--index目录可以分别写:rainbow -d ~/model --index ~/20_newsgroups/talk.politics.guns ~/20_newsgroups/talk.politics.mideast ~/20_newsgroups/talk.politics.misc
--index可简写为-i
rainbow不支持一个文档拥有多个类标签。
各个文档属于哪个类都已经包含在了model中。
rainbow -d model --print-doc-names 打印出model中包含的所有文件的文件名(包括完整路径)。
默认情况下rainbow在建立model把字母都转换成了小写,并去除了停用词。
当然用rainbow建立model时还有很多选项可以指定,比如--skip-html可以路过“<"和“>"之间的所有字符;--skip-headers (or -h)选项跳过新闻组或邮件的headers before beginning tokenization.
为原始文档建立好索引后就可以来进行分类了。
rainbow -d ~/model --test-set=0.4 --test=3
表示输出3次试验的结果,60%的文档作为训练集,剩下40%作为测试集。
输出类似于:
/home/mccallum/20_newsgroups/talk.politics.misc/178939 talk.politics.misc talk.politics.misc:0.98 talk.politics.mideast:0.015 talk.politics.guns:0.005
指出了一个文档属于各个类的概率。
bow路径下还有一个perl脚本文件--rainbow-stats,它的输入是以上分类命令的输出,它的输出是平均精度、标准差和混淆矩阵。
rainbow -d ~/model --test-set=0.4 --test=2 | rainbow-stats
进行2次trail,输出形如:
Trial 1
Correct: 1077 out of 1200 (89.75 percent accuracy)
- Confusion details, row is actual, column is predicted
classname 0 1 2 :total
0 talk.politics.guns 378 2 20 :400 94.50%
1 talk.politics.mideast 7 374 19 :400 93.50%
2 talk.politics.misc 57 18 325 :400 81.25%
Percent_Accuracy average 90.38 stderr 0.44
--test-set选项也可以为整数,如--test-set=30,将试图从集合中随机选取30个文档作为测试集,并尽可能保证我30个文档平均分布于各个类中。
--test-set=200pc表示每个分类中随机选取200个文档放入测试集。
你甚至可以具体指定哪个文件放在测试集中--test-set=file1 fil2 各个文件用空格分开。
同理可以指定train-set:rainbow -d ~/model --test-set=file1 --train-set=file2 --test=1
一个文件不能同时出现在--teat-set和--train-set中。
默认情况下不在--test-set中的文档都在--train-set中,我们也可以反过来指定:
rainbow -d ~/model --train-set=1pc --test-set=remaining --test=1
如果测试集不在model中,也可以另外指定:rainbow -d ~/model --test-files ~/more-talk.politics/*
特征项选择
--prune-vocab-by-infog