摘要:CRF++ 分词实验
1. 安装
在Windows下的安装很简单,其实严格来讲不能说是安装。我们解压我们下载的压缩包文件到某一个目录下面。你可能会得到如下所示的文件,(版本不同,可能会有所不同。)

- doc文件夹:就是官方主页的内容
- example文件夹:有四个任务的训练数据(test.data)、测试数据(train.data)和模板文件(template),还有一个执行脚本文件exec.sh。
- sdk文件夹:CRF++的头文件和静态链接库。
- clr_learn.exe:CRF++的训练程序
- crl_test.exe:CRF++的测试程序
- libcrffpp.dll:训练程序和测试程序需要使用的静态链接库。
实际上,需要使用的就是crf_learn.exe,crf_test.exe和libcrfpp.dll,这三个文件。
2. 使用例子
2.1 训练
先拿example中的某个例子做一下测试。例如:example中 seg 文件夹,其中原有4个文件:exec.sh;template;test.data;train.data。将crf_learn.exe;crf_test.exe;libcrfpp.dll三个文件复制到这个文件夹(seg)底下。
在命令窗口中,cd到该文件夹,然后输入以下命令进行训练模型。
1 | crf_learn template_file train_file model_file |
你可以看到控制台上打印处的信息,并会产生一个新的文件:model。这个训练过程的时间、迭代次数等信息就会输出到控制台上(感觉是crf_learn程序的输出信息到标准输出流上了),如果想要保存这些信息,我们可以将这些标准输出流到文件,命令格式为:
模型就用它例子中的模型
1 | crf_learn template_file train_file model_file >> train_info_file |
在这里有四个参数可以调整:
-a CRF-L2 or CRF-L1
规范化算法的选择。默认是CRF-L2。一般来说L2算法效果要比L1算法稍微好一点,虽然L1算法中非零特征的数值要比L2中大幅度的小。
-c float
这个参数设置CRF的hyper-parameter。c的数值越大,CRF拟合训练数据的程度越高。这个参数可以调整过拟合和不拟合之间的平衡度。这个参数可以通过交叉验证等方法寻找较优的参数。
-f NUM
这个参数设置特征的cut-off threshold。CRF++使用训练数据中至少出现NUM次的特征。默认值为1。当使用CRF++到大规模数据的时候,只出现一次的特征可能会有百万个,这个选项就会在这样的情况下起作用了。
-p NUM
如果电脑有多个CPU ,那么可以通过多线程提升训练速度。NUM是线程数量。
举一个带参数的命令例子:1
clr_learn -f 3 -c 4.0 tempalte train.data model # 过滤掉了频数低于3的特征,并且设超参数为1.5
2.2 用测试集预测
输入命令进行测试数据,测试程序的命令为:
1 | crf_test -m model_file test_file |
同样,与crf_learn类似,输出的结果放到了标准输出流上,而这个输出结果是最重要的预测结果信息(预测文件的内容+预测标注),同样可以使用重定向,将结果保存下来,命令为:
1 | crf_test -m model_file test_files >> result_file |
你会发现生成一个新的文件output.txt,就是我们的测试结果。