Elasticsearch:使用 inference API 进行语义搜索
本教程中的说明向您展示了如何将 inference API 工作流与各种服务结合使用来对你的数据执行语义搜索。为了说明问题的方便,我将使用 Cohere 服务来进行详细说明。更多其它服务,请详细参阅链接。
重要:有关在 Elastic Stack 中执行语义搜索的最简单方法,请参阅 semantic_text 端到端教程。
在本次练习中,我们将使用 Cohere 的 embed-english-v3.0 模型。事实上,你可以使用任何 Cohere 和 OpenAI 模型,它们均受 inference API 支持。有关 HuggingFace 上可用的推荐模型列表,请参阅支持的模型列表。 你可以尝试如下的模型:
- Cohere 的 embed-english-v3.0 模型
- HuggingFace 的 all-mpnet-base-v2 模型
- OpenAI 的 text-embedding-ada-002 第二代嵌入模型
- 可通过 Azure AI Studio 或 Azure OpenAI 获得的模型
- Google Vertex AI 的 text-embedding-004 模型
- Mistral 的 mistral-embed 模型
- Amazon Bedrock 的 amazon.titan-embed-text-v1 模型
要求
你需要 Cohere 帐户才能将 inference API 与 Cohere 服务一起使用。
创建推理端点
使用 Create inference API 创建推理端点:
PUT _inference/text_embedding/cohere_embeddings /* 1 */
{"service": "cohere","service_settings": {"api_key": "<api_key>", /* 2 */ "model_id": "embed-english-v3.0", /* 3 */ "embedding_type": "byte"}
}
- 任务类型为路径中的 text_embedding,推理端点的唯一标识符 inference_id 为 cohere_embeddings。
- 你的 Cohere 帐户的 API 密钥。你可以在 Cohere 仪表板的 API 密钥部分下找到你的 API 密钥。你只需提供一次 API 密钥。Get inference API 不会返回你的 API 密钥。
- 要使用的嵌入模型的名称。你可以在此处找到 Cohere 嵌入模型的列表。
注意:使用此模型时,建议在密集向量字段映射中使用的相似度度量是点积。对于 Cohere 模型,嵌入被归一化为单位长度,在这种情况下点积和余弦度量是等效的。
从上面的请求上,我们可以看出来有一个限制 requests_per_minute 为 10000。这是因为我使用的是测试账号。
创建索引映射
必须创建目标索引的映射 - 包含模型将根据你的输入文本创建的嵌入的索引。目标索引必须具有一个字段,该字段对于大多数模型具有 dense_vector 字段类型,对于稀疏向量模型具有 sparse_vector 字段类型,就像 elser 服务的情况一样,用于索引所用模型的输出。
PUT cohere-embeddings
{"mappings": {"properties": {"content_embedding": { /* 1 */"type": "dense_vector", /* 2 */"dims": 1024, /* 3 */"element_type": "byte"},"content": { /* 4 */"type": "text" }}}
}
- 包含生成的标记的字段的名称。下一步必须在推理管道配置中引用它。
- 包含标记的字段是 dense_vector 字段。
- 模型的输出维度。在您使用的模型的 Cohere 文档中找到此值。
- 创建密集向量表示的字段的名称。在此示例中,字段的名称为 content。下一步必须在推理管道配置中引用它。
- 字段类型,在此示例中为 text。
使用推理处理器创建摄取管道
使用 inference processor 创建 ingest pipeline,并使用上面创建的模型对管道中摄取的数据进行推理。
PUT _ingest/pipeline/cohere_embeddings
{"processors": [{"inference": {"model_id": "cohere_embeddings", /* 1 */"input_output": { /* 2 */"input_field": "content","output_field": "content_embedding"}}}]
}
- 你使用 Create inference API 创建的推理端点的名称,在该步骤中称为 inference_id。
- 定义推理过程的 input_field 和将包含推理结果的 output_field 的配置对象。
加载数据
在此步骤中,你将加载稍后在推理提取管道中用于从中创建嵌入的数据。
使用 msmarco-passagetest2019-top1000 数据集,它是 MS MARCO Passage Ranking 数据集的子集。它包含 200 个查询,每个查询都附有相关文本段落列表。所有唯一段落及其 ID 都已从该数据集中提取并编译为 tsv 文件。
下载文件并使用机器学习 UI 中的 Data Visualizer 将其上传到你的集群。将名称 id 分配给第一列,将内容分配给第二列。索引名称为 test-data。上传完成后,你可以看到一个名为 test-data 的索引,其中包含 182469 个文档。
具体的步骤可以参考文章 “Elasticsearch:使用 ELSER 进行语义搜索 - sparse_vector”。
通过 inference ingest pipeline 采集数据
通过使用你选择的模型的推理管道重新索引数据,从文本中创建嵌入。此步骤使用重新索引 API 模拟通过管道采集数据。
POST _reindex?wait_for_completion=false
{"source": {"index": "test-data","size": 50 /* 1 */},"dest": {"index": "cohere-embeddings","pipeline": "cohere_embeddings"}
}
- 重新索引的默认批次大小为 1000。将大小减小到较小的数字可以加快重新索引过程的更新速度,从而使您能够密切跟踪进度并尽早发现错误。
注意:你的 Cohere 账户的速率限制可能会影响重新索引过程的吞吐量。
注意:由于我采用的是测试账号,有速率限制,在上面,我设置 max_docs 为10,也即只针对前 10个 文档进行向量化。你可以根据自己的账号来具体操作。
该调用返回一个任务 ID 来监控进度:
GET _tasks/<task_id>
上面显示我们的10个文档已经完成了向量的生成。我们可以通过如下的命令来进行查看:
如果你不想等到重新索引过程完全完成(对于大型数据集而言,这可能需要数小时),你也可以取消重新索引过程:
POST _tasks/<task_id>/_cancel
语义搜索
使用嵌入丰富数据集后,你可以使用 semantic search 查询数据。对于密集向量模型,将 query_vector_builder 传递给 k-最近邻 (kNN) 向量搜索 API,并提供查询文本和您用于创建嵌入的模型。对于像 ELSER 这样的稀疏向量模型,请使用 sparse_vector 查询,并提供查询文本和您用于创建嵌入的模型。
注意:如果你取消了重新索引过程,则你只会运行查询部分数据,这会影响结果的质量。
GET cohere-embeddings/_search
{"knn": {"field": "content_embedding","query_vector_builder": {"text_embedding": {"model_id": "cohere_embeddings","model_text": "Muscles in human body"}},"k": 10,"num_candidates": 100},"_source": ["id","content"]
}
结果,你将从 cohere-embeddings 索引中收到与查询含义最接近的前 10 个文档,这些文档按与查询的接近程度排序:
"hits": [{"_index": "cohere-embeddings","_id": "-eFWCY4BECzWLnMZuI78","_score": 0.737484,"_source": {"id": 1690948,"content": "Oxygen is supplied to the muscles via red blood cells. Red blood cells carry hemoglobin which oxygen bonds with as the hemoglobin rich blood cells pass through the blood vessels of the lungs.The now oxygen rich blood cells carry that oxygen to the cells that are demanding it, in this case skeletal muscle cells.ther ways in which muscles are supplied with oxygen include: 1 Blood flow from the heart is increased. 2 Blood flow to your muscles in increased. 3 Blood flow from nonessential organs is transported to working muscles."}},{"_index": "cohere-embeddings","_id": "HuFWCY4BECzWLnMZuI_8","_score": 0.7176013,"_source": {"id": 1692482,"content": "The thoracic cavity is separated from the abdominal cavity by the diaphragm. This is a broad flat muscle. (muscular) diaphragm The diaphragm is a muscle that separat…e the thoracic from the abdominal cavity. The pelvis is the lowest part of the abdominal cavity and it has no physical separation from it Diaphragm."}},{"_index": "cohere-embeddings","_id": "IOFWCY4BECzWLnMZuI_8","_score": 0.7154432,"_source": {"id": 1692489,"content": "Muscular Wall Separating the Abdominal and Thoracic Cavities; Thoracic Cavity of a Fetal Pig; In Mammals the Diaphragm Separates the Abdominal Cavity from the"}},{"_index": "cohere-embeddings","_id": "C-FWCY4BECzWLnMZuI_8","_score": 0.695313,"_source": {"id": 1691493,"content": "Burning, aching, tenderness and stiffness are just some descriptors of the discomfort you may feel in the muscles you exercised one to two days ago.For the most part, these sensations you experience after exercise are collectively known as delayed onset muscle soreness.urning, aching, tenderness and stiffness are just some descriptors of the discomfort you may feel in the muscles you exercised one to two days ago."}},(...)]
更多阅读 :将 Cohere 与 Elasticsearch 结合使用
相关文章:

Elasticsearch:使用 inference API 进行语义搜索
本教程中的说明向您展示了如何将 inference API 工作流与各种服务结合使用来对你的数据执行语义搜索。为了说明问题的方便,我将使用 Cohere 服务来进行详细说明。更多其它服务,请详细参阅链接。 重要:有关在 Elastic Stack 中执行语义搜索的最…...
PVE开启核显直通
启用内核 IOMMU 支持 修改/etc/default/grub配置文件以启用 IOMMU 支持,将GRUB_CMDLINE_LINUX_DEFAULT修改为: GRUB_CMDLINE_LINUX_DEFAULT"quiet intel_iommuon iommupt"iommupt的参数建议添加,以提高未直通设备 PCIe 的性能&am…...

使用 Bert 做文本分类,利用 Trainer 框架实现 二分类,事半功倍
简介 使用 AutoModelForSequenceClassification 导入Bert 模型。 很多教程都会自定义 损失函数,然后手动实现参数更新。 但本文不想手动微调,故使用 transformers 的 Trainer 自动微调。 人生苦短,我用框架,不仅可保证微调出的模…...

Obsidian git sync error / Obsidian git 同步失敗
Issue: commit due to empty commit message Solution 添加commit資訊,確保不留空白 我的設置:auto-backup: {{hostname}}/{{date}}/...

谷歌英文SEO外链如何做?
做英文SEO外链涉及多种策略和技巧,目标是提升目标网站的排名和流量,Google的搜索算法在不断演变,但外链一直是搜索引擎优化中重要的一环。有效的外链建设能够显著提升网站的SEO数据效果。关键在于创建一个多元化且自然的外链结构。不能仅仅依…...
vue使用Export2Excel导出表格
安装插件 npm install xlsx xlsx-style file-saver npm install node-polyfill-webpack-plugin (如果不安装的话后面使用会报错) 添加相关配置 在vue.config.js文件 const NodePolyfillPlugin require("node-polyfill-webpack-plugin") module.exports defineCon…...

Linux环境变量 本地变量 命令行参数
并行和并发 并行 多个进程在多个 CPU 下分别,同时进行运行。 并发 多个进程在一个 CPU 采用进程切换的方式,在一段时间内,让多个进程都得以推进,称之为并发。 CPU 中的寄存器扮演什么角色? 寄存器:cpu 内的寄存器里面保存的是进程…...
向量数据库Faiss的搭建与使用
1. 什么是Faiss? Faiss是由Facebook AI Research团队开发的一个库,旨在高效地进行大规模向量相似性搜索。它不仅支持CPU,还能利用GPU进行加速,非常适合处理大量高维数据。Faiss提供了多种索引类型,以适应不同的需求&a…...

微信小程序接入客服功能
前言 用户可使用小程序客服消息功能,与小程序的客服人员进行沟通。客服功能主要用于在小程序内 用户与客服直接沟通用,本篇介绍客服功能的基础开发以及进阶功能的使用,另外介绍多种客服的对接方式。 更多介绍请查看客服消息使用指南 客服视…...

mysql开启远程访问
个人建议mysql可以用宝塔自动下载安装。 远程访问, 1.关闭防火墙,确保ip能ping通 2.ping端口确定数据库能ping通 3.本地先连上去命令行修改远程访问权限。 mysql -u root -p use mysql; select user,host from user; select host from user where u…...

【NLP自然语言处理】文本处理的基本方法
目录 🍔什么是分词 🍔中文分词工具jieba 2.1 jieba的基本特点 2.2 jieba的功能 2.3 jieba的安装及使用 🍔什么是命名实体识别 🍔什么是词性标注 🍔小结 学习目标 🍀 了解什么是分词, 词性标注, 命名…...
uniapp使用defineExpose暴露和onMounted访问
defineExpose作用 暴露方法和数据 允许从模板或其他组件访问当前组件内部的方法和数据。明确指定哪些方法和数据可以被外部访问,从而避免不必要的暴露。 增强安全性 通过显式声明哪些方法和数据可以被外部访问,防止意外修改内部状态。提高组件的安全性&a…...

怎么使用matplotlib绘制一个从-2π到2π的sin(x)的折线图-学习篇
首先:如果你的环境中没有安装matplotlib,使用以下命令可以直接安装 pip install matplotlib如何画一个这样的折线图呢?往下看 想要画一个简单的sin(x)在-2π到2π的折线图,我们要拆分成以下步骤: 先导入相关的库文…...

【Java毕业设计】基于SpringBoot+Vue+uniapp的农产品商城系统
文章目录 一、系统架构1、后端:SpringBoot、Mybatis2、前端:Vue、ElementUI4、小程序:uniapp3、数据库:MySQL 二、系统功能三、系统展示1、小程序2、后台管理系统 一、系统架构 1、后端:SpringBoot、Mybatis 2、前端…...

C++ | Leetcode C++题解之第390题消除游戏
题目: 题解: class Solution { public:int lastRemaining(int n) {int a1 1;int k 0, cnt n, step 1;while (cnt > 1) {if (k % 2 0) { // 正向a1 a1 step;} else { // 反向a1 (cnt % 2 0) ? a1 : a1 step;}k;cnt cnt >> 1;step …...

echarts进度
echarts图表集 const data[{ value: 10.09,name:制梁进度, color: #86C58C,state: }, { value: 66.00,name:架梁进, color: #C6A381 ,state:正常}, { value: 33.07,name:下部进度, color: #669BDA,state:正常 }, ];// const textStyle { "color": "#CED6C8&…...
PostgreSQL16.4搭建一主一从集群
PostgreSQL搭建一主一从集群的过程主要涉及到基础环境准备、PostgreSQL安装、主从节点配置以及同步验证等步骤。以下是一个详细的搭建过程: 一、基础环境准备 创建虚拟机: 准备两台虚拟机,分别作为主节点和从节点。为每台虚拟机分配独立的IP…...

Spring01——Spring简介、Spring Framework架构、Spring核心概念、IOC入门案例、DI入门案例
为什么要学 spring技术是JavaEE开发必备技能,企业开发技术选型命中率>90%专业角度 简化开发:降低企业开发的复杂度框架整合:高效整合其他技术,提高开发与运行效率 学什么 简化开发 IOCAOP 事务处理 框架整合 MyBatis 怎…...

深度学习|模型推理:端到端任务处理
引言 深度学习的崛起推动了人工智能领域的诸多技术突破,尤其是在处理复杂数据与任务的能力方面。模型推理作为深度学习的核心环节,决定了模型在真实应用场景中的表现。而端到端任务处理(End-to-End Task Processing)作为深度学习的一种重要范式,通过从输入到输出的直接映…...
【深度学习 Pytorch】2024年最新版本PyTorch学习指南
引言 2024年,深度学习技术在各个领域取得了显著的进展,而PyTorch作为深度学习领域的主流框架之一,凭借其易用性、灵活性和强大的社区支持,受到了广大研究者和开发者的喜爱。本文将为您带来一份2024年最新版本的PyTorch学习指南&a…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...