使用Transformers和Faiss构建语义搜索引擎
文章插图
介绍您是否曾经想过如何使用Sentence Transformers创建嵌入向量 , 并在诸如语义文本相似这样的下游任务中使用它们?
在本教程中 , 您将学习如何使用Sentence Transformers和Faiss构建一个基于向量的搜索引擎 。 代码地址会在本文的最后提供
为什么要构建基于向量的搜索引擎?基于关键字的搜索引擎很容易使用 , 在大多数情况下工作得很好 。 你要求机器学习论文 , 他们会返回一堆包含精确匹配或接近变化的查询结果 , 就像机器学习一样 。 其中一些甚至可能返回包含查询的同义词或出现在类似上下文中的单词的结果 。 其他的 , 如Elasticsearch , 可以快速、可伸缩地完成所有这些功能 , 甚至更多 。 然而 , 基于关键词的搜索引擎通常会遇到以下问题:
· 复杂查询或具有双重含义的单词 。
· 长查询 , 如论文摘要或博客中的一段 。
· 不熟悉某个领域术语的用户或想要进行探索性搜索的用户 。
基于向量(也称为语义)的搜索引擎通过使用最先进的语言模型找到文本查询的数字表示 , 在高维向量空间中对它们进行索引 , 并度量查询向量与索引文档的相似程度 , 从而解决了这些缺陷 。
索引、矢量化和排序方法在深入学习本教程之前 , 我将简要解释基于关键字和基于向量的搜索引擎如何进行以下工作的
· 索引文档(即以一种容易检索的形式存储它们
· 向量化文本数据
· 衡量文档与查询的相关性
这将帮助我们突出两种系统之间的差异 , 并理解为什么基于矢量的搜索引擎可以为长文本查询提供更有意义的结果 。
1、基于关键字搜索引擎
让我们以一个过于简化的Elasticsearch为例 。 Elasticsearch使用标记器将文档分割成标记(即有意义的文本单位) , 这些标记映射到数字序列 , 并用于构建反向索引 。
文章插图
反向索引:与检查每个文档是否包含查询词不同 , 反向索引使我们能够查找一个词并检索包含该词的所有文档列表 。 源
同时 , Elasticsearch用一个高维加权向量表示每个索引文档 , 其中每个不同的索引项是一个维度 , 它们的值(或权重)是用TF-IDF计算的 。
为了找到相关文档并对其进行排序 , Elasticsearch将布尔模型(BM)与向量空间模型(VSM)结合在一起 。 BM标记包含用户查询的文档 , VSM评分它们的相关性 。 在搜索过程中 , 使用相同的TF-IDF管道将查询转换为向量 , 文档d对查询q的VSM得分为加权查询向量V(q)和V(d)的余弦相似度 。
这种度量相似度的方法非常简单 , 而且不可扩展 。 Elasticsearch背后的工作机器是Lucene , 它使用了各种技巧 , 从增强领域到改变矢量的标准化方式 , 以加快搜索速度和提高其质量 。
Elasticsearch在大多数情况下工作得很好 , 然而 , 我们希望创建一个系统 , 也关注单词的上下文 。 这把我们带到了基于矢量的搜索引擎 。
2、基于矢量的搜索引擎
我们还需要创建考虑单词上下文的文档表示 。 我们还需要一种高效可靠的方法来检索存储在索引中的相关文档 。
创建密集的文档向量
近年来 , NLP社区在这方面取得了长足的进步 , 许多深度学习模型都是开源的 , 并通过像Huggingface 's transformer这样的软件包进行分发 , 这些软件包提供了最先进的、经过预先训练的模型 。 使用预先训练好的模型有很多优点:
· 它们通常生成高质量的嵌入 , 因为它们是在大量文本数据上训练的 。
· 它们不需要您创建自定义标记器 , 因为转换器有自己的方法 。
· 根据您的任务对模型进行微调很简单
这些模型为文档中的每个标记生成一个固定大小的向量 。 我们如何获得文档级向量呢?这通常通过平均或汇集单词向量来实现 。 然而 , 这些方法产生低于平均的句子和文档嵌入 , 通常比平均GloVe向量差 。
为了构建我们的语义搜索引擎 , 我们将微调基于BERT的模型 , 以生成语义上有意义的长文本序列嵌入 。
建立一个指数并衡量相关性
检索相关文档最简单的方法是测量查询向量和数据库中每个文档向量之间的余弦相似度 , 然后返回得分最高的那些 。 不幸的是 , 这在实践中非常缓慢 。
首选的方法是使用Faiss , 一个有效的相似度搜索和聚类密集向量库 。 Faiss提供了大量的索引和复合索引 。 此外 , 给定一个GPU, Faiss可扩展到数十亿个向量!
用Transformers 和Faiss构建一个基于向量的搜索引擎在这个实际的例子中 , 我们将使用真实的数据 。 通过使用Orion查询微软的学术图表 , 我创建了一个包含8,430篇发表于2010年至2020年的关于错误信息、虚假信息和假新闻的学术文章的数据集 。
- 会员|美容院使用会员管理软件给顾客更好的消费体验!
- 中国|浅谈5G移动通信技术的前世和今生
- 芯片|华米GTS2mini和红米手表哪个好 参数功能配置对比
- 桌面|日常使用的软件及网站分享 篇一:几个动态壁纸软件和静态壁纸网站:助你美化你的桌面
- QuestMobile|QuestMobile:百度智能小程序月人均使用个数达9.6个
- 二维码|村网通?澳大利亚一州推出疫情追踪二维码 还考虑采用人脸识别和地理定位
- 不到|苹果赚了多少?iPhone12成本不到2500元,华为和小米的利润呢?
- 机器人|网络里面的假消息忽悠了非常多的小喷子和小机器人
- 华为|骁龙870和骁龙855区别都是7nm芯片吗 性能对比评测
- 花15.5亿元与中粮包装握手言和 加多宝离上市又进一步?|15楼财经 | 清远加多宝