基于ElasticSearch的向量检索技术实践

基于ElasticSearch的向量检索技术实践

作者:Tableau

原文地址:https://zhuanlan.zhihu.com/p/620260383

图片、视频、语音、文本等非结构化数据可以通过人工智能技术(深度学习算法)提取特征向量,然后通过对这些特征向量的计算和检索来实现对非结构化数据的分析与检索。 针对向量检索常见的应用场景有:

  • 图片识别:以图搜图,通过图片检索图片;人脸识别

  • 自然语言处理:基于语义的文本检索。

  • 声纹匹配:音频检索。

  • 电商推荐:提取用户个性化特征或是商品的个性化属性,提高推荐模型的准确性,获得更加精确的推荐结果。

  • 知识图谱:智能搜索,智能问答,个性化推荐。

后续研究实践,以人脸为例,进行讨论介绍。

图片

向量检索面临的挑战主要在以下几个方面

  1. 高维数据:向量数据维度通常是 256/512 维。

  2. 海量数据:在电商场景图片搜索或者商品知识图谱等,

  3. 向量数据通常在千万到亿别级别。

  4. 高召回:为保证检索效果,精度召回率通常要求 95% 以上。

  5. 高性能:为保证用户体验,向量检索的响应要求毫秒级。

工程落地面临的挑战

  1. 系统高可用:需要实现一个分布式高可用系统

  2. 向量检索算法:需要根据不同场景,召回率和性能要求使用不同算法,并进行性能优化

  3. 通用的向量检索:适用于各种场景

  4. 与传统搜索结合:在向量检索的同时,需要其他一些业务字段的查询,过滤,和排序

向量检索简介

向量检索与机器学习分类问题

图片

在人脸识别的过程中,输入的人脸图片会转化为人脸特征值向量保存在计算机中作为人脸库,假设右图方块表示小王的多个人脸图片的特征值向量,三角表示小李的多个人脸特征值向量绿色向量表示输入的一张未知人脸图片的特征值向量。使用两向量的距离评估两向量表示的人脸的相似度在右图中与绿色新向量距离最近的为一方块向量,因此认为新输入的图片最有可能是小王的人脸图片。与人脸识别问题类似的其他的机器学习分类问题中,向量检索也是应用流程中的重要环节。

向量距离

KNN 检索最重要的子问题是如何评估任两个向量间的距离,机器学习聚类算法中最常用的距离是欧式距离和余弦距离。对某二维平面上两点

图片

**欧式距离:两向量终点连线的长度

图片

**余弦距离:两向量夹角的余弦值

### Elasticsearch 中实现向量检索的方法和配置 #### 启用 KNN 插件支持向量检索功能 为了在Elasticsearch中启用向量检索,需安装并启动KNN插件。此操作可以通过下载对应版本的插件包来完成,并按照官方文档中的说明进行设置。 ```bash bin/elasticsearch-plugin install https://artifacts.elastic.co/downloads/elasticsearch-plugins/knn-vector/knn-vector-8.15.0.zip ``` 上述命令适用于特定版本(如8.15.0),确保所使用的Elasticsearch版本与此相匹配[^1]。 #### 创建索引映射定义向量字段 创建一个新的索引来存储具有向量特性的文档时,需要特别指定用于保存这些高维特征的数据结构。下面是一个JSON片段的例子: ```json PUT /my-index { "mappings": { "properties": { "vector_field": { "type": "knn_vector", "dimension": 128 } } } } ``` 这里`vector_field`代表要存入的向量名称;而`dimension`则指定了该向量的空间维度大小,这取决于实际应用场景下的需求。 #### 执行基于相似度的查询请求 当准备就绪之后,就可以利用内置函数来进行近似最近邻搜索了。例如,在给定目标向量的情况下查找最接近它的其他记录: ```json POST /my-index/_search?size=5 { "_source": ["title"], "query": { "knn": { "vector_field": { "vector": [-0.794643, ... , -0.21621], // 输入待比较的目标向量值列表 "k": 5 // 返回前几名的结果数量 } } } } ``` 这段代码展示了如何通过HTTP POST方法提交一次带有参数化的KNN查询到指定路径下,从而获取与输入样本最为相近的一组条目信息。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值