基于关键字注意的深层语义匹配模型

Abstract

深度语义匹配是各种自然语言处理应用中关键的一环,比如说问答 (QA),需要将输入的 query 和 QA 语料库中每一个候选的问题进行相关性比较。在开放域的场景下,question-query pair 中的 word tokens 往往比较丰富,同一个词在不同的领域下可能有不同的语义,不同的词也可能包含相同的语义,所以在这种情况下衡量 question-query pair 的相似度比较困难。本文提出了一种”关键词注意“(keyword-attentive) 的方法提高深层语义匹配 (deep semantic matching) 的表现。首先利用来自大语料库的领域标签生成领域增强的 keyword 字典。然后基于 BERT,在其之上添加了一层 keyword-attentive transformer 层来突出 question-query pair 中关键词的重要性。模型训练过程中,使用了一种新颖的基于 question-query pair 关键词覆盖率的负采样方法。并且使用了各种评价标准对本文提出的方法在 Chinese QA corpus 上的表现进行评估,包括候选 question 的精确率和语义匹配的准确性。

1. Introduction

从 Web 搜索到智能助手,开放域问答 (QA) 都是一个比较重要的应用。基于包含 qa pair 数据库的搜索是一种流行的 QA 实现方式。为了提高搜索速度,数据库通常会以 questions 为索引,以便基于 TF-IDF 得分或深层语义匹配来定义输入 query 和候选 question 之间的相似性度量。深层语义匹配通常被视作一个二分类问题。如果一个 query pair 是语义相似的那么其标签为 "positive",反之为 "negative",然而,仅仅基于二分类标签模型可能并不能学得很好。比如,有一个负样本: “Which city is the capital of China?” 和 “Could you tell me the capital of America?”,模型应该搞清楚这两个 query 之间主要的不同点在于 "China" 和 "America",然而对于开放域来说,输入 query 中的 keyword/keyphrase 的组合复杂度会非常大,模型要学习到这些 "不同" 和 "相似" 非常难,特别是当面对训练集中没有的 keyword/keyphrase。训练深层语义模型另一个问题是如何构造正负样本,正样本通常由经过人工验证的候选 question 构成,另一方面,不同的两个 question,存在 \(O(|Q|\ast|Q|)\) 种组合,因此获取负样本可能有点麻烦。生成所有负样本在计算效率上是不可行的,同时也会破坏正负样本的平衡降低模型的训练效率。

本文通过设计了 keyword-attentive 模型以及 keyword 抽取和负采样等支持模块解决了上述问题。实验结果表明 "keywords" 对于提高文本匹配性能是一种非常有用的外部信号,即使这些 "keywords" 从未出现在模型的训练数据中也是如此。

本文的主要贡献如下:

  1. Keyword-attentive BERT:在 BERT 的最后一层引入一个额外的 keyword-attentive 层,目标是在注意力机制中强调关键词与非关键词之间的交互。通过明确地 “告诉” 模型哪些是重要的词,实验表明 Keyword-attentive BERT 优于原始 BERT。
  2. 更好的负采样训练更鲁棒的模型:提出了一种新的负采样方法,该方法采用 keyword 重叠分数来选择信息更丰富的负样本。此外,应用实体替换技巧来生成更多种类的负样本,比如将实体 "China" 替换成 "America",经过数据增强,模型训练得更加鲁棒。
  3. Keyword 抽取:提出一种利用领域信息的简单有效的关键字提取算法,抽取出来的关键字可以在三个方面使用:a. 建立 keyword-attentive 深层语义匹配模型,b. 提高 QA 搜索引擎的召回质量,c. 改进负采样训练一个更好的语义匹配模型。

2. Proposed Approach

2.1 Problem definition

假定现在有一个 query 和相关的候选 question 集合,对于每一个 query pair (q, Qi),计算一个相似度得分 sim(q, Qi) 用于候选排名,为了计算 sim(q, Qi),现在要解决两个问题:

  1. 如何轻松简单、灵活地获得原始 query 的良好表示形式?
  2. 如何将 query 表示形式使用到匹配模型中?

本文提出了一个基于领域的关键词抽取方法抽取 query pair 中高质量的关键词解决了第一个问题,使用 keyword-attentive BERT 整合关键词到端到端模型训练解决了第二个问题。

2.2 Domain keyword extraction

传统的检索方法例如 TSUBAKI、Elasticsearch 使用 OKAPI BM25 或者 Lucene similarity 衡量 query-question 之间的距离。但是这些方法可能会提取低质量的 "keyword",从而导致检索结果质量较低。如下表,"中国" 和 "GDP" 是关键词,但是搜索引擎倾向于检索形式上看上去更相近的 "similar Q1" 和 "similar Q2",但是显然忽略了重要关键词的匹配。

image-20210209110944089

实际上,开放域 question 的 keywords 是和 question 的领域高度相关的,比如说:经济、政治、体育等等。基于这些观察,引入了如图1 所示的基于领域的关键词抽取方法生成领域相关的关键词。并且收集了大型的中文语料库,其中包含数千万条属于特定领域的文章,并且每天对其进行更新以涵盖新的关键字/关键词 (keyword/keyphrase)。

image-20210209111703007

在中文 NLP 场景下,一个中文词语包含几个中文字符,并且没有空格边界,所以分词是中文 NLP 场景下的基础问题。PMI (point-wise mutual information) 是一种衡量两个词紧密程度的常用手段,可以用来发现新词:

image-20210209113711943

第二步,利用领域信息衡量一个词的重要性。首先,计算每个词的 IDF,然后引入 diff-idf 按照如下方式衡量一个领域词的重要性:

image-20210209115104870

标记 ^domain 表示领域外,使用 df 而非 tf 是因为领域中一个词的 df 比 tf 更加重要,也更加合理,这里是要根据领域抽取关键词并不是要统计某个词对某一个文档的重要性。一个词在不是其领域的文档中的 idf 肯定要比领域内文档的 idf 大,当词越具有领域性,这个差距会越大,得分也就越高。

在每个领域语料库中重复以上步骤,创建领域字典,最后合并领域字典形成最终的关键字词典,并应用于搜索引擎。

和其他无监督/监督方法比起来,此方法具有以下优点:

  1. 可充分利用语料库的领域信息抽取领域关键词
  2. 无需手动标注关键词,不严重依赖于模型结构

2.3 Semantic matching

Keyword attention mechanism

image-20210209140154024

由于监督信号的不充足,深层模型无法精确地捕捉 query pair 中的关键信息用于有效的相似度辨别。A 句中的每个 token 只能关注到 B 句中的关键词 token,反之同理。下图中 A 和 B 是一个负样本,由于都包含 "扫码" A 和 B 看上去很相似,但是整句含义却不同,A 说的是进微信群,B 说的是加好友微信。而本文提出的 keyword-attentive 机制会强制模型关注 A 和 B 关键词的不同而学习它们之间的差异。这个机制可以简单地通过 self-attention mask 的方式实现。然后对 A 和 B (包括 CLS,SEP token) 进行平均池化生成 A 和 B 的表示,为了模拟两个句子间的差异引入了 keyword difference 向量:\(k\_diff=(h_{kw}(A)-h_{kw}(B))\oplus(h_{kw}(B)-h_{kw}(A))\),其中中间的符号表示拼接,这个拼接有点迷,前后两者互为相反数,感觉并不能提供更多的特征信息。

image-20210209141034332

通过 keyword-atttentive 层,关键词信息被注入到距离输出更近的位置。最终拼接来自各个模块的表示用于最终的预测:

\[h_{kw}=h(CLS)\oplus h_{kw}(A)\oplus h_{kw}(B) \oplus k\_diff \]

Negative sampling approach

随机采样生成负样本比较盲目且容易忽略包含丰富信息的负样本。而我们的目标是通过更好的采样方式训练一个鲁棒的模型。

具体做法是,首先通过把关键词接在原始 query 后面的方式增强在搜索引擎中的检索,例如:原始 query \(\{x_1,x_2,...,x_n \}\),keyword \(\{k_1,k_2,...,k_m \}\),增强后的搜索 query 则为:\(\{x_1,x_2,...,x_n,k_1,k_2,...,k_m \}\)

然后希望没有人工干预的情况下从搜索引擎中取出负样本。一个直接可以参考的指标是根据搜索引擎获得的相似度得分判断检索的候选 question 是不是够自信。如果相似度得分低于某个阈值,则检索出的候选 question 可能是负样本。另外,本文引入了query 和候选 question 中的 keyword 重叠率,一个好的负样本应该在非重叠和重叠部分有着较好的平衡。最终结合两个指标作为负样本选择的规则:

image-20210209150846948

对于上式,有一点疑问,假设 Q 是一个与 query 完全没有重合的样本,此时,关键词重叠率会趋于无穷大,而相似度得分方面也极有可能小于 \(\alpha\) (两个字面完全不重合的句子语义相同的概率比较小),这样的一个负样本应该算是一个非常简单的样本了,但是上面的规则貌似无法过滤掉。我想应该是在第一步使用搜索引擎搜索的时候,这样的样本基本不会被检索出来吧,所以这两个指标都是在尽力去保证检索出来的样本是负样本。

还有一种通过随机替换实体的方式来生成负样本,比如: "What factors will affect China’s GDP?" 被替换为 "What factors will affect America’s GDP?",这个过生成的样本看上去极为相似但实则为负样本。

参考

  1. 基于关键字注意的深层语义匹配模型
posted @ 2021-02-09 17:05  GNEPIUHUX  阅读(542)  评论(0编辑  收藏  举报