前沿重器
栏目主要给大家分享各种大厂、顶会的论文和分享,从中抽取关键精华的部分和大家分享,和大家一起把握前沿技术。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有
近期,我再次总结了我的历史文章,累积起来有50w字,百余篇文章了,有兴趣可以拿来看看,获取方式:七夕清流,百余篇累计50w字文章合集发布。
往期回顾
随着文本层面的搜索向语义向量召回迭代(可能不少新人都不知道文本搜索了吧?),NER任务在搜索中的地位好像有所下降,但是作为关键的理解和抽取技术,仍有重要的应用场景,因此好好掌握还是非常关键的。
这次给大家以美团的技术分享为依据和思路指导,给大家介绍一下业界处理ner问题的基本方案,这篇文章写的非常详细,有时间大家绝对要好好理解吸收一遍。
原文章摆这里:https://mp.weixin.qq.com/s/632T-bwnKU2Ui4Uidpoylw
由于内容众多,一篇实在写不完,所以我分两篇来整:
美团搜索ner技术启示(下):模型和启示。
模型
上一期提到,模型的主要责任就是识别长尾、未登陆的结果,首先,我们学习一下美团的模型迭代历程,这个迭代成一方面伴随着技术的变迁,另一方面也记录业务逐渐拓展下模型的应对能力。
2018年以前是比较经典的CRF模型,而后升级为lstm-crf,然后从整流开始逐步从蒸馏bert到bert完全体,再到后续对bert的魔改和场景、知识适配。而在技术上,也是逐步从离线预计算到蒸馏再到大模型,这里面所透露的信息都很多,一方面业务效果优先的情况下,大模型会是趋势,而大模型的短板主要在于性能,性能在逐步解决后大模型也就得以上线。围绕着NER任务,模型构建主要面临的是这几个问题:
性能。
领域强相关。
标注数据。
性能问题,从上述的迭代流程能看到其优化流程,领域相关的问题则是通过各种业务数据的引入,或增强或嵌入的方式优化NER方法,而针对标注数据的问题,则采用了一种弱监督的NER方法来进行优化。
目前美团主要使用的是BERT和BERT-LR级联模型。
BERT
相信BERT大家都不陌生了,但阻碍其应用的最大问题就是他的推理速度,美团的应对则是从蒸馏和加速两个方向去做。
模型压缩领域的主要操作就是剪枝和蒸馏,美团实验表明剪枝的损失不小,所以就剩下蒸馏这条路,这种方式并不新颖,2015年Hinton大神就已经提到过,通过Teacher模型对Student的学习,能让student逐步逼近teacher模型的结果,从而完成蒸馏。而在美团的实践经验和场景下,有如下明确的模型建议:
模型上更建议用推理速度快的网络进行蒸馏,保证在线运行速度。(IDCNN-CRF)
训练过程中使用标签近似(因为NER任务本身的特定)来指导学习。
而在加速上,文章提供了3种方法:
算子融合。提到了基于NV的Faster Transformer并进行了二次的开发,在稳定性和易用性上做了一定的改进,加速的核心主要在于降低Kernel Launch次数和提高小算子访存效率。
Batching。在流量巨大的互联网场景,完全可以凑成batch再来进行计算以降低Kernel Launch次数、充分利用多个GPU SM。
混合精度。混合精度本质是可以减少显存开销,兼顾FP32的稳定和FP16的速度。
知识增强的NER
语言模型目前已经能够很轻易地学习到语法信息,类似GPT等已经能够生成非常“人类”的语言,现在的技术瓶颈就落在了“知识”上,尽管模型生成的语言非常“人类”,但是因为少了知识的支撑,所以经常是“一本正经的胡说八道”,因此知识嵌入或者说增强则成为一个技术热点,在NER里面也有大量知识增强的技术手段。
开始讲之前,分享一个技术点,就是有关词典和模型的融合,已经有人进行了完整的总结,此处给大家链接以备拓展阅读:https://zhuanlan.zhihu.com/p/136277575
Lattice-LSTM的提出本质是一种能结合字和词的NER方法,从而完成知识的嵌入,而在搜索场景下,Query乃至物料中都会存在大量的诸如POI之类的信息,这些信息的嵌入能直接使效果提升。
这里重点讲了两个技术细节,分别是短语挖掘计算与具体模型嵌入的方式。
短语挖掘计算上,是根据query和doc之间的匹配情况来进行抽取,然后通过多模型的方式生成多个候选结果,这个候选结果通过整数规划进行选择,使整体得分最大化。
模型嵌入上,采用结构其实和常规的实体词嵌入差不多,将词向量、实体短语向量、字向量之间进行组合,如下图所示,在计算过程通过LSTM的方式将或长或短的短语和词汇信息融合进来。
在此基础上,构造了领域词典知识和模型融合的方案,并分为了两个阶段,拆分为实体边界识别和标签识别,这个方式的优势是可以跨领域使用,同时也能充分使用实体数据等信息提升识别率。
一阶段,用bert关注实体边界。
二阶段,则将实体词典带来的信息融入到实体分类模型中。模型上采用的是IDCNN,内部一方面会对切分结果进行编码,然后把编码内容输入到标签识别模型中。值得强调的是,IDCNN的使用主要考虑的是性能问题,当然bert也能使。
弱监督学习
弱监督是一种基于少量已标注样本和大量无标注样本的学习方法,这种情况更加符合NER的使用场景,因此美团的NER也提到了这个方案。
整个训练和使用的流程也分两块:弱监督标注样本生成和弱监督模型训练。
第一步的弱监督标注样本生成:
首先用已标注数据训练一个初版本模型(有监督学习),这里用的初版模型。
用词典数据作为无监督样本,用上一步的bert预测得到实体识别结果。
对该结果进行修正,修正的方式就是根据词典和模型的差别进行综合选择。
第二步是弱监督模型训练,在第一步生成的样本和标注样本进行混合不区分的方式进行训练,这种训练可以是有别于第一步的模型,也可以是在第一步模型的基础上进行微调,两者从最终的效果来看后者更好。
启示
整篇文章,美团进行对他们的NER方案进行了非常有效的方法,本质上是需要应对三大核心问题:
性能要求。
领域强相关。
标注数据。
这些核心问题,也是我们经常会遇到的核心问题,在参透这些本质的基础上,可以开始步步为营地综合解决。
性能问题,随着硬件、编译等技术,从小模型向大模型cache再向大模型迁移。
领域问题,结合领域挖掘的词典,并把词典信息输入进去,完成领域信息的构造和融入。
标注数据本就有限,人工一方面数量大了不显示,另一方面也不完全靠谱,弱监督的方式就非常合理了。
当然了,NER的终点并非在此,落地场景上搜索仍会在很长的一段时间内需要NER技术,还有很多类似实体链接等的任务离不开NER,而在技术和场景需求上,OOV问题、歧义、嵌套等问题仍有待解决,对于领域的问题,甚至是领域的通用性问题,都还有很大的空间,都需要我们持续学习和进步。