基于自然语言的搜索是一种无处不在的技术――搜索网页,或者产品目录,或者选择一个机器人来帮助客户代表,或者在一堆法律语料库中找到你的法律问题的答案,或者找到符合特定技能的简历,等等。跨模式、个性化、对话式搜索体验成功的关键在于解决核心查询文档匹配问题的能力。
核心问题:对我们大多数人来说是非常熟悉和相关的。给定一大组文档D,我们问一个查询Q,希望返回与D最相关的子集,Q是一个(短的)自然语言句子。文档是部分结构化的,更像深度较低的JSON字典——它包含几个字段f,每个字段都包含文本。
例如,如果D包含网页,字段F包括页面标题(T)、正文(B)、URL(U)等。如果D对应电商目录,产品项包含字段:标题(T)、描述(D)、类别C等。
例如:查询“丈夫的蓝色衬衫”以匹配男士休闲/正式衬衫,其中颜色区域是蓝色(实际上,有两种变体天蓝色和深蓝色)。现在,想想如何手动解决这个匹配问题。
这是一个相当复杂的问题——在大多数情况下,Q中的单词和D中的文本字段可能并不完全匹配(老公vs男人),所以我们必须理解Q和D中单词的语义,我们必须避免查询中常见的无关单词(blouses | blue jeans)。最后,我们希望在几百毫秒内从数百万个产品中检索相关文档。
经典的解决方案TF-IDF是基于将Q(或F)转换为大型词集上的one-hot-like向量。每个元素是Q(或F)中每个词的频率分数,非常频繁的词的计数减少。然后匹配两个向量的相似度=q和f. TF-IDF是一个非常简单而强大的技术,但是(由于它的单一性)它没有考虑到微小的句法变化―― man vs men的,active vs actively,t恤vs衬衫,蓝月亮vs蓝月亮。为了解决这个问题,我们已经有了一套标记、词干和表单技术,揭示了核心/根可能造成的信息丢失。
不幸的是,这还不够。在现实环境中,我们也希望电脑与笔记本、椅子、座椅与冰箱、三星相匹配。没有纯粹的语法方法来检测这些匹配(添加上下文相关的同义词相当困难)。在某种程度上,我们需要matcher来理解这些词。
幸运的是,我们现在有了另一个密集的词库,我们可以使用它们――这些都是压缩的单词代码,它们的所有维度都被理解为捕捉语义、类比和子词模式。比如“电脑”“笔记本电脑”的词向量就和“电脑”“冰箱”的词向量很像。现在,我们可以把Q(类似于F)的每个单词转换成一个向量,把它们组合成一个句子向量,或者在上面写更复杂的匹配规则。然而,我们可以做得更好――使用深度神经网络来解决我们的匹配任务。
近年来,由于各种公共任务和竞赛,SemEval、SNLI和Buffer-Y-围绕各种语义分析问题,包括文本相似度和问答,在语义学习的句子相似度方面取得了很大进展。
该图显示了一种流行的组合相似性技术。这种方法学习将句子Q和D独立编码成单片向量(通常使用双LSTM),然后学习使用几个全连接(FC)层来匹配这些向量。可以把双LSTM想象成一个包含两个for循环的盒子,一个从左到右扫描,另一个从右到左扫描,在扫描过程中积累语句的含义。
了解双向RNN
代表编码计算的网络可以获得更高级的短语和句子的意义。此外,因为我们分别对Q和D进行编码(例如,e_q和e_d),所以我们可以重用该编码,例如,使用e_q将Q与另一个文档D’进行匹配。然而,构建一个完整的语义编码会导致早期摘要问题:其中关于单个单词(和短语)的信息在编码中丢失。现在,如果查询和文档有任何共同的词,就很难用折叠句子编码器来推断句法相似性。
例:假设我们要用折叠语句来回答这些问题。
Q :哪个国家的名字是“赤道”的意思?
预期答案:厄瓜多尔
以下句子都是答案的候选,因为两者语义相近。
离赤道最近的国家是秘鲁。
赤道穿过厄瓜多尔首都基多的北部,这
国家得名于这个半球的十字路口。然而,第一个是不匹配的因为它忽略了一个事实,这个国家的名字对于匹配来说很重要。
注意,我们从TF-IDF移开是因为它具有很强的句法性质,并且无法捕获语义相似。虽然我们现在可以有效地抓住单词向量和基于LSTM的编码的语义,但是我们已经失去了对句法结构的控制。如同tf - idf在句法频谱的一端,我们现在很遗憾地处于语义频谱的另一端。一个好的matcher需要使用关于句子结构和整体语义的信息。
首先对q和d进行分割表示,例如,一个单词嵌入的列表。
比较所有对元素(q_i, d_j)。学习相似度得分。
聚合相似度得分。再次,学习聚合。
在第一次遇到时,SCA模式看起来非常简单,但是它非常强大,并且有多种多样甚至令人惊讶的方法来实例化这个模式。
Compare (G) and Aggregate (H)
上面的图显示了如何使用NNs实例化检查句子的模式:
从单个单词向量中,学习一个由网络G参数化的相似矩阵(蓝色),
然后学习聚合相似度分数,由网络H参数化,产生最终的得分(y)。
已经提出了一些基本SCA范式的变体,针对字符串相似性、阅读理解和问题回答任务。不幸的是,性能最好的神经架构常常表现出较低的解释性。因此,在深入研究它们之前,让我们考虑一个更可解释的SCA模式实例,即Word Mover Distance。
假设,doc d =“President greets the press in Chicago”并询问q =“Obama speaks in Illinois”,我们预计q和d会有很高的相似度。就WMD而言,我们希望WMD(q,d)的距离非常低。这是可能的,如果我们可以找到q和d的单词之间的良好排序。
首先,我们为q和d中的每个单词指定信息权重。例如 President, greets, press and Chicago各有0.25单位,并忽略(in)。相似性赋予奥巴马权重,Illinois (每个0.33单位)。现在,我们如何排序 q和d中的词:尝试重新分配从q到d的权重,以便传入和传出的流匹配。请注意上面的图表 - 我们将权重从奥巴马(0.33)分配给总统(0.25)。我们左边0.33-0.25 = 0.08,我们接下来greets。重复其他词。将成对流量存储在矩阵T 中,即T
为了找到最佳的转移方式,我们首先计算成对词的不相似度dist(q ,d
WMD defined as weighted sum
Also inflow = outflow for each word
现在,为了找到使总体WMD(q,d)最小化的流量(T),我们使用线性优化来解决上述的T问题。请注意,方程组是如何神奇地工作的――如果我们把一个高流量(T )分配到非常相似的词(比如,总统和奥巴马:DIST 0),它对整个WMD的贡献很小,因此保持了低水平。但是,如果您找不到类似的一对,那么您就不得不将流分配给更多类似的一对,从而提高了总体的WMD。
注意WMD如何实例化SCA模式:我们pair-wise word (dis)-similarity,然后通过优化找出流程T来learn to aggregate。
缺点:众所周知,WMD技术可以很好地匹配简短的句子,但是随着句子长度的增大或太大的不同,它会被分解。在不同的组合中分配权重可能导致复杂的或不可解释的流。也许,我们应该只关注类似的组件,并汇总它们的分数?另外,如何初始化权重分配――始终删除停止字?另一个问题是:我们没有得到关于句子的编码,我们只学习与它们匹配。
Soft-TF-IDF:也是一个SCA实例,越来越受欢迎。我们用一个任意距离度量(单词向量余弦相似度,Jaro相似度,..)来比较q和d的单词,然后通过用TF-IDF的分数来衡量它们的相似度。本文展示了软TF-IDF如何在不同的实体之间找到匹配。这里的问题是,您必须手动选择阈值以进行相似性。
还有其他一些SCA实例,试图解决如何比较和如何聚合问题的方法――BiDAF、MPM、DrQA、AoA、QANet(当前的小组领导)。不幸的是,它们变得越来越复杂,因此很难解释和适应。我们将在以后的文章中阐明它们。同时,这里有一篇关于BiDAF文件的很好的博文。由于这些架构针对的是QA,而不是查询文档匹配,所以我们需要使它们适应匹配的问题,并进行一些巧妙的修改。