图为 ZSearch 基础架构负责人十倍 2019 Elastic Dev Day 现场分享
引言
ElasticSearch(简称 ES)是一个非常受欢迎的分布式全文检索系统,常用于数据分析,搜索,多维过滤等场景。蚂蚁金服从2017年开始向内部业务方提供 ElasticSearch 服务,我们在蚂蚁金服的金融级场景下,总结了不少经验,此次主要给大家分享我们在向量检索上的探索。
ElasticSearch 的痛点
ElasticSearch 广泛应用于蚂蚁金服内部的日志分析、多维分析、搜索等场景。当我们的 ElasticSearch 集群越来越多,用户场景越来越丰富,我们会面临越来越多的痛点:
- 如何管理集群;
- 如何方便用户接入和管理用户;
- 如何支持用户不同的个性化需求;
- ...
为了解决这些痛点,我们开发了 ZSearch 通用搜索平台:
- 基于 K8s 底座,快速创建 ZSearch 组件,快捷运维,故障机自动替换;
- 跨机房复制,重要业务方高保;
- 插件平台,用户自定义插件热加载;
- SmartSearch 简化用户搜索,开箱即用;
- Router 配合 ES 内部多租户插件,提高资源利用率;
向量检索需求
基于 ElasticSearch 的通用搜索平台 ZSearch 日趋完善,用户越来越多,场景更加丰富。
随着业务的飞速发展,对于搜索的需求也会增加,比如:搜索图片、语音、相似向量。
为了解决这个需求,我们是加入一个向量检索引擎还是扩展 ElasticSearch 的能力使其支持向量检索呢?
我们选择了后者,因为这样我们可以更方便的利用 ElasticSearch 良好的插件规范、丰富的查询函数、分布式可扩展的能力。
接下来,我来给大家介绍向量检索的基本概念和我们在这上面的实践。
向量检索基本概念
向量从表现形式上就是一个一维数组。我们需要解决的问题是使用下面的公式度量距离寻找最相似的 K 个向量。
- 欧式距离:
两点间的真实距离,值越小,说明距离越近;
- 余弦距离:
就是两个向量围成夹角的 cosine 值,cosine 值越大,越相似;
- 汉明距离:
一般作用于二值化向量,二值化的意思是向量的每一列只有0或者1两种取值。
汉明距离的值就两个向量每列数值的异或和,值越小说明越相似,一般用于图片识别;
- 杰卡德相似系数:
把向量作为一个集合,所以它可以不仅仅是数字代表,也可以是其他编码,比如词,该值越大说明越相似,一般用于相似语句识别;
因为向量检索场景的向量都是维度很高的,比如256,512位等,计算量很大,所以接下来介绍相应的算法去实现 topN 的相似度召回。