CRF++ for NER

CRF++

( 空格分隔): nlp


[TOC]

http://x-algo.cn/index.php/2016/02/29/crf-name-entity-recognition/#i

使用说明

安装

template

模板说明: http://www.hankcs.com/nlp/the-crf-model-format-description.html

jieba 结巴分词和词性标注:

http://www.mamicode.com/info-detail-1889910.html

训练模型

  • 不带参数:
    crf_learn template_file train_file model_file
    这个训练过程的时间、迭代次数等信息会输出到控制台上

  • 如果想保存这些信息,我们可以将这些标准输出流到文件上,命令格式如下:
    crf_learn template_file train_file model_file > train_info_file

  • 带参数
    crf_learn -a CRF-L2 -c 4.0 -f 3 -p 4 template train.data model

      -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是线程数量。
      -f, --freq=INT   使用属性的出现次数不少于INT(默认为1)
      -m, --maxiter=INT   设置INT为LBFGS的最大跌代次数(默认10k)
      -c, --cost=FLOAT   设置FLOAT为代价参数,过大会过度拟合(默认1.0)
      -e, --eta=FLOAT   设置终止标准FLOAT(默认0.0001)
      -C, --convert   将文本模式转为二进制模式
      -t, --textmodel   为调试建立文本模型文件
      -a, --algorithm=(CRF|MIRA)   选择训练算法,CRF-L2 or CRF-L1,默认为CRF-L2
      -p, --thread=INT   线程数(默认1),利用多个CPU减少训练时间
      -H, --shrinking-size=INT   设置INT为最适宜的跌代变量次数(默认20)
      -v, --version   显示版本号并退出
      -h, --help   显示帮助并退出
    

测试

  • 不带参数:
    crf_test -m model_file test_files
    与crf_learn类似,输出的结果放到了标准输出流上
  • 而这个输出结果是最重要的预测结果信息(测试文件的内容+预测标注),同样可以使用重定向,将结果保存下来,命令行如下:
    crf_test -m model_file test_files >> result_file
  • 带参数:
    crf_test -v1 -m model test.data| head
    有两个参数-v和-n都是显示一些信息的,
    -v,可以显示预测标签的概率值
    -n,可以显示不同可能序列的概率值,对于准确率,召回率,运行效率,没有影响

评估结果

  • 安装 perl strawberry 64bit for windows

  • 下载 conlleval.pl

  • 运行命令:
    perl conlleval.pl <result.txt
    result.txt是待评估的文件,是crf测试集输出的结果

  • 注意:
    conlleval.pl中代码my $delimiter = " "; # field delimiter要求待评估的文件,必须是以空格作为分隔符,否则运行命令出错:
    conlleval: unexpected number of features in line XXX XX XX
    参考说明:http://www.52ml.net/2463.html

  • 解决方法1:将conlleval.pl中的空格分隔符改为tab,即:my $delimiter = "[空格]"替换为my $delimiter = "[tab]"

  • 解决方法2:将result.txt中的tab分隔符改为空格

实验结果

Windows 10 , python 2.7
处理步骤:

  1. 原始语料处理
    一句一行
    *可选:去除{{time:}}等标记
  2. 打标签 BMEUNS
  3. 切分训练集和测试集
  4. 调整crf++的template
  5. 训练,调参
  6. 测试
  7. 评估

word+POS+Tag(B/M/E/U/NS)

  • 去掉了原始语料中的{{time:}}等符号 , pos+tag
娃哈哈 nz  B
集团  n   E
在   p   NS
黔   j   U
发展  vn  NS
近十年 l   U
,   x   NS
见证  v   NS
了   ul  NS
贵州  ns  U
发展  vn  NS
取得  v   NS
的   uj  NS
巨大  a   NS
成绩  n   NS
。   x   NS

  • template
# Unigram
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
U05:%x[-1,0]/%x[0,0]
U06:%x[0,0]/%x[1,0]

U10:%x[-2,1]
U11:%x[-1,1]
U12:%x[0,1]
U13:%x[1,1]
U14:%x[2,1]
U15:%x[-2,1]/%x[-1,1]
U16:%x[-1,1]/%x[0,1]
U17:%x[0,1]/%x[1,1]
U18:%x[1,1]/%x[2,1]

U20:%x[-2,1]/%x[-1,1]/%x[0,1]
U21:%x[-1,1]/%x[0,1]/%x[1,1]
U22:%x[0,1]/%x[1,1]/%x[2,1]

U23:%x[0,1]

# Bigram
B

Done!179.61 s

image.png

POS+dictionary

  • userDic

浙江在线绍兴 100 nr
福美来三代启停版 100 nr
搜狗 100 nr
岳飞 100 nr
搜狐 100 nr

  • 原始语料未作清洗,POS+tag
娃   nz  B
哈   nz  I
哈   nz  I
集   n   O
团   n   O
}   x   O
}   x   O
在   p   O
{   x   O
{   x   O
l   eng O
o   eng O
c   eng O
a   eng O
t   eng O
i   eng O
o   eng O
n   eng O
:   x   O
黔   j   O
}   x   O
}   x   O
发   vn  O
展   vn  O
  • template 同上

Done!70.12 s

image.png

分词没有添加词典

template同上

娃   nz  B
哈   nz  I
哈   nz  I
集   n   O
团   n   O
}   x   O
}   x   O
在   p   O
{   x   O
{   x   O
l   eng O
o   eng O
c   eng O
a   eng O
t   eng O
i   eng O
o   eng O
n   eng O
:   x   O
黔   j   O
}   x   O
}   x   O
发   vn  O
展   vn  O

???词性标注和前面加载了词典一样

Done!88.84 s

image.png

强行修改标签


image.png

noSeg , 词性POS

娃   POS B
哈   POS I
哈   POS I
集   POS I
团   POS I
}   POS 0
}   POS 0
在   POS 0
{   POS 0
{   POS 0
l   POS 0
o   POS 0
c   POS 0
a   POS 0
t   POS 0
i   POS 0
o   POS 0
n   POS 0
:   POS 0
黔   POS B
}   POS 0
}   POS 0
发   POS 0
展   POS 0

template同上

Done!175.85 s


image.png

noPOS+template

娃   B
哈   I
哈   I
集   I
团   I
}   0
}   0
在   0
{   0
{   0
l   0
o   0
c   0
a   0
t   0
i   0
o   0
n   0
:   0
黔   B
}   0
}   0
发   0
展   0

设置template

# 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

结果:
Done!77.47 s


image.png

总结

feature time precision recall FB1
c_noPOS-BIO 175.85s 86.46% 82.18% 84.26
c_noPOS+template-BIO 77.47s 86.73% 84.16% 85.43
c_POS(noDic)-BIO 88.84 92.08% 92.08% 92.08
c_POS+dic-BIO 70.12s 98.96% 98.73% 98.85
w_POS(noDic)-BMEUNs 179.61s 99.80% 99.52% 99.66

c_表示一字一行处理的, w表示一词一行

疑问

添加词典与否事实上结果一样,上文的结果不相同是因为强行对训练集和测试集对的BIO标签进行了修改,命名实体的完全是BI。如果自动分词,粒度较细,实体标签不一定完全正确。

  • 修改标签以后,92.08
n   eng 0
a   eng 0
m   eng 0
e   eng 0
:   x   0
浙   nr  B
江   nr  I
在   nr  I
线   nr  I
杭   nr  I
州   nr  I
}   x   0
}   x   0
  • 没有修改标签,98.85
n   eng O
a   eng O
m   eng O
e   eng O
:   x   O
浙   ns  B
江   ns  I
在   b   O
线   b   O
杭   ns  B
州   ns  I
}   x   O
}   x   O
  • 预料中给定的NER是否是NER?

{{location:河北省邯郸市火车站过街天桥南约100米}}的路西,十几个男子围成一团,气氛很是热烈。

{{product_name:嘻嘻MACWE书包中学生女双肩包男女背包韩版潮学院风旅行包帆布电脑包}}{{product_name:http://t.cn/8sSfk0S}}

嘻嘻{{company_name:MACWE}}书包中学生女双肩包男女背包{{location:韩}}版潮学院风旅行包帆布电脑包{{product_name:http://t.cn/8sSfk0S}}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349

推荐阅读更多精彩内容