使用片断嵌入进行文档搜索

做者|Ajit Rajasekharan 编译|VK 来源|Towards Data Science数组

从文档中获取的句子片断的嵌入能够做为该文档的提取摘要方面,并可能加速搜索,特别是当用户输入是一个句子片断时。这些片断嵌入不只比传统的文本匹配系统产生更高质量的结果,也是问题的内在驱动的搜索方法。现代向量化表示挑战建立有效的文档嵌入,捕捉全部类型的文档,使其经过使用嵌入在文档级别进行搜索。架构

例如“蝙蝠是冠状病毒的来源”、“穿山甲的冠状病毒”,由介词、形容词等链接一个或多个名词短语的短序列。这些突出显示的链接词在很大程度上被传统搜索系统忽略,它们不只能够在捕获用户意图方面发挥关键做用(例如,“蝙蝠中的冠状病毒”不一样于“蝙蝠是冠状病毒的来源”或“蝙蝠中不存在冠状病毒”)的搜索意图,可是,保留它们的句子片断也能够是有价值的候选索引,能够用做文档的摘要提取方面(子摘要)。经过将这些句子片断嵌入到适当的嵌入空间(如BERT)中,咱们可使用搜索输入片断做为对该嵌入空间的探测,以发现相关文档。机器学习

须要改进使用片断的搜索

找到一个有文献证据支持的综合答案来回答“COVID-19来源什么动物?”或者“冠状病毒与之结合的受体”,即便是在最近发布的covid19数据集这样的小数据集上(约500 MB的语料库大小,约13k文档,8500多万单词,文本中约有100万个不一样的单词),也是一个挑战。学习

传统的文档搜索方法对于经过使用一个或多个名词短语搜索从几个文档中得到答案的典型用例很是有效。传统的文档搜索方法也知足如下对单词和短语的用户体验约束:优化

咱们看到的(结果)是咱们输入的(搜索的)搜索引擎

例如,当咱们搜索单词和短语(连续的单词序列,如New York,Rio De Janeiro)时,结果一般包含咱们输入的词汇或它们的同义词(例如,COVID-19搜索产生Sars-COV-2或新型冠状病毒等结果)。.net

然而,随着搜索输入的单词数量的增长,搜索结果的质量每每会降低,特别是名词短语之间使用链接词的状况下。即便搜索引擎在结果中会突出显示术语,可是这种结果质量的降低是仍是显而易见,3d

例如,在下图中,当前搜索引擎选择性地突出显示了“蝙蝠做为冠状病毒的来源”(“bats as a source of coronavirus”)中的名词,有时甚至没有遵循输入序列中这些单词的顺序。 尽管文档相关性排序一般能够在很大程度上缓解这种状况,但咱们仍然须要检查每一个文档的摘要,由于文档不知足咱们的搜索意图。orm

本文所述的文档搜索方法除产生更相关的结果外,还能够减小搜索系统中存在的这种认知负担,尤为是在搜索句子片断时。 做为说明,咱们在上面的现有搜索系统中使用的相同查询能够产生以下所示形式的结果(该界面仅是用于说明搜索方法的示意图)。 值得注意的是,如下示意图中的要点是,摘要是文档中的实际匹配项(括号中的数字是包含片断的文档数以及带有输入搜索片断的片断的余弦距离),而不是在传统搜索系统中显示的建议查询或相关搜索查询。 这些摘要方面为结果空间提供了全景视图,减小了无用的文档导航并加快了对感兴趣文档的聚合。blog

输入片断能够是完整或部分的句子,对其组成或样式没有限制。 例如,与上面的确定性查询相反,它们多是疑问词,咱们能够经过搜索“冠状病毒结合的受体是什么?”来找到冠状病毒结合的蛋白受体

上面的搜索系统之间的比较仅用于说明文档发现的基本方法之间的差别。 不然,鉴于语料库大小的数量级差别,这将是不公平的比较,由于咱们必定会在一个微小的语料库中得到更多相关的结果。

嵌入在文档搜索中的做用

因为向量化表示相对于传统的纯符号搜索方法的优点,它已经成为任何搜索形式不可或缺的一部分。现代搜索系统愈来愈多地利用它们来补充符号搜索方法。若是咱们将文档搜索普遍地视为文档空间的广度优先和深度优先遍历的组合,那么这两种形式的遍历须要具备特定于这些遍历的特征的嵌入。例如,咱们能够从引发冠状病毒的动物开始,而后深刻到蝙蝠,而后再扩展到爬行动物等。

  • 文档的向量化表示——从Word2vec和BERT的嵌入空间中提取的单词、短语或句子片断都具备独特的互补属性,这些属性对于执行普遍而深刻的搜索很是有用。具体地说,词的Word2vec嵌入(词指的是词和短语,如蝙蝠、果子狸等)是广度优先搜索的有效方法,基于实体的聚类应用于结果。搜索“蝙蝠”或“麝香猫”这个词,会获得其余动物,如穿山甲、骆驼等。

  • BERT嵌入的句子片断(“穿山甲中的冠状病毒”,“蝙蝠做为冠状病毒的来源”等)是有用的,能够发现片断变体,很大程度上保留原始名词,这取决于它们在语料库中的存在。例如,“蝙蝠做为冠状病毒的来源”将产生片断的变异,如“蝙蝠冠状病毒”、“由蝙蝠产生的冠状病毒”等。

  • 这些嵌入虽然在很大程度上是互补的,但也有重叠的特性,word2vec嵌入能够产生深度优先的结果,BERT嵌入在统计结果的分布尾端产生广度优先结果。。例如,使用word2vec嵌入搜索蝙蝠,除了能够搜索到骆驼、穿山甲等其余动物以外,还能够搜索到蝙蝠物种(若是蝠、狐蝠、飞狐、翼龙等)。使用BERT对“孔雀冠状病毒”进行片断搜索,获得“猫冠状病毒病”、“猎豹冠状病毒”,尽管结果主要是鸟类冠状病毒。

  • BERT模型容许搜索输入(术语或片断)不在词汇表中,从而使任何用户输入均可以找到相关文档。

这种方法是如何工做的?

从word2vec/BERT嵌入中获取的扩展术语或片断,用于精确匹配已使用这些术语或片断离线索引的文档。在离线状态下,使用词性标记器和分块器的组合从语料库中获取片断,并使用word2vec和BERT这两种模型为其建立嵌入。

  • 将用户输入映射到术语和片断嵌入不只具备增长搜索广度和深度的优点,并且还避免了建立与用户输入匹配的高质量文档嵌入的问题。具体来讲,片断扮演文档索引的双重角色,并使单个文档具备可搜索的多个“提取摘要”,由于片断嵌入在文档中。与纯粹使用术语或短语查找此类文档相比,使用片断还会增长找到大篇幅文档中目标关键词的概率。例如寻找冠状病毒的潜在动物来源就是在大篇幅文档中找到目标的一个明确的案例。咱们能够在上面的图中看到片断与单个文档匹配(这在下面的notes部分中进行了详细的检查)。

  • 使用嵌入纯粹是为了发现候选术语/片断,并利用传统的搜索索引方法来寻找匹配这些术语/片断的文档,这使咱们可以大规模地执行文档搜索。

  • 最后,在找到诸如“ COVID-19的动物来源是什么?”之类的普遍问题的答案时鉴于此任务的范围和处理时间很大,所以能够自动且脱机完成此操做,此处介绍的片断嵌入驱动的搜索方法适用于“并不太宽广”的实时搜索用例,例如在给定足够的计算资源和有效的散列方法的状况下,使用“受体冠状病毒的受体”的嵌入大规模执行嵌入空间搜索。

当前方法的局限性

如前所述,word2vec嵌入扩展了单词和短语的搜索范围。它们不会扩展片断搜索的广度——邻域区域的直方图常常缺乏一个明显的尾部(下面的图)。这是由于片断因为其长度而没有足够的邻域上下文来学习高质量的嵌入。这一缺陷能够经过扩展训练的窗口大小和忽略句子边界来增长周围的上下文来部分地解决,可是在实践中仍然是不够的,由于片断的出现次数很低。

BERT嵌入在很大程度上只增长了搜索的深度,特别是对于片断和短语(使用BERT嵌入扩展单词的搜索深度在实践中是没有用的)。虽然它们确实在必定程度上增长了宽度,例如,“猕猴中的冠状病毒”的查询扩展为“棕榈果子狸中的冠状病毒”,包含在统计结果的分布尾端,但其宽度不如word2vec提供的单词和短语。下面的图说明了它的不足之处。实现注释中还有一些关于片断搜索缺少广度的例子,以及一些规避这一限制的方法。

结尾

Word2vec多是大约七年前第一个明确创建向量化表示能力的模型。这个简单模型的“架构”其实是两个向量数组,它输出的embeddings对于下游应用程序(如上面描述的文档搜索方法)仍然具备巨大的价值。

Word2vec与BERT嵌入合做,为文档搜索提供了一种解决方案,这种解决方案在搜索结果的质量和收敛时间方面都有可能改进传统方法(这种要求须要进行量化)。搜索系统可使用该向量表示不只选择特定的文档,并且还能够找到与所选文档相似的文档。

在选择文档以前,可使用嵌入(不管是单词、短语仍是句子片断)来扩大/深化搜索。词和短语的Word2vec嵌入在很大程度上增长了文档搜索的广度。BERT嵌入大大增长了句子片断的搜索深度。BERT嵌入还消除了生僻词场景,并促进了对文档中不一样的重要片断的可搜索提取摘要,从而加快了对相关文档的聚合。

参考

  • The animal source of COVID-19 is not confirmed to date. Sentence BERT
  • Unsupervised NER using BERT
  • An answer explaining how word2vec works

实现的注意事项

1. 此方法中使用的NLP方法/模型是什么?

词性标记来标记一个句子(基于CRF的比目前F1度量的STOA方法快一个数量级,而且模型的召回率也已经知足任务的要求)

分块器(chunker)建立短语

Word2vec表示单词和短语的嵌入

BERT用于片断嵌入(句子转换)

BERT用于无监督实体标记

2. 如何计算文档结果的相关性?

能够经过片断基于到输入片断的余弦距离的排序。而且集中匹配每一个片断的文档将被优先挑选出来,并按照与输入片断顺序相同的顺序列出。

3.这种搜索方法是否适用于实时搜索?

实时搜索的计算密集型步骤是嵌入空间中的类似度搜索(Word2vec或BERT)。现有的开放源码解决方案已经能够大规模地执行此操做。咱们能够作一些优化来减小时间/计算周期,好比根据输入搜索长度只搜索两个嵌入空间中的一个,由于这些模型的优缺点依赖于搜索长度。

4. 一个片断不就是一个很长的短语吗?若是是,为何要换一种叫法呢?

a)片断本质上是一个长短语。与短语的区别之因此有用,有一个缘由,片断能够是完整的句子,而不仅是部分句子

b)这些模型的强度依赖于咱们前面看到的输入长度。Word2vec在词/短语方面表现良好。BERT在片断区域表现最好(≥5个单词)

5. 邻域的直方图分布如何查找术语和片断?

如下是BERT和Word2vec的单词、短语(3个单词)和片断(8个单词)的邻域,它们说明了这两个模型的互补性。分布的尾部随着BERT单词长度的增长而增长,而与短语或单词相比,片断的尾部明显不一样。当计数项较低时,有时分布可能有很厚的尾部,这表示结果较差。由sentence-transformers产生的嵌入每每有一个独特的尾巴,与bert-as-service产生的嵌入相反,尽管都使用对子词进行求和做为池化方法(也有其余池方法),由于sentence-transfomers的监督训练使用句子对的标签带有蕴含,中性和矛盾的语义。

Word2vec对单词和短语很感兴趣。对于长短语,即便出现的次数很高,这种向量化几乎能够分解为一种“病态形式”,在高端汇集,其他的集中在低端。长短语的分布形状也有所不一样。然而,无论形状如何,邻域结果都清楚地代表了这种质量降低。

6. 结果对输入片断变化的敏感性。这就是咱们使用输入变量来收敛于相同结果成为可能。

虽然针对同一问题的不一样变体检索到的片断集是不一样的,可是检索到的片断集中可能有不少交集。可是,因为前面讨论的片断的广度有限,有些问题可能不会产生任何涉及全部搜索的名词的片断。例如,“做为冠状病毒来源的翼龙”或“翼龙冠状病毒”可能不会产生任何含有蝙蝠的片断(翼龙属于蝙蝠科)。当片断不包含全部名词时,须要考虑的一种方法是找到该术语的Word2vec的近义词并使用这些术语重建查询。

7. 使用术语、短语和片断在大篇幅文档,这些模型分别表现如何呢?

Word2vec嵌入在这种状况下并不直接有用,由于单个出现项/短语的向量没有足够的上下文来学习丰富的表示。BERT嵌入没有这个缺点,单词有足够的上下文来学习好的表示。然而,Word2vec仍然能够在搜索中为一个名词找到近义词。例如,若是文档空间中只有一个对果蝠冠状病毒的引用,那么在翼龙中搜索冠状病毒可能不会获得该文档。然而,在果蝠中搜索冠状病毒片断(使用Word2vec建立)能够找到该文档。可是若是一个片断出如今一个分布尾部使它成为一个候选者,那么就可能会被筛出去。大多数片断固有的可解释性提供了一个优点,而一个单词或短语不必定具有这个优点。

8. 关于提取动物冠状病毒信息的更多细节

使用Word2vec和实体标记,大约得到了1000(998)个生物实体。这些被用来收集195个带有病毒的片断。这里显示了一个包含30个片断的示例

这些片断的样本有动物做为冠状病毒潜在来源的证据

原文连接:https://towardsdatascience.com/document-search-with-fragment-embeddings-7e1d73eb0104

欢迎关注磐创AI博客站: http://panchuang.net/

sklearn机器学习中文官方文档: http://sklearn123.com/

欢迎关注磐创博客资源汇总站: http://docs.panchuang.net/

相关文章
相关标签/搜索