NLP.TM[29] | 近期做NER的反思

NLP.TM

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

往期回顾:

  • NLP.TM[24] | TextCNN的个人理解

  • NLP.TM[25] | CS224N学习小结

  • NLP.TM[26] | bert之我见-attention篇

  • NLP.TM[27] | bert之我见-positional encoding

  • NLP.TM[28] | 浅谈NLP算法工程师的核心竞争力

NLP中有很多任务,但我其实花的集中时间最多的还是ner,也就是命名实体识别,希望这块能成为自己最能拿出手的技能,慢慢成长吧。近期NER自己尝试做很多提升开发效率和准招提升的调研,速度上是能有所提升,但是总会出现各种问题,这里总结一下,这些问题估计在其他任务中也会经常出现,也供大家一起思考和进步。

有关标注的问题

标注一直是深度学习的难题,然而除了要找到标注之外,还需要保证标注的质量,标注准招很大程度能决定最终结果的好坏。

首先,就是标注的对不对。这个其实对最终结果影响最大,这个很好理解,教学生写作业,告诉他错的知识,那他只会学坏对吧。所以拿到标注的样本,多看看他对不对。出现这个问题,首先需要调整标注策略,从而得到更加精准的标注样本。NER是一个标注要求很高的任务,一个句子每个词都有标注,标注量大,且每个位置的结果对上下位点的要求也很高,所以更要小心。

然后,标注样本对原始问题的覆盖率怎么样。这个覆盖率,其实可以理解为标注样本对整个计算空间的覆盖度,举个简单的例子吧,未登录词出现的频次多少,如果未登录词很多,其实这个标注样本再多也没用。覆盖率的计算有时候限制会比较多,不好计算,简单的可以看测试集的bad case,对于未登录词,其实测试集的结果里会有很多分类错误是可以分析出来的,例如ner里面,未登录词出现窜类的情况就会比较多,例如会分为O,即非实体。

最后才是数据量,覆盖率是针对某种特别情况有没有的问题,就是存在性,而数据量更讲求这些情况出现的分布,什么是一般情况,常见情况,什么是特殊情况,少数情况,根据这些数据分布,模型会根据各种情况出现的分布去进行权衡(这事为什么,大家可以想想哈哈哈),解决大多数问题,数据量不足其实很简单,就是增加数据量了,后面会给大家简单介绍一些trick,当然后续会撰文专门写。

上下游的使用

真的,这个教训很惨痛,自己做了一个很厉害的东西,结果下游用不了,或者用了效果不好,这就很痛苦,相当于白干了;而你做这个东西是需要上游依赖的,但是上游给不到你,那你的东西其实也不可用。

然而,你做的东西,要可用,才有意义!

所以,在做一件事情的时候,尤其你的活是在整个系统内的一个任务时,需要关注两个东西,那就是上游能给你啥,和下游需要啥。这个事情,是需要在你干之前就要对接好,调研好的(额,这次的错误就是自己没调研好),哪怕多花点时间。

NLP任务在搜索推荐都是一个辅助性的工作,他势必会在中间某个流程中产生作用,所以更加要关注上下游使用,尤其是下游,要知道下游怎么用你的东西,不能说简单的一个“实体识别”,要识别X1、X2等若干个实体,就开始干了,一定要知道下游怎么用你的结果,用了有什么预期结果,里面你很多隐藏需求,要调研清楚。

NLP的数据增强

这次是我做各种NLP任务以后感受最深的一次,在NLP层面思考数据量不足的问题,那么数据增强其实是一个还不错的策略。值得让我吹的是,这些策略我没有参考论文,是自己思考出来的,本来打算偷偷写点专利,但是发现其实都已经有了哈哈哈哈。

要看NLP的增强,可以参考比NLP更缺数据的CV领域,数据增强说白了就是对图片进行各种变换,甚至按照规则生成一些东西,来看看具体怎么做。

  • 调整词句顺序。短句用词维度,长句可以n-gram或者是句子级别的调换顺序。(没试过)

  • 对NER,可以把特定槽位里面的词替换为其他同类型的词,当然文本分类也可以这么做。(收益大)

  • 总结规则模板,直接生成数据。(收益不小)

  • 复制粘贴。(数据量少时收益不明显,数据量大以后有少量收益)

    • 复制粘贴也是有技巧的,例如拿一些比较差的bad case的特色case生成纠正后放入训练集。

不希望大家盲目地就做这个数据增强,而是在进行了一轮试验后,经过bad case分析发现一些数据量问题或者是覆盖率不足的问题时,再来尝试数据增强,毕竟数据增强是会引入过拟合风险的。

多反思多成长吧。

你可能感兴趣的:(NLP.TM[29] | 近期做NER的反思)