【一文读懂】基于 Havenask 向量检索 + 大模型,构建可靠的智能问答服务
作者:本岩
Havenask 是阿里巴巴智能引擎事业部自研的开源高性能搜索引擎,深度支持了包括淘宝、天猫、菜鸟、高德、饿了么在内的几乎整个阿里的搜索业务。本文针对性介绍了 Havenask 作为一款高性能的召回搜索引擎,应用在向量检索和 LLM 智能问答场景的解决方案和核心优势。通过 Havenask 向量检索+大模型可以构建可靠的垂直领域的智能问答方案,同时快速在业务场景中进行实践及应用。
一、Havenask 介绍
Havenask 是阿里巴巴广泛使用的自研大规模分布式检索系统,是过去十多年阿里在电商领域积累下来的核心竞争力产品,广泛应用在搜推广和大数据检索等典型场景。在 2022 年云栖大会-云计算加速开源创新论坛上完成开源首发,同时作为阿里云开放搜索 OpenSearch 底层搜索引擎,OpenSearch 自 2014 年商业化,目前已有千余家外部客户。
二、向量检索
近年来,随着短视频、电商等领域的繁荣,产生了越来越多的非结构化数据,如图片、音频、视频、行为数据等。人们通常使用人工智能算法从中提取出特征向量,再通过对这些特征向量的计算和检索来实现对非结构化数据的分析与检索,以实现搜索推荐、人脸识别等功能场景。因此,需要存储这些特征向量,并进行高效率的检索。
传统的基于关键字的信息检索,只有命中全部或者部分关键字的数据才会被召回。与此不同的是,向量检索是一种近似搜索(Approximate Nearest Neighbor),从大量数据中找出最相似的 n 个结果。在业界主要有两种支持向量检索的方式:一是针对向量构建索引、提供召回服务的向量数据库。另一种是将向量检索融合进传统的搜索引擎或中,作为搜索引擎的一种索引。将传统倒排索引与向量检索配合使用,二者互补,提高召回结果的相关性。
Havenask 作为传统的搜索引擎,深度集成阿里自研的高性能向量库 Proxima,实现了对向量检索的支持。在 Havenask 中有多种倒排索引,如文本索引、数字索引、字符串索引等。而向量作为一种特殊的自定义索引,与其他普通的倒排索引一样地使用,从而可以将向量检索与文本检索结合起来,实现向量与文本的混合检索。
2.1 使用方式
与文本倒排结合
目前,向量索引是 Havenask 的一种自定义索引,可以与其他倒排索引一起结合使用。业务上比较常见的使用方式,如在 nlp 场景,将向量检索的结果与文本检索的结果合并起来,丰富结果内容。文本检索保证查询的精确度,向量检索扩展语义提供更广泛的内容。二者相互补充,能够提升结果的准确性,降低无结果率。
解析后的查询语法树:
每个叶子节点做索引的查询,之后合并结果。
带条件过滤检索
在大多数业务场景中,通常会带有特定的过滤条件,只召回满足条件的结果。Havenask 的向量检索将条件过滤和向量相似度计算结合起来,精确判断过滤条件,进行高效的向量检索。从而使得结果更加准确,且不会缺少结果。
如:
带标签检索
在一些场景下,数据是按某些特定的标签进行分类。 如数据按用户维度组织,一次查询只查询某个指定用户下的数据。针对这种场景,Havenask 提供了按标签查询的功能,在建索引时就将数据按标签分类,从物理上将数据按标签隔离,分别构建索引。查询时,只需要检索相应用户的索引数据。这样能够提高向量检索的性能和准确性。
2.2 索引构建方式
目前 Havenask 支持 HNSW(图)、QC(量化距离)、Linear(暴力计算)三种索引构建方式。
HNSW
HNSW 是经典的多层图算法,召回率高、性能好,适用于对召回结果要求高的场景。
QC
QC 表示量化聚类,与 Fassis 的 IVF 类似,通过聚类的方式构建向量索引。且支持 int8、int16 量化,量化后能够显著地减少索引的体积,并且保证较高的召回率。适用于超大规模的向量场景,节省资源。
Linear
Linear 为暴力计算,会遍历所有的索引数据,适用于数据规模非常小的场景。
三、LLM 问答
ChatGPT 的出现带起了大模型热,大模型能够帮助从大量的信息里总结出关键的信息。很多企业或者个人都希望构建知识库,通过大模型进行归纳、总结后回答问题。
下图是典型的知识库构建流程:
整体流程可以分为两部分:数据处理和问答流程。
数据处理
这部分主要功能是将已有的知识数据向量化,依赖文本向量化模型,将文本数据向量化,生成的向量数据存入 Havenask 中。处理步骤如下:
从原始文档中提取出所有的文本数据,按文本语义将文本切分成多个 chunk
将这些 chunk 丢给文本模型,生成 embedding 数据
将 embedding 和 chunk,以及 chunk 所属的原始文档的一些属性信息(如文件名、文章地址等)一起存入 Havenask 中
问答流程
这部分主要处理与 LLM 的交互,依赖和数据处理一样的文本模型以及一个大模型。可以分为三个步骤:
将输入的问题丢给文本模型,生成 embedding 数据
将 embedding 数据以及一些其他的查询条件(如:查询的用户 ID 等)给到 Havenask,查询获取最相关或相似的内容。这里的查询条件可以将向量与文本以及其他一些属性信息相结合,以便查询出更加精确的知识,降低无结果率。
让 LLM 根据获得的最相关的内容,以及问题推理出答案。查询 LLM 的 prompt 可能如下:
最后将结果展示给用户:
四、性能
下面是 Havenask 向量检索的测试数据:
五、总结
Havenask 通过深度集成 proxima 向量库,以 Havenask 中的一种索引类型的方式支持向量检索。支持向量与文本的混合查询、带标签的向量查询、以及支持按过滤条件的向量查询。支持 HNSW、QC、Linear 等 3 种向量索引构建方式。支持超大规模的向量数据,支持水平扩展,具有低延迟、高吞吐的特点。
相关资料
[01]Havenask 开源官网
[02] Havenask-Github 开源项目地址
https://github.com/alibaba/havenask
[03] 阿里云 OpenSearch 官网
https://www.aliyun.com/product/opensearch
钉钉扫码加入 Havenask 开源官方技术交流群
版权声明: 本文为 InfoQ 作者【阿里技术】的原创文章。
原文链接:【http://xie.infoq.cn/article/41b53328e05ab318156b0dfe5】。文章转载请联系作者。
评论