🚀 免费试用 Zilliz Cloud,完全托管的 Milvus,体验 10 倍的性能提升!立即试用>

milvus-logo
LFAI

快速构建语义搜索

  • Scenarios
April 19, 2021
Elizabeth Edmiston

语义搜索是帮助客户或员工找到正确产品或信息的绝佳工具。它甚至可以显示难以索引的信息,以获得更好的结果。尽管如此,如果你的语义方法不能快速部署,它们也不会给你带来任何好处。客户或员工不会坐等系统慢慢回应他们的查询--而且在同一时间,可能还有成千上万的其他查询正在被收录。

如何让语义搜索变得更快?慢速语义搜索是行不通的。

幸运的是,这正是 Lucidworks 乐于解决的问题。我们最近测试了一个中等规模的 Collections(详情请继续阅读),其结果是,在超过 100 万个文档的 Collections 中实现了 1500 RPS(每秒请求数),平均响应时间约为 40 毫秒。这就是真正的速度。


为了实现快如闪电的机器学习魔力,Lucidworks 使用语义向量搜索方法实现了语义搜索。其中有两个关键部分。


第一部分:机器学习模型

首先,你需要一种将文本编码成数字向量的方法。文本可以是产品描述、用户搜索查询、问题,甚至是问题的答案。语义搜索模型经过训练后可以对文本进行编码,这样,与其他文本语义相似的文本就会被编码成在数值上彼此 "接近 "的向量。这一编码步骤需要快速完成,以支持每秒上千次或更多可能的客户搜索或用户查询。


第二部分:向量搜索引擎

其次,您需要一种方法来快速找到与客户搜索或用户查询最匹配的内容。模型会将文本编码为数字向量。在此基础上,您需要将其与目录或问答列表中的所有数字向量进行比较,以找到最佳匹配--与查询向量 "最接近 "的向量。为此,您需要一个能以闪电般的速度有效处理所有这些信息的向量引擎。该引擎可能包含数百万个向量,而你真正想要的只是与查询匹配的二十来个最佳向量。当然,它还需要每秒处理上千个这样的查询。

为了应对这些挑战,我们在Fusion 5.3 版本中添加了向量搜索引擎Milvus。Milvus 是一款开源软件,而且速度很快。Milvus 使用 FAISS(Facebook 人工智能相似性搜索),这与 Facebook 在生产中用于自己的机器学习计划的技术相同。必要时,它可以在GPU 上运行得更快。当 Fusion 5.3(或更高版本)安装了机器学习组件时,Milvus 会作为该组件的一部分自动安装,因此您可以轻松开启所有这些功能。

创建特定 Collections 时指定的该 Collections 中向量的大小取决于生成这些向量的模型。例如,一个给定的 Collections 可以存储对产品目录中的所有产品描述进行编码(通过模型)后生成的向量。如果没有 Milvus 这样的向量搜索引擎,就无法在整个向量空间中进行相似性搜索。因此,相似性搜索只能局限于从向量空间中预先选择的候选向量(例如 500 个),性能较慢,搜索结果的质量也较低。Milvus 可以在多个向量 Collections 中存储数千亿个向量,以确保搜索速度和结果的相关性。


既然我们已经了解了一点 Milvus 可能如此重要的原因,让我们回到语义搜索工作流程上来。语义搜索分为三个阶段。在第一阶段,加载和/或训练机器学习模型。之后,将数据索引到 Milvus 和 Solr 中。最后一个阶段是查询阶段,也就是进行实际搜索的阶段。下面我们将重点讨论最后两个阶段。


编入 Milvus 索引

Lucidworks-1.png Lucidworks-1.png

如上图所示,查询阶段的开始与索引阶段类似,只是输入的是查询而不是文档。对于每个查询

  1. 查询会被发送到智能答案索引管道。
  2. 然后将查询发送到 ML 模型。
  3. ML 模型会返回一个数字向量(从查询中加密)。同样,模型的类型决定了向量的大小。
  4. 向量被发送到 Milvus,然后由 Milvus 确定指定的 Milvus Collections 中哪些向量与提供的向量最匹配。
  5. Milvus 会返回与第四步确定的向量相对应的唯一 ID 和距离列表。
  6. 包含这些 ID 和距离的查询会被发送到 Solr。
  7. 然后,Solr 会返回与这些 ID 相关联的文档的有序列表。


规模测试

为了证明我们的语义搜索流程能够按照我们的客户要求的效率运行,我们在谷歌云平台上使用 Gatling 脚本运行了规模测试,使用的是带有八个 ML 模型副本、八个查询服务副本和一个 Milvus 实例的 Fusion 集群。测试使用 Milvus FLAT 和 HNSW 索引进行。FLAT 索引的召回率为 100%,但效率较低--数据集较小时除外。HNSW(层次化小世界图)索引仍然具有高质量的结果,而且在较大数据集上的性能有所提高。

让我们来看看我们最近运行的一个示例中的一些数据:

Lucidworks-2.png Lucidworks-2.png

Lucidworks-3.png Lucidworks-3.png

Lucidworks-4.png Lucidworks-4.png


开始使用

Smart Answers管道设计为易于使用。Lucidworks 具有预训练模型,这些模型易于部署,通常具有良好的效果--不过,在预训练模型的同时训练您自己的模型,将获得最佳效果。现在就联系我们,了解如何在搜索工具中实施这些措施,以获得更有效、更令人愉悦的结果。

本博客转贴自:https://lucidworks.com/post/how-to-build-fast-semantic-search/?utm_campaign=Oktopost-Blog+Posts&utm_medium=organic_social&utm_source=linkedin

    Try Managed Milvus for Free

    Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

    Get Started

    Like the article? Spread the word

    扩展阅读