最近在研究实体的识别,之前在博客中介绍过基于深度学习的实体识别。实验效果还可以!后来对我们所使用的语料进行了分析发现,语料的描述都是很像的,于是在想用传统的机器学习算法效果如何呢?于是尝试了CRF
Conditional Random Field:条件随机场,一种机器学习技术(模型)
训练和测试文件必须包含多个tokens,每个token包含多个列。token的定义可根据具体的任务,如词、词性等。每个token必须写在一行,且各列之间用空格或制表格间隔。一个token的序列可构成一个sentence,sentence之间用一个空行间隔。
最后一列是CRF用于训练的正确的标注形式。
如下所示就是训练语料的格式,只使用了当前字,其他的特征没有加入进来
训练的命令:
crf_learn.exe template train_pos.txt model_pos
测试的命令:
crf_test.exe -m model_pos test_pos.txt -o result_pos.txt
1、训练的模板内容:
# Unigram
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
# Bigram
B
训练的过程显示:
实验的结果显示如下所示:
特征只用了当前字,特征模板也比较的简单,但实验的效果还是可以接受的
2、特征模板制作复杂一点,如下所示:
# Unigram
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U01:%x[-1,0]/%x[0,0]
U01:%x[0,0]/%x[1,0]
# Bigram
B
3、特征模板也可以修改成如下所示:
# Unigram
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
U05:%x[-2,0]/%x[-1,0]/%x[0,0]
U06:%x[-1,0]/%x[0,0]/%x[1,0]
U07:%x[0,0]/%x[1,0]/%x[2,0]
U08:%x[-1,0]/%x[0,0]
U09:%x[0,0]/%x[1,0]
# Bigram
B