NLP.TM[29] | ner自动化打标方法

【NLP.TM】

本人有关自然语言处理和文本挖掘方面的学习和笔记,欢迎大家关注。

往期回顾:

命名实体识别是文本分类的升级版,文本分类是对一整段文本进行分类,而命名实体识别则是对整段文字里所有位置的词都进行分类,我们都能体会到人工打标文本分类的痛苦,对于命名实体识别,那就可谓是有过之而无不及了,而命名实体识别本身由于泛化能力的需求,需要的数据会比文本分类更多,所以还是要多思考用尽可能少的人工,来完成标注任务,以便我们学习模型。

这里给大家介绍一种方法-词典+最大逆向匹配。这个方法不是个新玩意,在机器学习出现之前的传统方法用的就是他,词典的越是完整,召回率就会越高,至于正类的准确率,一直处于一个较高的水平,所以用这个来制作标注样本。

具体流程

首先是词典挖掘,根据具体ner任务的需求,整理出一批比较完整的词典,例如要识别出文本中的食物,那就整理出一个比较完整的词典,例如里面有火锅、烤鱼、寿司。具体的挖掘方法嘛,根据业务会有不同,自己去整理吧。

有了词典就可以用算法进行打标了,举个例子吧,BIO模式标注,对于一句话,“宫保鸡丁和红烧牛肉哪个好吃”,词典里面已知有宫保鸡丁和红烧牛肉了,那么标注就是这么个流程。

首先看看第一轮遍历。

宫保鸡丁-和-红烧-牛肉-哪个-好吃
词典不存在,不标注。
和-红烧-牛肉-哪个-好吃
词典不存在,不标注。
红烧-牛肉-哪个-好吃
词典不存在,不标注。
牛肉-哪个-好吃
词典不存在,不标注。
哪个-好吃
词典不存在,不标注。
好吃
词典不存在,不标注,本次遍历只剩一个词,结束遍历,好吃标注为O。

以此类推,“哪个”也是标注为O了,然后来看再下一轮。

宫保鸡丁-和-红烧-牛肉
词典不存在,不标注。
和-红烧-牛肉
词典不存在,不标注。
红烧-牛肉
词典存在,标注“红烧-牛肉”->“Food_B-Food_I”。

从而就把这个红烧牛肉给标注出来了,最终的标注结果就是这样的:

宫保鸡丁-和-红烧-牛肉-哪个-好吃
Food_B-O-Food_B-Food_I-O-O

至少在这个case里面,我们能看到提槽完全正确。

代码?自己写一遍,目前我没有看到有包,这个数据结构就当做一个算法题自己写就好了,python的代码量不到50行吧。

注意点

  • 没有包,自己写。

  • 对词典的准确率和召回率要求很高,注意词典质量。

  • 词典可靠的前提下,能做groud truth,但是还是不能保证全对,作为标注样本训练之前,先评估这种方法打标的准确性,足够高就可以哪来训模型了。

  • 这个方法足够好,就直接用它就好了,模型还不可控,或者要重训。

  • 最终训练后的准招指标可以参考不可全信,自己拿100个case自己人工评价一遍,有的时候不是你的模型错,而是标注有问题,设置你你会发现人工评估完了,发现模型还优于你的标注。

discussion

只要词典可靠,其实F1可以达到95%甚至以上的水平,可以说是非常靠谱了,甚至不输我们的各种模型,在我的角度看这个方法本身在线部分就是可用的,但是问题在于这种严格的规则会导致召回率不高,尤其是比较长的实体,例如历史事件、酒店等,很可能会有输错、简称之类的情况出现,词典是难以遍历的,所以模型在这里的介入更像是一个“捞召回”的策略,即使牺牲一些这里的准确率,也是可接受的,毕竟最终用户角度看的是整体的准招,用啥方法标出来的他完全不关心。

说人话,总结一下:

  • 复杂度优于模型方法。

  • 准招总体一般略逊色于模型。

  • 开发难度远低于模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值