如何简单粗暴的提升NER效果?

描述

在NLP的基础任务中,NER无疑很难做,但是做好了,会提升下游的很多效果。那么如何提升NER的效果呢?数据增强无疑是一种简单粗暴的方式。船长这次带着大家简单过一下,本文无公式!

数据集

首先我们的着重考虑对象是有词库的,在工业界词库是必备的,没有标注词库,这个NER的任务可能会做的很不好。我们从以下的三种数据增强trick来逐步介绍。

实体替换          

如果我们有一个训练数据集,比方说一个case:“海底捞的主要食物是火锅”,在NER的任务中,标注成为“{海底捞^饭店}的主要食物是{火锅^食物}”,其中海底捞的实体为饭店,而火锅的为食物。

那么为了扩大我们的训练数据集,我们会随机的对同类型的实体进行替换,例如“海底捞”替换成为“肯德基”,也即“肯德基的主要食物是火锅”。有意思的地方来了,很明显我们都知道肯德基是没有火锅的,那么这样造的case会有问题吗?答案是从常识的角度是有问题的,所以我们尽量要挑出和火锅相关的实体,利用知识图谱的方式,搭建出更合理的训练集。

边界噪声          

比方说文本“这家饭店的爆品是火锅啦”,结果模型把火锅啦整体识别成为食物实体,那就很不对劲了。在这种情况下,属于NER的一个悠久遗留问题,边界预测问题,NER很难识别到实体的真正边界,解决这种的方法也是利用人工造的一些噪声。

比较简单的方式,是可以从字表里面随机的抽样字,再随机的加到边界处。变成,让模型自主的去学习到实体的边界,这种方式简单但是效果一般,为什么这么讲?因为这种随机的采样对于模型来说,很好学习,我们应该尝试去构造再难一点的数据。

这家饭店的爆品是火锅嘿

比较可行的方式,是在模版数据中利用N-Gram挖掘到噪声词语/字,再利用频率的高低构建出现的概率,以这种概率进行替换,举例来说,饭店类的模版有很多是围绕着词语“食物”展开,那么这时候我们可以把“食物”插入到实体的边界,成为:

这家饭店的爆品是火锅食物

对于模型来讲,再难一点的方式,可以从训练数据中,挖掘到和火锅相关的噪声,再把它插入进去。例如,根据词语火锅进行展开,利用5-Gram搜索到附近的词语,找到一些和火锅相关,但是不是强相关的词语,比方说辣椒,那这时候就会形成:

这家饭店的爆品是火锅辣椒

不得不说,这种文本对于机器来讲已经很难识别了,但是这种方式的时间开销很大,需要提前离线找到和每个实体相关的词语,再进行噪声的插入。

模版构造样本          

什么意思呢?我们先利用实体,在线上的日志中挖掘到很多模版,再利用这批模版随机的进行填充,形成最后的训练数据,这批训练的数据量会很大,但是样本的质量是一般的。例如我们可以对模版“这家饭店的爆品是{食物}”进行随机的食物实体填充,成为:

这家饭店的爆品是榴莲

但是当一个模版有多个实体槽位的时候,随机的进行实体填充往往有很大的问题,比方说模版“这家{饭店}的爆品是{食物}”,如果我们填充成为“这家海底捞的爆品是榴莲”,虽然对于NER的任务来讲没有太大的问题,但是从常识角度来说,未免也太差了些。

这种情况下,我们需要批判性的思考,这种数据是否有利于提升我线上的效果,如果线上的要求并不包含常识,那这就是个好模型,反之亦然。我们也可以根据知识图谱来进行填充,增加常识信息。

数据集

这次船长主要带大家过了一些简单高效的NER数据增强Trick,有什么问题就写下你的疑惑,我们讨论一下~

审核编辑 :李倩  

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分