资实验相关资料下载
CRF++使用见《CRF++的简单使用》
一、实验环境
a) 软件:windows XP pro sp3,visual studio 2008 & Dotnet2.0, CRF++, perl
b) 硬件: CPU: cm420,内存:2G ddr533, 160G 8M sata 富士通
二、实验过程
下面未经特别说明,都是按照作业要求将训练语料分成7:3进行训练和评测所得的结果。
a) 直接应用CRF
i. 所给定的语料格式非常符合条件随机场的要求,故直接使用条件随机场进行训练测试。(本次试验的文件在包test1.rar中)
1. 转换文档编码为UTF8(CRF++在使用UTF16时会报错)
2. 制定模板,如下:
#Unigram
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
U10:%x[-1,0]/%x[0,0]
U11:%x[0,0]/%x[1,0]
3. 使用CRF++学习特征(相关信息如下)
a) 命令:crf_learn template_file train_file model
其中template_file是模板文件,train_file是训练语料,都需要事先准备好;model是CRF++根据模板和训练语料生成的文件,用于解码。
i. template_file文件
1. 模板的基本格式为%x[row,col],它用于确定输入数据中的一个token
其中,row确定与当前的token的相对行数。col用于确定绝对列数。(如下图:)
|
col 0
|
col 1
|
col 2
|
|
row -2
|
疆
|
Ens
|
I-LOC
|
|
row -1
|
总
|
Bn
|
N
|
|
row 0
|
统
|
En
|
N
|
当前行
|
row 1
|
阿
|
Bns
|
B-PER
|
|
row 2
|
利
|
Mns
|
I-PER
|
|
模板
|
指代的特征
|
U00:%x[-2,0]
|
疆
|
U01:%x[-1,0]
|
总
|
U02:%x[0,0]
|
统
|
U03:%x[1,0]
|
阿
|
U04:%x[2,0]
|
利
|
U10:%x[-1,0]/%x[0,0]
|
总/统
|
U11:%x[0,0]/%x[1,0]
|
统/阿
|
2. 特征模板的类型
a) 第一种以字母U开头,为Unigram template。当模板前加上U之后,CRF会自动生成一个特征函数集合。
一个模型生成的特征函数的个数总数为L*N,其中L是输出的类别数,N是根据给定的template扩展出的独立串(unique string )的数目。
b) 第二种特征模板以B开头,即Bigram template
它用于描述Bigram特征。系统将自动产生当前输出token与前一个输出token的组合。产生的可区分的特征的总数是L*L*N,其中L是输出类别数,N是这个模板产生的unique features数。
c) 两种模板的区别
注意:Unigram/Bigram是指输出token的Unigram/Bigrams,而不是特征!
unigram:|output tag|×|从模板中扩展的所有可能串|
bigram: |output tag| × |output tag| × |从模板中扩展的所有可能串|
b) iter=88 terr=0.01365 serr=0.23876 obj=67066.17413 diff=0.00006
其中:iter是迭代次数;terr是词错误率;serr是句错误率;obj是当前对象值,当它收敛时,迭代结束;diff是与上一对象的差。
4. Done!2706.41 s,用时间2706.41s(在电脑1上)。
5. 对测试语料进行测试
a) 命令:crf_test -m model_file test_file > result_file
其中 model_file是刚才生成的model文件,test_file是待测试语料,“>result_file”是重定向语句,指将屏幕输出直接输出到文件result_file中。
b) CRF++的解码速度是很快的,尤其是直接写入文件时。但是因为特征选取的问题,正确率、召回率都不高。
c) 结果使用conlleval.pl程序测评。(其代码在提交包根目录中)
测评的命令为:perl conlleval.pl < output.txt,其中output.txt为待评测文件,需要perl解释器支持。详细结果如下:
LOC:
|
precision:
|
63.67%;
|
recall:
|
72.93%;
|
FB1:
|
67.98
|
5623
|
382251.5
|
ORG:
|
precision:
|
21.26%;
|
recall:
|
35.90%;
|
FB1:
|
26.71
|
4491
|
119954.6
|
PER:
|
precision:
|
65.90%;
|
recall:
|
65.06%;
|
FB1:
|
65.47
|
2554
|
167210.4
|
|
|
|
|
|
宏平均
|
53.38667
|
微平均:
|
52.84311
|
ii. 因为刚才特征选取地特别少,故猜想多加入有效特征可以提高结果,于是把模板定义如下:(本次试验的相关数据文件在包test2.rar中)
1. 模板2:
#Unigram
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
U5:%x[-2,0]/%x[-1,0]
U6:%x[-1,0]/%x[0,0]
U7:%x[0,0]/%x[1,0]
U8:%x[1,0]/%x[2,0]
2. 相关的实验数据如下:
a) 训练过程:
iter=94 terr=0.00571 serr=0.12313 obj=53321.45523 diff=0.00000
Done!2915.53 s
b) 测试结果:
LOC:
|
precision:
|
66.86%;
|
recall:
|
74.31%;
|
FB1:
|
70.39
|
5456
|
384047.8
|
ORG:
|
precision:
|
26.95%;
|
recall:
|
41.02%;
|
FB1:
|
32.53
|
4048
|
131681.4
|
PER:
|
precision:
|
68.29%;
|
recall:
|
65.67%;
|
FB1:
|
66.96
|
2488
|
166596.5
|
|
|
|
|
|
宏平均
|
56.62667
|
微平均:
|
56.89841
|
的确有所进步,但是还是明显显低。
a) 制定规则,改进结果
i. 对结果进行分析(详见各包中以error开头的文件),可以发现错误主要有以下几种:
1. 同一实体内不同字间的类型不同,则以字类数较多者为准
a) 个数相同时,多数情况下为LOC
2. 实体开头的字必定为B-???格式
3. 实体的开始和结尾都有特定的特征可以遵循(如停用词、动词等作为分界等)
4. 固定实体后跟实体应为B-???格式(如省名后)
5. 实体间间隔较小时可能合并为同一实体
6. ……
ii. 根据以上特点对结果进行优化,计划依次试验各个规则。但因时间因素,只检测了四五种,其中较有效果的是前两种(即规则1和2),两者结合可以把结果成绩提高12%左右。在test2的结果上加以更正,得到的结果如下:
LOC:
|
precision:
|
79.40%;
|
recall:
|
76.43%;
|
FB1:
|
77.89
|
4966
|
386801.7
|
ORG:
|
precision:
|
53.86%;
|
recall:
|
52.63%;
|
FB1:
|
53.24
|
3457
|
184050.7
|
PER:
|
precision:
|
80.88%;
|
recall:
|
67.09%;
|
FB1:
|
73.34
|
2327
|
170662.2
|
|
|
|
|
|
宏平均
|
68.15667
|
微平均:
|
68.9781
|
虽然F值有很大提高,但是还是太不理想
c) 先分词并标注词性信息,再用CRF学习规则
i. 看来单从字的角度着眼已然不够,于是试图利用分词和词性标注信息。因为题目未给出相应信息,故用分词标注信息先进行分词标注(分词标注工具见附件包根目录)。
ii. 分词标注后,字的特征如下所示:
字
|
词性及分词标记
|
实体标记
|
:
|
Sw
|
N
|
印
|
Bns
|
B-LOC
|
度
|
Ens
|
I-LOC
|
首
|
Bd
|
N
|
先
|
Ed
|
N
|
iii. 于是针对其建立模板:
iv. 以此模板进行训练,得到模型后进行测试,最后用conlleval测得结果如下:
iter=226 terr=0.00935 serr=0.17661 act=2913330 obj=42785.69115 diff=0.00009
Done!4502.97 s
LOC:
|
precision:
|
82.05%;
|
recall:
|
89.97%;
|
FB1:
|
85.83
|
20309
|
1743121
|
ORG:
|
precision:
|
48.36%;
|
recall:
|
65.12%;
|
FB1:
|
55.5
|
13818
|
766899
|
PER:
|
precision:
|
91.52%;
|
recall:
|
93.15%;
|
FB1:
|
92.33
|
9189
|
848420.4
|
|
|
|
|
|
宏平均
|
77.88667
|
微平均:
|
77.53349
|
v. 对此结果再以用前面建立的规则优化,最终得到结果如下:
LOC:
|
precision:
|
90.34%;
|
recall:
|
90.37%;
|
FB1:
|
90.36
|
18878
|
1705816
|
ORG:
|
precision:
|
70.47%;
|
recall:
|
71.54%;
|
FB1:
|
71
|
12474
|
885654
|
PER:
|
precision:
|
94.85%;
|
recall:
|
92.70%;
|
FB1:
|
93.76
|
8954
|
839527
|
|
|
|
|
|
宏平均
|
85.04
|
微平均:
|
85.12373
|
在此基础上对Test_utf16.ner进行训练,最终得到finalAnswer.txt
三、实验结果对照表
编号
|
使用策略
|
结果
|
方法改进
|
性能提升
|
|
1
|
单字CRF(1)
|
约53%
|
|
|
|
2
|
单字CRF(1)
|
约56.7%
|
使用更多的特征信息
|
约3.7%
|
特征对于结果有较大影响,但因硬件条件和时间原因未能引入更多的特征加以佐证。
|
3
|
单字CRF+规则
|
约68.5%
|
人工添加规则,对结果进行优化
|
约11.8%
|
规则可以弥补机器学习方法的不足,依次(并改变规则的顺序)尝试各种规则。
|
4
|
分词+词性标注+CRF
|
约77.7%
|
采用了不同方法
|
约9.2%
|
引入词的概念显然
|
5
|
分词+词性标注+CRF+规则
|
约85.1%
|
在4基础上引入规则
|
约7.4%
|
机器学习方法的某些弊端不随条件的变化而变化
|
6
|
|
|
|
|
|
四、未来的工作
a) 尝试更多的规则,尽量减少机器学习方法的弊端;
b) 尝试把分词和词性信息作为不同的属性,看看对结果有什么影响;
c) 改进分词及词性标注的正确率,以便收到更好的命名实体识别的效果。
五、注意事项
a) 编码格式可能造成某些文件无法正常处理,当出现格式错误时要留心一下;
b) 各个程序所需要的分隔符不尽相同,主要是空格和制表符,在遇到问题时注意看是不是分隔符不符合程序要求;
c) 实验过程中开发的一些实用小工具并未提供说明书,但这些小工具界面简洁,使用方便,应该很容易掌握。
|
|
Felomeng.BackFormation
|
用于在标准格式和分词标注格式之间转换,还附带将两种标记合并、将分词标注信息删除两个功能
|
Felomeng.ErrorExtractor
|
错误提取工具,可以方便地从结果(带答案)中提取错误,以便于实验分析
|
Felomeng.NERRules
|
本来有四个功能,因为实验中验证了前三个功能效果不佳,固主要功能就是改善结果(对机器学习方法的结果进行规则化改进)。
|
|
|
后记:其实结果和使用的训练测试数据的选择很有关系,本人采用的是前70%训练,后30%测试。后经改进选取方法,正确率可以达92%以上,有兴趣的可以改变一下训练语料和测试语料的提取方式。
分享到:
相关推荐
条件随机场(Conditional Random Fields, 简称CRF)是一种概率模型,广泛应用于自然语言处理(NLP)领域,特别是在命名实体识别(Named Entity Recognition, 简称NER)任务中。命名实体识别是NLP的一个核心问题,...
基于Python实现双向LSTM+条件随机场CRF的命名实体识别模型源码+报告(课程作业).zip 本次作业要完成 nlp 四大基础任务之一的序列标注任务,也叫做命名实体识别。即 是在给定文本中能够对词性、人名地名等特定信息进行...
人工智能_CRFs_条件随机场_基于条件随机场(CRF)对中文案件语料进行命名实体识别(NER) 文件组织 corpus.py 语料类 model.py 模型类 utils.py 工具函数、映射、配置 data 语料 requirements.txt 依赖
- CRF层:在BiLSTM层之后添加一个条件随机场(CRF)层,用于对标记序列进行建模和标注。3. 模型训练:将准备好的数据集划分为训练集、验证集和测试集。使用训练集对模型进行训练,并使用验证集进行模型的调优和选择...
命名实体识别(Named Entity Recognition, NER)是自然语言处理中的一个重要任务,它涉及到从文本中提取出具有特定意义的实体,如人名、地名、组织名等。本项目利用了深度学习模型,特别是结合了长短期记忆网络...
条件随机场(Conditional Random Fields, CRF)是一种广泛应用于自然语言处理(NLP)领域的概率模型,特别在命名实体识别(Named Entity Recognition, NER)任务中表现突出。命名实体识别是NLP的一个核心任务,旨在...
**基于Bert + Bi-LSTM + CRF的命名实体识别** 在自然语言处理(NLP)领域,命名实体识别(NER)是一项基础且重要的任务,它涉及到从文本中识别出具有特定意义的实体,如人名、地名、组织名等。本项目采用TensorFlow...
在这个项目“NER-CRF-HMM-master”中,开发者利用隐马尔可夫模型(HMM)和条件随机场(CRF)这两种统计建模方法来实现这一目标。以下将详细阐述这两个模型在命名实体识别中的应用及其重要性。 **隐马尔可夫模型...
训练命名实体识别模型时,我们通常采用条件随机场(CRF)作为序列标注模型,因为它能够考虑上下文信息,避免了孤立预测导致的问题。在字符级数据上,CRF模型需要处理更细粒度的信息,需要设计合适的特征表示,如字符...
条件随机场(Conditional Random Field,简称CRF)是一种在机器学习和自然语言处理领域广泛应用的概率图模型。它被设计用来解决序列标注问题,如词性标注、命名实体识别、语义角色标注等。与传统的隐马尔科夫模型...
CRF++是一款开源的条件随机场(Conditional Random Fields, CRF)工具,广泛应用于序列标注任务,如命名实体识别(Named Entity Recognition, NER)。在这个压缩包中,你可能找到了训练自定义NER模型所需的全部资源...
基于条件随机场(Conditional Random Field, CRF)的NER模型 ## 数据集 数据集用的是论文ACL 2018[Chinese NER using Lattice LSTM](https://github.com/jiesutd/LatticeLSTM)中收集的简历数据,数据的格式如下,它...
CRF+词典方法的中文命名实体识别工具结合了条件随机场(Conditional Random Fields,CRF)模型和词典匹配策略,以提高对中文文本中实体的定位和分类准确性。 条件随机场是一种统计建模方法,常用于序列标注问题,如...
《随机条件场域命名实体抽取》的PPT主要讲解了基于条件随机场(Conditional Random Field,简称CRF)的命名实体识别技术。命名实体是指文本中具有特定意义的实体,如人名、地名、组织名等,在计算机科学尤其是自然...
在这个项目中,开发者使用了双向长短时记忆网络(BiLSTM)和条件随机场(CRF)这两种深度学习模型来提升识别效果。 命名实体识别是自然语言处理中的关键任务之一,其目标是从文本中识别出具有特定意义的实体,如...
本工具是基于双向长短时记忆网络(Bidirectional Long Short-Term Memory, Bi-LSTM)与条件随机场(Conditional Random Field, CRF)的模型,专门设计用于中文NER。 双向LSTM是一种深度学习架构,结合了正向和反向...
本研究提出了一种基于ELECTRA模型和条件随机场(CRF)的电信网络诈骗案件文本命名实体识别模型,旨在解决这一难题。 #### 二、命名实体识别技术背景 命名实体识别(Named Entity Recognition, NER)是自然语言处理...