ElasticSearch中使用bge-large-zh-v1.5进行向量检索(一)

2024-04-13 13:12

本文主要是介绍ElasticSearch中使用bge-large-zh-v1.5进行向量检索(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、准备

系统:MacOS 14.3.1

ElasticSearch:8.13.2

Kibana:8.13.2

BGE是一个常见的文本转向量的模型,在很多大模型RAG应用中常常能见到,但是ElasticSearch中默认没有。BGE模型有很多版本,本次采用的是bge-large-zh-v1.5。下载地址:

HuggingFace:https://huggingface.co/BAAI/bge-large-zh-v1.5

Modelscope:魔搭社区

将bge-large-zh-v1.5导入ElasticSearch详见:Eland上传bge-large-zh-v1.5向量化模型到ElasticSearch中-CSDN博客

二、向量化简单测试

启动ES和Kibana

在Kibana的【机器学习】->【已训练模型】找到模型bge-large-zh-v1.5:

打开【开发工具】,简单测试:

POST _ml/trained_models/bge-large-zh-v1.5/_infer
{"docs": [{"text_field": "我的第一个向量化模型"}]
}

结果:

拉到最下面,显示向量的维数是1024,符合预期。

三、向量索引构建

我们直接基于ElasticSearch以及bge-large-zh-v1.5模型即时生成向量,因此核心主要分三步:

1. 创建原始文本索引

2. 创建原始文本索引对应的向量索引

3. 创建向量化的Pipeline并应用

创建原始文本索引

首先创建一个用于示例的原始文本类型索引article:

PUT /article
{"mappings": {"properties": {"title": {"type": "text"},"brief": {"type": "text"},"author": {"type": "keyword"},"content": {"type": "text"},"readNumber": {"type": "integer"}}}
}

写入3条测试数据

POST /article/_doc/001
{"title": "浙江丽水:住房公积金贷款最高限额拟提至100万元","brief": "【浙江丽水:住房公积金贷款最高限额拟提至100万元】财联社3月21日电,浙江省丽水市住房公积金管理中心就《关于进一步完善住房公积金政策的通知(征求意见稿)》公开征求意见。","author": "黄宁","content": "【浙江丽水:住房公积金贷款最高限额拟提至100万元】财联社3月21日电,浙江省丽水市住房公积金管理中心就《关于进一步完善住房公积金政策的通知(征求意见稿)》公开征求意见,职工首次申请住房公积金贷款购买首套自住住房的,双缴存职工最高限额由80万元上调为100万元;单缴存职工最高限额由40万元上调为60万元。职工二次申请住房公积金贷款或购买第二套自住住房的,双缴存职工最高限额由60万元上调为80万元;单缴存职工最高限额由30万元上调为50万元。同一对夫妻符合国家政策生育二孩、三孩的职工家庭购买自住住房申请住房公积金贷款的,住房公积金贷款最高限额上浮20%。同一对夫妻符合国家政策生育二孩、三孩的职工家庭市场租赁自住住房的,提取限额上浮50%。在个人住房公积金贷款最高限额内,贷款申请人实际可贷额度由不超过贷款申请人夫妻双方近12月(含申请贷款当月)住房公积金账户月均余额的10倍调整为20倍。支持新市民、青年人贷款需求,全市住房公积金贷款保底额度调整为每户30万元。","readNumber": "188"
}
POST /article/_doc/002
{"title": "今年新疆两口岸通行中欧(中亚)班列已突破4000列","brief": "昨天(9日),一列满载汽车、机电产品、服装的中欧班列在办理完霍尔果斯海关放行手续后从霍尔果斯口岸出境,开往波兰马拉舍维奇。今年新疆霍尔果斯和阿拉山口口岸通行的中欧(中亚)班列已突破4000列。","author": "央视新闻客户端","content": """今年霍尔果斯铁路口岸通行中欧(中亚)班列数量达2031列,阿拉山口铁路口岸通行中欧(中亚)班列数量达2014列,双口岸中欧班列通行数量占全国的四成以上,越来越多的日用百货、机电设备、电子产品、农副产品等“中国制造”选择从新疆铁路口岸走向中亚、欧洲市场。
霍尔果斯站安全生产指挥中心调度员 杨利业:今年一季度,共计1.2万辆商品车搭载中欧班列出口到哈萨克斯坦、乌兹别克斯坦等国家,助力‘新三样’走俏海外。
霍尔果斯海关监管三科副科长 赵远凤:现在每天经霍尔果斯口岸通行的班列保持在20列以上。""","readNumber": "208"
}
POST /article/_doc/003
{"title": "新疆巴州逾300万亩棉花机械化种植助力棉农节本增效","brief": "2024年,新疆巴州棉花的种植面积预计达300万亩以上,播种时间将从4月初持续至5月初。","author": "央视新闻客户端","content": """中新网乌鲁木齐4月9日电 (刘雨珊 申凯龙 康兴平)进入四月,新疆巴州逾300万亩棉花正式进入春播阶段,田间地头处处都是一片热火朝天的春播景象。
在新疆巴州轮台县群巴克镇迪那尔村的高标准农田里,两台装有北斗卫星定位导航系统的大型棉花播种机正缓缓前行。(吐尔逊·吾斯曼拍 摄)4月9日,在新疆巴州轮台县群巴克镇迪那尔村的高标准农田里,两台装有北斗卫星定位导航系统的大型棉花播种机正缓缓前行,农民在进行棉花播种时借助北斗导航系统实现无人驾驶作业,可一次性完成铺膜、铺滴灌带、播种、覆土等工作,且播行端直、耕作精准,作业率高,也方便棉花成熟后机械化采收。""","readNumber": "308"
}

创建向量索引

再创建一个新的包含向量的索引article_embeddings(相比于article新增text_embedding字段):

PUT /article_embeddings
{"mappings": {"properties": {"title": {"type": "text"},"brief": {"type": "text"},"author": {"type": "keyword"},"content": {"type": "text"},"readNumber": {"type": "integer"},"text_embedding": {"properties": {"model_id": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"predicted_value": {"type": "dense_vector","dims": 1024,"index": true,"similarity": "cosine"}}}}}
}

其中text_embedding.predicted_value为文本转向量后的向量字段。dims指定向量的维数,必须与BGE模型中的保持一致。

创建向量化Pipeline

创建文本->向量的Pipeline,对article索引中的title标题字段进行向量化:

PUT _ingest/pipeline/article_embeddings_pipeline
{"description": "Article embeddings pipeline","processors": [{"inference": {"model_id": "bge-large-zh-v1.5","target_field": "text_embedding","field_map": {"title": "text_field"}}}],"on_failure": [{"set": {"description": "Index document to 'failed-<index>'","field": "_index","value": "failed-{{{_index}}}"}},{"set": {"description": "Set error message","field": "ingest.failure","value": "{{_ingest.on_failure_message}}"}}]
}

创建后对索引article执行article_embeddings_pipeline,将向量化后的数据放到索引article_embeddings上:

POST _reindex?wait_for_completion=false
{"source": {"index": "article"},"dest": {"index": "article_embeddings","pipeline": "article_embeddings_pipeline"}
}

成功后查看article_embeddings的数据,已经成功加上了向量字段:

四、向量检索

假设要对用户query“中欧班列”进行向量化检索,先使用如下命令获得其BGE向量:

POST _ml/trained_models/bge-large-zh-v1.5/_infer
{"docs": [{"text_field": "中欧班列"}]
}

结果如下: 

把生成的向量作为查询的一部分,再利用ElasticSearch中的KNN向量相似度检索来搜索相似标题的文本:

GET article_embeddings/_search
{"query": {"knn": {"field": "text_embedding.predicted_value","num_candidates": 10,"query_vector": [0.008829478174448013,-0.029355255886912346,-0.025615187361836433,此处省略]}}
}

其中text_embedding.predicted_value是向量的字段,num_candidates是返回的数目

结果符合预期:

参考:Elasticsearch:介绍 kNN query,这是进行 kNN 搜索的专家方法_elasticsearch knnquery-CSDN博客

其他

注意:目前高版本已经不支持_knn_search了:

其他问题:

报错:

{
  "error": {
    "root_cause": [
      {
        "type": "x_content_parse_exception",
        "reason": "[5:7] [knn] unknown field [k]"
      }
    ],
    "type": "x_content_parse_exception",
    "reason": "[5:7] [knn] unknown field [k]"
  },
  "status": 400
}

原因:目前高版本已经不支持设置"k"了,无需设置"k"。

这篇关于ElasticSearch中使用bge-large-zh-v1.5进行向量检索(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/900233

相关文章

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

Python中注释使用方法举例详解

《Python中注释使用方法举例详解》在Python编程语言中注释是必不可少的一部分,它有助于提高代码的可读性和维护性,:本文主要介绍Python中注释使用方法的相关资料,需要的朋友可以参考下... 目录一、前言二、什么是注释?示例:三、单行注释语法:以 China编程# 开头,后面的内容为注释内容示例:示例:四

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

嵌入式数据库SQLite 3配置使用讲解

《嵌入式数据库SQLite3配置使用讲解》本文强调嵌入式项目中SQLite3数据库的重要性,因其零配置、轻量级、跨平台及事务处理特性,可保障数据溯源与责任明确,详细讲解安装配置、基础语法及SQLit... 目录0、惨痛教训1、SQLite3环境配置(1)、下载安装SQLite库(2)、解压下载的文件(3)、

Golang如何对cron进行二次封装实现指定时间执行定时任务

《Golang如何对cron进行二次封装实现指定时间执行定时任务》:本文主要介绍Golang如何对cron进行二次封装实现指定时间执行定时任务问题,具有很好的参考价值,希望对大家有所帮助,如有错误... 目录背景cron库下载代码示例【1】结构体定义【2】定时任务开启【3】使用示例【4】控制台输出总结背景