美团搜索NER技术启示
随着文本层面的搜索向语义向量召回迭代(可能不少新人都不知道文本搜索了吧?),NER任务在搜索中的地位好像有所下降,但是作为关键的理解和抽取技术,仍有重要的应用场景,因此好好掌握还是非常关键的。
这次给大家以美团的技术分享为依据和思路指导,给大家介绍一下业界处理ner问题的基本方案,这篇文章写的非常详细,有时间大家绝对要好好理解吸收一遍。
原文章摆这里:https://mp.weixin.qq.com/s/632T-bwnKU2Ui4Uidpoylw
由于内容众多,一篇实在写不完,所以我分两篇来整:
美团搜索ner技术启示(上):场景、选型和实体匹配技术。 美团搜索ner技术启示(下):模型、展望和个人评价。
ner的具体场景和需求
要讲落地,肯定要从需求和场景特点开始讲起。相比通用的人名地名组织名,在美团中大部分的ner任务都是用来识别query中的店铺,地址,品类之类的东西,为下游的结构化搜索服务。例如“王府井附近的川菜”,也是要构造“地点=王府井,品类=川菜”这样的检索逻辑返回给用户。
首先,说实话这种query还真不好用向量检索,因为物料的特征复杂不好表征,且语义表征并不一定适合场景,常规的用户搜索query给麦当劳,召回语义非常接近的肯德基不太合适;而且不做抽取直接做文本检索对特定字段的需求也很难匹配到,为此,还真就需要可靠的ner来进行这种搜索。
除此之外,美团搜索的ner还面临这些挑战:
实体增量快,变化非常多,需要动态挖掘和更新的能力。 领域相关性强。通用领域通常不能完全理解特定领域,作者举的例子是“剪了个头发”是一个实体,这就非常需要领域知识了。 性能需求是毫秒级,要快速响应处理。没什么好说的,不是关键节点,和意图、检索、排序之类的大头相比,ner性能空间被压缩并不奇怪。
技术选型思考
有关技术选型的思考,美团这篇文章的讲解非常细致,对于技术选型不熟悉的,可以研读一下这篇文章,思路有很多可以学习的地方。
技术方案简单概括就是实体匹配+模型,而且根据作者说的话是缺一不可。
首先有关实体匹配的作用,作者用了四点既有解释:
头部内容(高频)简单集中,实体匹配非常契合,而且准确率很高。 强领域相关导致的需要额外的外部知识引入,实体词典是非常简单有效的方式。 可控性高,接入新业务之类的只需要补词典就完事了。 应该没什么比词典性能更高的操作了。
除了这些,我感觉还有一个需要补充的点:
头部query大都较短且很大可能是纯实体,对于依赖上下文的模型来说效果并不好。
然而,模型同样必不可少,但他并非主角,而是是实体词典的补充,核心其实就是泛化能力的问题,其一是歧义问题,其二解决oov问题提升泛化能力,例如根据句式的推断模型多少是可以办得到的。
这两种风格迥异的方法,在应用中是需要融合的,作者介绍的很简单,实际用的应该也是这么简单,构造一个继续crf的打分器对两个结果打分,在词典无结果过路径分数明显低于模型时,再选择模型结果。
实体匹配技术
挖掘技术
有关实体匹配技术本就可以聊一篇文章了,而因为匹配本质是一个数据结构与算法的问题,目前已经不是关键技术难点,所以并不需要多聊,真正需要聊的是挖掘,也就是词典是如何构造出来的。
要懂挖掘首先要知道挖掘的东西怎么用,缺的数据是什么,缺的东西在哪里。首先我们知道词典挖掘出来是用来匹配的,目标还是很明确的;第二缺的是什么,其实对于商家等各种信息,其实商家自己都已经会填写了,抽取出来非常方便,但这些抽取的结果内容多半非常正规,所以这里的问题就在于,用户的各种花式输入并不一定会是一个标准的名字,例如“招商银行”这么一个地名用户大概率只会整个“招行”,而且还要可能带一堆的支行名,要保证实体匹配的召回率甚至是一些准确率,词典要就是要把这些不太正规但是高频的内容也给识别出来,再举个栗子,“海底捞火锅”用户大都只输入个“海底捞”吧。
要挖掘这些说法,首先想到的是新词发现,但现在的新词发现却在一个很尴尬的位置,无监督的准确率并不高,有监督的缺数据,小样本的泛化能力又不够,所以很难整,所以光靠新词发现,效果其实很一般,一般的方式是多路的方式来整。
说到挖掘,要提两个关键点,一个是挖掘的物料,另一就是挖掘方法。根据美团的文章,前者则来自商家信息库、百科词条、半结构化的搜索日志、非结构化的用户评论等。至于挖掘方法,本着挖掘的需求,高召回是需求,高准确是底线,首先应该满足高召回,所以一般使用多路,多种方式的形式整。其中,用户评论可以说是一个信息的宝库,因此文章也重点聊了这个信息源的挖掘。
挖掘的方案流程是这样的:
候选序列挖掘。一般高频出现的内容,是新词汇的概率就会很大,例如“大渔”、“中行”之类的,其实就很可能是关键的实体词。 基于远程监督的大规模有标记语料生成。现有的实体词典基本靠谱,候选序列挖掘的只能说可能,所以两者交集其实是很好的训练样本,在这个模型训练下能够得到一个用于挖掘的模型,结合多维度特征构造词汇可靠性二分类模型。 基于深度语义网络的短语质量评估。结合上面的标注其实是可以构造大模型了,例如Bert。
有关候选短语的可用性,可以从这4个维度进行评估:
频率。高频大概率就是在语言环境中形成了一定的共识了,所以频次和词汇的可靠性有很强的正相关性。 紧密度。主要用于评估短语中连续元素的共现强度,类似“红烧牛肉”中“红烧”和“牛肉”就具有一定的紧密度,因为这两个词经常会出现在一起。 信息度:这个词他应该是具有一定信息量的,这里就设计一些信息论的背景了,常用的分析计量方式就是IDF。 完整性:这个词是否完整,是否会影响表达,这里就需要考虑完整性了。
另外一个值得关注的是,他可能是一个实体词,但是他是什么类的,并不清楚,这方面作者建议大家用AutoNER的方式对词汇类别进行预测。
在线匹配
最早的方式是词典匹配,比较强的会结合搜搜量来筛选出最优结果,此时会有这些问题(用词典的场景基本都会有的~):
词典未覆盖的时候,会导致未识别甚至是识别错误。 粒度不可控,词典不覆盖时可能会出现切割粒度不符合预期。 节点权重如果用的是词频,可能会存在误差或者错误的情况。
其实可以看到很多内容基本上此时美团在实体词典匹配前引入了一个CRF分词模型,是针对垂域定制的,同时针对分词器设计了两阶段的修复方法:
模型分词和词典匹配两者使用动态优化找到最优解。 基于正则的强修复规则。