CRF进行实体的识别

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yangfengling1023/article/details/83856118

最近在研究实体的识别,之前在博客中介绍过基于深度学习的实体识别。实验效果还可以!后来对我们所使用的语料进行了分析发现,语料的描述都是很像的,于是在想用传统的机器学习算法效果如何呢?于是尝试了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

猜你喜欢

转载自blog.csdn.net/yangfengling1023/article/details/83856118