语义检索 [1](Semantic Search) 是能帮助你的客户或员工找到正确的产品或信息的绝佳工具,它甚至可以检索到一些难以被索引的信息,从而获得更好的结果。即便如此,倘若你所部署的方案没有速度优势,那也无济于事。如果系统响应查询请求的速度非常缓慢,客户或员工可没有耐心干等着,更不用说可能还有其他上千个查询请求在同时发生。
如果低效的语义检索难以胜任,那么如何进行高速的语义检索呢?
幸运的是,Lucidworks 热衷于解决此类问题。最近,我们测试了一个中等规模的集群(详情请看下文),针对逾百万文档的集合,可达到每秒 1,500 RPS(每秒请求率),平均响应时间约 40 毫秒。这个速度可以说是非常可观了。
为了让机器学习达到闪电般快的速度,Lucidworks 通过向量搜索的方法执行语义检索,由两个关键部分组成。
首先,你需要将文本编码为特征向量。文本可以是产品说明、用户搜索查询指令、问题,甚至是问题的答案。训练语义模型对文本进行编码,语义上相似的文本被编码为数值上彼此“接近”的向量。为了支持每秒可能出现的数千个或更多的客户搜索或用户查询,该编码步骤需要快速完成。
其次,你需要一种能快速找到客户搜索或用户查询的最匹配结果的方法。前文中的模型已经将文本编码为特征向量。接着,将这个向量与目录或问答列表中的所有特征向量进行比较,找到与之最匹配的向量,即与查询向量“最接近”的向量。为此,一个能迅速高效地处理所有这些信息的向量引擎必不可少。引擎中可能包含了数百万个向量,而你实际上只需要其中匹配度最高的二十个左右。当然,它每秒需要处理约一千条此类查询。
为了解决这些难题,我们在 Fusion 5.3 版本[2]中添加了向量搜索引擎 Milvus[3]。Milvus 是一款开源软件,拥有极高的搜索速度。Milvus 采用的是 Facebook AI Similarity Search[4](FAISS,即 Facebook 人工智能相似性搜索)开源库,Facebook 在其自己的机器学习计划的生产中使用的也是这一技术。如有需要,它甚至可以在 GPU[5]的支持下运行得更快。Fusion 5.3(或更高版本)与机器学习组件一起安装时,Milvus 会作为该组件的一部分自动安装,轻松开启所有这些功能。
在创建集合的时候需要指定向量的维度(大小),这个向量的维度取决于生成这些向量的模型。例如,通过模型可以将产品目录中所有产品描述都编码为向量,并存储于一个给定的集合中。如果没有像 Milvus 这样的向量搜索引擎,那么就无法在整个向量空间上进行相似性搜索,而只能局限于从向量空间中预选出的候选项(比如 500 条),且性能低下、质量不佳。Milvus 可以存储多个向量集合的数千亿条向量,保证搜索快速且结果相关。
在了解了 Milvus 如此重要的原因后,让我们回到语义检索的工作流程。语义检索分为三个阶段:第一阶段是加载和/或训练机器学习模型;接着,将数据导入到 Milvus 和 Solr 中并建立索引;最后是查询阶段,即实际搜索发生的阶段。下面将重点介绍后两个阶段。
如上图所示,在建立索引阶段,对给定的数据源中的每个文档执行以下步骤:
当然,你也可以做一些调整,例如在 Milvus 中编码并储存多个字段。接下来,让我们进入第二阶段。
如上图所示,查询阶段与索引阶段的起始步骤类似,只是将进入管道的文档换成了查询指令。步骤如下:
为了证明我们的语义检索流程的效率符合我们的客户服务要求,我们使用 Gatling 脚本在 Google Cloud 平台上进行了扩展测试,启动了 8 个机器学习模型副本、8 个查询服务副本以及一个 Milvus 实例的 Fusion 集群。测试使用 Milvus FLAT 和 HNSW 索引。FLAT 索引的召回率是 100%,但效率较低——除非数据集较小。而 HNSW 索引在保证高质量结果的前提下,针对较大规模的数据集进一步提升了性能。
以下测量数值均来自最近运行的示例:
参考资料:
[1] Lucidworks 原文: https://lucidworks.com/post/what-is-semantic-search/
[2] Lucidworks Fusion 5.3 版本: https://lucidworks.com/post/enhance-personalization-efforts-with-new-features-in-fusion/
[3] Milvus: https://doc.lucidworks.com/fusion/5.3/8821/milvus
[4] FAISS: https://ai.facebook.com/tools/faiss/
[5] GPU: https://en.wikipedia.org/wiki/Graphics_processing_unit
[6] Lucidworks Smart Answers: https://lucidworks.com/products/smart-answers/
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有