FAISS+SBERT实现的十亿级语义相似性搜索

语义搜索是一种关注句子意义而不是传统的关键词匹配的信息检索系统。尽管有许多文本嵌入可用于此目的,但将其扩展到构建低延迟api以从大量数据集合中获取数据是很少讨论的。在本文中,我将讨论如何使用SOTA语句嵌入(语句转换器)和FAISS来实现最小语义搜索引擎。

它是一个框架或一组模型,给出句子或段落的密集向量表示。这些模型是transformer网络(BERT、RoBERTa等),它们专门针对语义文本相似性的任务进行了微调,因为BERT在这些任务中执行得不是很好。下面给出了不同模型在STS基准测试中的性能。

之后执行相同步骤,但是最后将索引移到GPU上。

雷锋网版权文章,。详情见转载须知。

我们可以根据我们的用例通过参考指南来选择不同的索引选项。

让我们首先为搜索构建一个包装函数

搜索时间 搜索质量 每个索引向量使用的内存 训练时间 无监训练需要外部数据

“他是否成为阿森纳的对手,我觉得并不重要。因为这对足球是好事。如果不来英超,我们也希望能在欧冠中看到他。你总是希望最好的球员在你的联赛,我觉得对于运动员来说,拥有世界上最有竞争力的联赛,这是最好的事情。英超总是拥有最好的球员,以前有C罗,我曾和他交过手,他非常棒,这样的球员可以提升每个人和每支球队的水平。”

在这些模型中,语义文本相似度被视为一个回归任务。这意味着,每当我们需要计算两个句子之间的相似度得分时,我们需要将它们一起传递到模型中,然后模型输出它们之间的数值分数。虽然这对于基准测试很有效,但是对于实际的用例来说,它的伸缩性很差,原因如下。

我们可以看到句子transformer模型比其他模型有很大的优势。

因此,选择合适的指数将是这些因素之间的权衡。

首先,让我们安装并加载所需的库

Faiss是一个基于C++的库,由FacebookAI构建,在Python中有完整的包装器,用于索引矢量化数据并对其进行有效的搜索。Faiss基于以下因素提供了不同的索引。

很好,你可以在0.02秒内得到结果,使用GPU(在这个实验中使用了Tesla T4),它比CPU后端快75倍

当大家历经近4个小时的攀爬,克服高寒缺氧、体能消耗过大、极端天气等多重考验,站在峰顶的那一刻,群山、冰川、湖泊、草甸尽在眼前,伴着身旁缭绕的云雾,那是雪域高原独一无二的美丽。(记者 张伟 编辑 郭世浩)

让我们定义索引并向其添加数据

因为NumPy没有序列化函数,因此唯一的方法是将其转换为JSON,然后保存JSON对象,但是大小将增加五倍。例如,在768维向量空间中编码的一百万个数据点具有正常的索引,大约为3GB,将其转换为JSON将使其成为15GB,而普通机器无法保存它的RAM。因此,每次执行搜索时,我们都要运行一百万次计算推理,这是不实际的。

加载一个包含一百万个数据点的数据集

如果,你也是位热爱分享的AI爱好者。欢迎与译站一起,学习新知,分享成长。

阿尔特塔说:“梅西的新闻到处都是,他是历史上拥有最多追求者的球员。我从小就是巴萨球迷,当看到足球历史上的最佳球员要离开巴萨,这让我很难过,让我们看看会发生什么吧。如果他能来英格兰踢球,我们都会喜欢的。”

将序列化的索引导出到托管搜索引擎的任何计算机中

现在让我们转移这个搜索方法并用GPU执行这个搜索

加载模型并对数据集执行推理

1.当你需要搜索大约10k个文档时,你需要进行10k个独立的推理计算,不可能单独计算嵌入量而只计算余弦相似度。见作者的解释。2.最大序列长度(模型一次可以接受的单词/标记的总数)在两个文档之间共享,这会导致的表示的含义由于分块而被稀释

这是一个基本的实现,在语言模型部分和索引部分仍然需要做很多工作。有不同的索引选项,应该根据用例、数据大小和可用的计算能力选择正确的索引选项。另外,这里使用的句子嵌入只是对一些公共数据集进行了微调,在特定领域的数据集上对它们进行微调可以改进,从而提高搜索结果。

首先让我们关闭CPU版本的Faiss并重启GPU版本

只需1.5秒,就可以在仅使用CPU后端的百万文本文档的数据集上执行基于意义的智能搜索。

加载预训练模型并且进行推断

现在让我们看看搜索结果和响应时间

但是如果你用代码和GLUE来看看排行榜,你会看到很多的模型超过90。为什么我们需要句子transformers?

但是为什么我不能仅仅序列化编码数据的NumPy数组而不是索引它们呢?如果我能等几秒钟的话,使用余弦相似性呢?

我使用了一个来自Kaggle的数据集,其中包含了17年来出版的新闻标题。

AI研习社是AI学术青年和AI开发者技术交流的在线社区。我们与高校、学术机构和产业界合作,通过提供学习、实战和求职服务,为AI学术青年和开发者的交流互助和职业发展打造一站式平台,致力成为中国最大的科技创新人才聚集地。

Comments are closed.