【NLP论文笔记】Keyword-Attentive Deep Semantic Matching(Keyword-BERT详解)

本文主要用于记录腾讯微信团队于2020年提出的一种深度语义匹配方法的论文。该文提出的模型架构和各种训练模型的小技巧,非常值得我们这种奋斗在一线的NLPer参考。本笔记主要为方便初学者快速入门,以及自我回顾(个人特别喜欢这篇论文,文中的很多方法都用于了实际工作中,所以将会对这篇论文通篇进行详细的解读)

论文链接:https://arxiv.org/pdf/2003.11516.pdf

github地址:https://github.com/DataTerminatorX/Keyword-BERT

论文相关博客:https://mp.weixin.qq.com/s/_QY2EhB-TiBcb5q0379McQ
(原博客写的生动有趣,值得好好品一下~)

基本目录如下:

  1. 摘要
  2. 核心思想
  3. 总结

------------------第一菇 - 摘要------------------

1.1 论文摘要

在各种各样的自然语言处理任务中都绕不开的一个核心问题就是,深度语义匹配任务。比如,在QA检索问题中,新输入的一个问法,就需要与语料库中的所有问题-答案对(QA对)进行语义相关性匹配。但是在开放领域的场景下,由于在“问法-问题”对中会存在各式各样不同表达的词汇,导致衡量新问法与候选QA对的相似性就变的富有挑战性。我们提出了一种“关键词-注意力机制”的方法来改进深度语义匹配任务。我们首先从海量的语料中按领域划分来生成领域相关的关键词字典。在基于BERT原有架构的基础之上,我们再堆叠一层“关键词注意力”层来强调在“问法-问题”对中出现的关键词。在模型的训练过程中,我们提出了一种新的,基于输入问法对中的关键词重合度的负样本采样方法。我们在中文QA语料上利用多种评估指标对模型进行了验证,包括召回候选数据的精确率,语义匹配的准确率。实验表明,我们的方法表现超过了现有的其他基线模型。我们的方法也是通用的,只需要做一点修改,就可以被运用在其他文本匹配任务中。

------------------第一菇 - 核心思想------------------

2.1 背景介绍

开放领域的问题答案匹配(QA对)可以被应用于多个场景之中,包括,网页搜索,智能助理等。其中一个比较重要的应用就是问答数据库检索。 为了提高搜索速度,问答数据库基本都是用问题来建立索引的。因此,我们要计算输入问法与候选问题组中每个问题的相似度,从而检索出答案。计算QQ相似度的任务传统上来说可以基于TF-IDF分数。最近基于深度神经网络的语义匹配方法,引起了业界很大的关注。深度语义匹配问题通常会被转化为二分类问题。比如一个句子对,如果他们语义相似,则给这对的标签就是,“正例”;反之则是,“负例”。

然而,我们认为模型仅仅通过这个二分类标签并不能很好的学习到句子深层次的语义表征。举个例子,对于一个被标记为“负例”的句子对,“Which city is the capital of China?”,“Could you tell me the capital of America?”,模型应该区分出这两句话的核心区别点在于“China”和“America”。但是对于一个开放领域场景,让模型去学会甄别句子对中真正体现出语义差别的关键词/词组(通常还是能够复杂组合的),是一个巨大的挑战,而且很多新词/词组,是模型在训练语料中从来没有见过的。

另一个在训练语义相似模型的难点在于如何构建正例和负例。构建正例是很简单的,通常我们只需要从同一组召回的问句中去选择即可;同理,我们也可以从其他组中去召回句子(理论上有 O(|Q|*|Q|))来构建负例。但是如果考虑到计算资源和正负样本的平衡,那么不可能所有的负例组我们都能拿来做负例。

在本篇论文中,我们设计了一种“关键词-注意力”模型和其他的支撑性模块,包括,关键词抽取系统和负样本生成策略,用来解决我们上面提到的问题。我们发现“关键词”是一种很有用的额外信息,能够用来提升模型的表现,即使那些新增的关键词从未出现在训练数据之中。我们本篇论文的主要贡献包括,

1)“关键词-注意力”BERT模型:我们的深度语义匹配模型是基于最近流行的BERT来构建的。我们在BERT的最后一层,额外引入添加了一层“关键词-注意力”层。我们的目标就是要通过注意力机制,来加强关键词和非关键词之间的交互。通过直接告诉模型,哪一个词才是真正重要的关键的词汇,我们实验证明,我们提出的这种BERT模型变体要好于原生态的BERT。

2)利用更好的负样本生成策略训练出更加鲁棒的模型:为了训练出更具鲁棒性的模型,我们提出了一种新的负样本生成方法。该方法利用了关键词之间的重合度分数来选择出负样本对。另外,我们还采用了实体替换技巧来生成更加多样的负样本(比如,将“China”替换成“America”)。我们会实验证明,利用这部分数据增强的数据,我们的模型会更加鲁棒。

3)关键词抽取策略:我们提出了一种简单有效的关键词抽取算法用于提炼领域关键信息。抽取出来的关键词可以被运用于3个方面,
1)用于构建“关键词-注意力”深度语义匹配模型
2)用于提高QA搜索引擎的召回检索质量
3)用于提高负样本质量,从而更好的训练语义匹配模型。

2.2 问题定义

在介绍我们的方法之前,我们先明确一下我们需要解决的问题。
假定我们有一个query和一组候选问题组。对于每一组问题对(q, Qi),我们需要计算(q,Qi)的相似性分数用于后续的排序。为了计算(q,Qi),我们需要考虑2个问题,
1)如何方便快捷的获取优质的句向量表征。
2)如何把句向量表征融入到匹配模型中。

2.3 方法实现
2.3.1 领域关键词抽取

传统的检索召回方法包括ES,BM25,Lucene等,这些方法都是利用了句子的表面统计特征来衡量句子对之间的相似度。然而,这些方法经常会因为给一些不重要的“关键词”分配了过高的权重而导致了错误的召回结果。举个例子,如Table1所示,从直觉我们就能判断,query的重要部分其实是,“中国”和“GDP”,我们的搜索引擎往往会召回一些看起来相似的问法(下表中的,Similar Q1和Similar Q2),他们看起来跟原句真的很相似,但是他们却忽视那些重要关键词的匹配(比如,在这句话中,真正的关键是,中国的GDP~😄)


Table1.png

事实上,开放领域问题的关键词是与这些问题的所属领域(比如,经济,政治,体育等)高度相关的。基于这些观察,我们提出了一种基于领域的关键词抽取技术用来生成领域相关的关键词,流程如下图1所示。我们收集了千万级的属于特定领域的中文语料,并每天同步更新用于覆盖新的关键词/词组,


图1.png

在中文的NLP场景中,1个中文“词”会包含各种各样的中文字符,但是却没有空白格作为边界来区分每个“词”,因此中文的分词在中文NLP的应用场景中绝对是一个最基础的问题。本论文作者也没有尝试去提出一种最新的分词算法,而是基于一些统计特征来作为新词发现。

2.3.1.1 关键词发现方法

逐点互信息(PMI,Pointwise mutual information)是一种常用的方法用来衡量字符与字符之间的“牢固度(stickiness)”,从而用来发现中文的词汇,具体的公式如下,
PMI(w_1,w_2)=log\frac{p(w_1,w_2)}{p(w_1)p(w_2)}

2.3.1.2 领域词权重计算方法

在第二步中,我们通过计算某个词在各个领域信息中的作用来衡量其对于该领域的重要性。首先,我们针对每一个词来计算出IDF值。其次,我们引入了“diff-idf”的计算方式来衡量某个领域关键词的重要性,其计算方法如下所示,
diff\_{idf}(w|domain) = idf(w|\wedge domain) - idf(w|domain)

=log(\frac{N_\wedge domain}{df(w|\wedge domain) + \lambda}) - log(\frac{N_{domain}}{df(w|domain) + \lambda})

其中 ^domain 表示“其他领域”的语料。举个例子,比如我们计算,“杠杆”这个词在金融领域中的重要性,那么“其他领域”就指,非金融类的语料。这里,我们用“df”来替代“tf”,是因为我们认为评估一个词汇在这个领域的重要性,在篇章(document-level)中的频次,比在词组(term-level)中的频次更为重要。而减去“其他领域”中的idf值能够确保计算出的值,是具有区分度的,能够真正代表该词在目标领域的重要性。从直觉上来说,如果一个词,在每一个领域的文章中都比较平均的出现,那么它的“diff-idf”分值会变小,因为需要同时减去,“其他领域”的idf值。我们最终就利用,“diff-idf”值来排序候选词并剔除那些低于阈值的噪声词汇。

我们针对每一个领域的语料,重复进行了上述步骤来生成领域关键词词典,最终,我们把所有的领域词典合并为一个来生成最终的关键词字典,并且运用于我们的搜索引擎。相比与其他的非监督或监督的关键词生成方法, 我们的方法有如下优势,
1)可以利用领域信息来提取语料中的关键词。
2)不需要人为介入来标注关键词,没有什么大的模型架构。

2.3.2 语义匹配模型

我们的语义匹配模型是基于BERT来搭建的,输入就是一组问题对,另外额外添加了一层“关键词-注意力”层。

在关键词从问法对中被抽取出来以后,我们就会把关键词信息通过额外添加的一层“关键词-注意力”层注入到模型之中,该层与BERT的最后一层是平行的,如下图2所示。

图2.png

注意力机制对于语义匹配来说是非常重要的,然而,因为缺少额外的监督信息,深度模型往往不能够准确捕获在句子对中的关键信息,从而对这两句话做准确的相似度区分。从pair2vec受到的启发,我们提出的模型更加会关注到那些包含关键词的词组对。具体如下图3所示,在句子A中的每一个字符,只会与句子B中的关键词的字符做点乘。

图3.png

如上图所示,句子A和B是负样本(就是不相似的),但是他们看上去却很相似,因为他们都包含了,“如何扫码”,但是他们的语义显然是不一样的,A是想说怎么加入微信群,而B是想说,添加一个微信好友。我们的“关键词-注意力”机制会强迫我们的模型去关注这两句话的关键词的差异,从而来学习到这两句话的本质差异。这个机制的实现也比较简单,只需要在,transformer层中多乘一个,自监督的蒙版(mask)即可。紧跟着最后会加一层平均池化层,用来生成句子的隐藏向量,作为句子对的另2个向量表征维度。同时,为了模型这两种表征的差异,我们还同时引入了关键词差异向量,k-diff,如下所示,

公式1.png

有了“关键词-注意力”层,关键词信息就会被注入到离输出目标更近的地方,而不是随着原始问句一起注入到BERT中。最后,我们把这几个特征向量的表征给连接了起来,接了一层全连接层,并输出结果。

总的来说,这一套网络架构的设计是比较讨巧的,从论文的作者博客我们也能看出这个架构是经过多种实验之后,得出来的最好的架构,具体的实现有兴趣的同学可以直接看相关的代码。

2.3.3 负样本生成策略

当我们把语义匹配问题转化为二分类问题的时候,就会碰到如何构建负样本的问题。其中一个比较简单的方法就是通过随机选择来生成负样本对。然后,这种方法肯定是盲目的并且会忽视一些有用的信息,更糟糕的是,经常性的会生成一些简单的负样本(可以理解为区分度非常大)用于模型的训练。因此,我们的目标就是通过更好的样本来生成更加鲁棒的模型。

受到支持向量的启发,我们希望去生成一些具有迷惑性的负样本(就是那种sim(q,Q)分值看上去比较合理的)。第一步,我们首先利用搜索引擎去召回一批数据(利用关键词增强策略生成的问法)。具体来说,我们利用关键词来对原始问法来做增强操作并作为召回候选源,比如,一个原始,query可以被表示为,{x1,x2,...xn},那么其对应的关键词是,{k1,k2,...,km},那么我们用于搜索的问法,就可以被表示为,{x1,x2,...,xn,k1,k2...,km}。

另一个问题就是,在没有人工参与的前提下,如何从召回的数据中去挑选合适的负样本数据。其中一个指标就是通过搜索引擎返回的相似性分数来判断。如果相似性分数低于阈值,那么召回的候选问句就有可能是负样本。另外,我们还引入了一种输入问法query和候选Q之间的关键词重合率指标。直觉上来说,一个好的负样本会在非重合和重合部分之间有很好的平衡。最终,我们会结合两种评估标注来筛选出我们的候选负样本,如下所示,

公式2.png

另外一种生成负样本的方法就是通过随机的实体替换。举个例子,“What factors will affect China’s GDP?”,可以被重写为,“What factors will affect America’s GDP?”。这个过程生成的问法对看上去会非常相似,但其本质的意义却是相反的。因此,对于在数据库中的每一个问句,我们都会按照一定的比例随机替换其中的一个实体。

至此,本论文提出的3个核心思想理念已经全部阐述完毕了。
剩下的一些实验过程及相关的结论有兴趣的同学可以直接翻阅原始论文。
本文不再作更多的解读。

------------------第三菇 - 总结------------------

3.1 总结

到这里,整篇论文的核心思想已经说清楚了。本论文主要是提出了一种基于关键词的深度语义匹配模型,其中涵盖了领域关键词抽取系统,基于BERT改造的“关键词-注意力”语义匹配模型和负样本生成策略。

简单总结一下本文就是先罗列了一下该论文的摘要,再具体介绍了一下本文作者的思路,也简单表述了一下,自己对作者提出方法的理解。希望大家读完本文后能进一步加深对该论文的理解。有说的不对的地方也请大家指出,多多交流,大家一起进步~😁

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容