Elasticsearch:可配置的推理 API 端点分块设置
作者:来自 Elastic Daniel Rubinstein
Elasticsearch 开放推理 API 现已支持可配置的分块,以便在文档摄取时处理语义文本字段。
Elasticsearch 推理 API 允许用户利用各种提供商的机器学习模型执行推理操作。其中一个常见用例是在索引中支持用于语义搜索的语义文本字段。随着文档数据量的增加,对整个数据创建嵌入可能会导致结果不够准确。此外,一些推理模型对可处理的输入大小有限制。因此,推理 API 采用了一种称为分块(chunking)的处理方式,将摄取到索引的大型文档拆分为较小且更易管理的子部分,即 “块”(chunks)。然后对每个块单独运行推理操作,并将推理结果存储在索引中。
在本篇博客中,我们将介绍分块策略,解析 Elasticsearch 如何进行文本分块,并讲解如何为推理端点配置分块设置。
更多阅读:
- Elasticsearch:为推理端点配置分块设置
-
Elasticsearch:检索增强生成背后的重要思想
可配置的分块设置是什么?
从 8.16 版本开始,用户可以从两种分块策略中进行选择,每种策略都具备可配置的属性。
基于单词的分块策略
用户可配置的参数:
- (必需)max_chunk_size:单个块的最大单词数。
- (必需)overlap:相邻块之间的重叠单词数。
注意:此值不能超过max_chunk_size
的一半。
基于单词的分块策略会根据 max_chunk_size
限制,将输入数据拆分成多个块,每个块最多包含指定数量的单词。此策略会尽可能填充一个块达到最大大小后再创建下一个块,除非已处理完整个输入数据。从第二个块开始,每个新块都会包含一部分来自前一个块的单词,其数量由 overlap
参数决定。
这种重叠的目的在于提高推理精度,防止关键上下文因分块而被切断,从而影响推理结果。
基于句子的分块策略
用户可配置的参数:
- (必需)max_chunk_size:单个块的最大单词数。
- (必需)sentence_overlap:相邻块之间的重叠句子数。
注意:此值只能设置为 0 或 1。
基于句子的分块策略会按照完整句子拆分输入数据。每个块仅包含完整的句子,除非某个句子超过 max_chunk_size
,此时它会被拆分到多个块中。从第二个块开始,每个新块都会包含一部分来自前一个块的句子,其数量由 sentence_overlap
参数决定。
注意:
- 如果在 8.16 之后创建推理端点时未提供分块设置,默认使用基于句子的策略,
max_chunk_size
为 250,sentence_overlap
为 1。 - 对于 8.16 之前创建的推理端点,默认使用基于单词的策略,
max_chunk_size
为 250,overlap
为 1。
如何选择分块策略?
没有通用的最佳分块策略,最适合的策略取决于要处理的文档、使用的模型以及计算资源的限制。建议对部分数据集进行测试,尝试不同的分块策略、块大小和重叠参数,并观察它们对数据摄取时间、搜索延迟、查询结果相关性的影响。例如,可以对不同的块重叠和长度进行参数扫描,并测量其对性能的影响。
以下是一些选择分块策略时的基本原则:
选择分块策略
- 基于句子的分块策略能有效减少上下文信息的丢失,但由于它优先保持句子的完整性,因此可能会生成更多块,增加存储和计算成本。
- 基于单词的分块策略可以优化块的填充效率,通常生成更少的块,提高数据摄取和搜索的效率。
选择合适的块大小
- 选择块大小时,应尽量减少将有价值的上下文信息拆分到不同的块中,同时保持块内部的主题一致性。
- 通常,接近模型最大支持序列长度的块大小效果更好,但较长的块可能包含多个主题,降低检索的精准度。
选择合适的块重叠
- 较大的重叠值(最多可达块长度的一半)有助于提高检索质量,因为它减少了上下文信息的丢失。
- 但重叠越大,生成的块数量也会增加,导致存储和计算成本上升。因此,选择合适的重叠值需要在检索质量和计算资源之间权衡。
Elasticsearch 如何对文本进行分块?
Elasticsearch 使用 ICU4J 库 来检测单词和句子的边界。
单词边界识别
- 并不仅依赖空格字符来划分单词,而是遵循一系列规则来确定单词边界。
- 对于不使用空格的语言(如中文、日文),Elasticsearch 使用词典查找方法来识别单词边界。
句子边界识别
- 并不仅依赖句号(".")等标点符号来确定句子边界,而是遵循更复杂的句子划分规则。
- 这可以确保不同语言的句子边界都能被准确识别,即使句子结构和断句方式不同。
额外的上下文信息
- 在某些情况下,简单的分块策略可能无法保留长距离的上下文信息。
- 如果计算资源允许,可以为块添加额外的生成式上下文,以增强理解和检索质量。
- 具体方法和讨论请参考这个讨论。
如何为推理端点配置分块设置?
前置要求
在配置分块设置之前,请确保满足以下条件:
- 持有有效的企业许可证(enterprise license)。
- 对于连接到第三方集成的推理端点,需设置必要的访问权限(如创建账户、获取 API 密钥等)。
在本指南中,我们将使用 Elastic 的 ELSER 模型 来配置推理端点的分块设置,因此唯一的要求是拥有有效的企业许可证。如果要为第三方集成创建推理端点,请参考 create inference endpoint API 文档获取相关信息。
步骤 1:在推理端点创建时配置分块设置
client.inference.put(task_type="sparse_embedding",inference_id="my_elser_endpoint",body={
"service": "elasticsearch","service_settings": {"num_allocations": 1,"num_threads": 1,"model_id": ".elser_model_2"},"chunking_settings": {"strategy": "sentence","max_chunk_size": 25,"sentence_overlap": 1}}
)
步骤 2:将推理端点链接到索引中的 semantic text 字段
client.indices.create(
index="my_index",
mappings={"properties": {"infer_field": {"type": "semantic_text","inference_id": "my_elser_endpoint"}}}
)
步骤 3:将文档摄取到索引
使用 Index Document API 将文档摄取到索引:
client.index(index="my_index", document={"infer_field": "This is some sample document data. The data is being used to demonstrate the configurable chunking settings feature. The configured chunking settings will determine how this text is broken down into chunks to help increase inference accuracy."
})
生成的块及其相应的推理结果可以在索引中的文档下的 _inference_fields
元字段的 chunks
键中找到。要查看存储的块,可以使用搜索 API 查找索引中的所有文档:
client.search(index="my_index", body = {'size' : 100,'query': {'match_all' : {}},'fields': [ '_inference_fields' ]
})
在响应中可以看到这些块。在 8.18 之前,块是作为完整的文本值存储的。从 8.18 开始,块作为字符偏移值的列表存储:
...
'chunks': {'infer_field': [{'start_offset': 0, 'end_offset': 117, 'embeddings':[...]},{'start_offset': 34, 'end_offset': 198, 'embeddings':[...]},{'start_offset': 120, 'end_offset': 242, 'embeddings':[...]}]
}
...
立即开始使用可配置的分块功能!
有关如何使用此功能的更多信息,请查看配置分块的文档。尝试此笔记本,以开始使用可配置的分块设置:配置推理端点的分块设置。
Elasticsearch 与行业领先的生成 AI 工具和提供商有原生集成。查看我们的网络研讨会,了解如何超越 RAG 基础,或构建生产就绪的应用程序 Elastic 向量数据库。
为了构建最适合你用例的搜索解决方案,现在开始免费云试用,或立即在本地机器上尝试 Elastic。
原文:Configurable chunking settings for inference API endpoints - Elasticsearch Labs
相关文章:
Elasticsearch:可配置的推理 API 端点分块设置
作者:来自 Elastic Daniel Rubinstein Elasticsearch 开放推理 API 现已支持可配置的分块,以便在文档摄取时处理语义文本字段。 Elasticsearch 推理 API 允许用户利用各种提供商的机器学习模型执行推理操作。其中一个常见用例是在索引中支持用于语义搜索…...
从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.1.2多头注意力扩展与掩码机制(因果掩码与填充掩码)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 2.1.2 多头注意力扩展与掩码机制(`因果掩码与填充掩码`)1. 多头注意力机制:分治策略的数学实现1.1 多头注意力核心公式2. 逐行代码实现2.1 多头拆分与合并3. 掩码机制:注意力控制的核心技术3.1 因果…...
Scikit-learn模型评估全流程解析:从数据划分到交叉验证优化
模型评估的步骤、scikit-learn函数及实例说明 1. 数据划分(Train-Test Split) 函数:train_test_split使用场景:将数据分为训练集和测试集,避免模型过拟合。作用:确保模型在未见过的数据上验证性能。示例&…...
大模型量化框架GPTQModel的基本使用方法
接上一篇博客:AutoGPTQ报torch._C._LinAlgError: linalg.cholesky: The factorization could not be completed的解决办法-CSDN博客 如果Llama factory量化一直报错,可以改用其他的量化框架,例如GPTQ:https://github.com/ModelCl…...
HTTP长连接与短连接的前世今生
HTTP长连接与短连接的前世今生 大家好!作为一名在互联网摸爬滚打多年的开发者,今天想跟大家聊聊HTTP中的长连接和短连接这个话题。 记得我刚入行时,对这些概念一头雾水,希望这篇文章能帮助新入行的朋友少走些弯路。 什么是HTTP…...
线程控制学习
1、线程创建: int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void * (*start_routine)(void*), void *arg); 参数 thread:返回线程ID;attr:设置线程的属性,attr为nullptr表示使用默认属性(一般…...
使用 Node.js 从零搭建 Kafka 生产消费系统
目录 一、Kafka 核心概念速览 二、环境准备 三、生产者实现:发送消息 四、消费者实现:处理消息 五、高级配置与最佳实践 六、常见问题解决 七、应用场景示例 总结 Apache Kafka 作为高吞吐、分布式的消息队列系统,在实时数据流处理中…...
【Linux系统】Linux权限讲解!!!超详细!!!
目录 Linux文件类型 区分方法 文件类型 Linux用户 用户创建与删除 用户之间的转换 su指令 普通用户->超级用户(root) 超级用户(root) ->普通用户 普通账户->普通账户 普通用户的权限提高 sudo指令 注: Linux权限 定义 权限操作 1、修改文…...
Ubuntu安装TensorFlow 2.13-GPU版全流程指南(anaconda)
目录 一、安装前准备1.版本选择依据2.创建独立环境 二、详细安装步骤1.通过conda自动安装依赖2.手动验证依赖版本 三、补充说明1.组件依赖关系表2.常见问题解决方案3.性能验证脚本 一、安装前准备 1.版本选择依据 当前最新稳定版:TensorFlow 2.13&a…...
Spring事务管理
介绍了事务的概念,事务的特性,JDBC 事务管理的步骤和操作过程,以及Spring事务管理的两种实现方式:编程式事务管理和声明式事务管理。 1.事务的概念 事务(Transaction)就是将一系列的数据库操作作为一个整体…...
避雷 :C语言中 scanf() 函数的错误❌使用!!!
1. 返回值说明 scanf函数会返回成功匹配并赋值的输入项个数,而不是返回输入的数据。 可以通过检查返回值数量来确认输入是否成功。若返回值与预期不符,就表明输入存在问题。 #include <stdio.h>int main() {int num;if (scanf("%d", …...
判断一个操作是不是允许
一、目的 简单探索一个URL请求是不是允许的。 二、具体过程 (一)系统的初始化 系统数据库有账户"admin",密码是"123"。 账号"admin"的角色是管理员"manager"。 假设管理员身份设定的权限是: 1、对于/user/开头的…...
【FPGA开发】Cordic原理推导、Xilinx PG105手册解读
目录 Cordic原理推导PG105手册解读IP核总览核心计算功能总览基本握手信号非阻塞模式 NonBlocking Mode阻塞模式 Block Mode 数据格式数据映射 本文针对Cordic算法本身,以及Xilinx官方CORDIC IP做学习记录,如有纰漏,欢迎指正! Cord…...
数据结构与算法:宽度优先遍历
前言 进入图论部分难度明显提升了一大截,思路想不到一点…… 一、宽度优先遍历 1.内容 宽度优先遍历主要用于在图上求最短路。 (1)特点 宽度优先遍历的特点就是逐层扩展,最短路即层数 (2)使用条件 …...
PyTorch 面试题及参考答案(精选100道)
目录 PyTorch 的动态计算图与 TensorFlow 的静态计算图有何区别?动态图的优势是什么? 解释张量(Tensor)与 NumPy 数组的异同,为何 PyTorch 选择张量作为核心数据结构? 什么是 torch.autograd 模块?它在反向传播中的作用是什么? 如何理解 PyTorch 中的 nn.Module 类?…...
【数理基础】【概率论与数理统计】概率论与数理统计本科课程总结、资料汇总、个人理解
1 前言 概率论与数理统计是数学系核心的基础专业课,我本科的时候,是拆开上的,对应工科专业的高数中的概率论与数理统计,在量子力学,机器学习,计算机领域深度学习,大模型,机器人控制…...
美制 / 英制单位换算/公制/帝国制 单位转换速查表
文章目录 💡Introduction📏 英制(美制)单位与公制换算速查表🧱 一、长度(Length)🧴 二、体积(Volume / Liquid Measure)⚖️ 三、质量 / 重量(Wei…...
ENSP学习day9
ACL访问控制列表实验 ACL(Access Control List,访问控制列表)是一种用于控制用户或系统对资源(如文件、文件夹、网络等)访问权限的机制。通过ACL,系统管理员可以定义哪些用户或系统可以访问特定资源&#x…...
我爱学算法之——滑动窗口攻克子数组和子串难题(中)
学习算法,继续加油!!! 一、将 x 减到 0 的最小操作数 题目解析 来看这一道题,题目给定一个数组nums和一个整数x;我们可以在数组nums的左边或者右边进行操作(x减去该位置的值)&#…...
Linux centos 7 vsftp本地部署脚本
下面是脚本: #!/bin/bash #function:vsftpd脚本 #author: 20230323 IT 小旋风# 判断是否是root用户 if [ "$USER" ! "root" ]; thenecho "不是root 装个蛋啊"exit 1 fi# 关闭防火墙 systemctl stop firewalld && systemctl disable …...
编程考古-安德斯·海尔斯伯格(Anders Hejlsberg)回答离开Borland的原因
安德斯海尔斯伯格(Anders Hejlsberg)是著名的编程语言和工具开发者,曾主导开发了 Turbo Pascal、Delphi(Borland 时期),以及加入微软后参与的 C# 和 TypeScript。关于他离开 Borland 的原因,可以…...
数据库数值函数详解
各类资料学习下载合集 https://pan.quark.cn/s/8c91ccb5a474 数值函数是数据库中用于处理数值数据的函数,可以用于执行各种数学运算、统计计算等。数值函数在数据分析及处理时非常重要,能够帮助我们进行数据的聚合、计算和转换。在本篇博客中,我们将详细介绍常用的…...
SpringBoot与Redisson整合,用注解方式解决分布式锁的使用问题
文章引用:https://mp.weixin.qq.com/s/XgdKE2rBKL0-nFk2NJPuyg 一、单个服务 1.代码 该接口的作用是累加一个值,访问一次该值加1 RestController public class LockController {Autowiredprivate StringRedisTemplate stringRedisTemplate;GetMappin…...
Bash 脚本基础
一、Bash 脚本基础 什么是 Bash 脚本:Bash 脚本是一种文本文件,其中包含了一系列的命令,这些命令可以被 Bash shell 执行。它用于自动化重复性的任务,提高工作效率。 Bash 脚本的基本结构:以 #!/bin/bash 开头&#x…...
【Linux】线程库
一、线程库管理 tid其实是一个地址 void* start(void* args) {const char* name (const char *)args;while(true){printf("我是新线程 %s ,我的地址:0x%lx\n",name,pthread_self());sleep(1);}return nullptr; }int main() {pthread_t tid…...
Smith3.0 4.0的阻抗匹配操作方法
阅读了这篇文章中,我get到一些知识点的总结: 百度安全验证https://baijiahao.baidu.com/s?id1822624157494292625 1)红色圆代表阻抗圆,绿色圆代表导纳圆。 2)圆心位于50欧,最左侧为0欧,最右侧…...
装饰器模式 (Decorator Pattern)
装饰器模式 (Decorator Pattern) 是一种结构型设计模式,它动态地给一个对象添加一些额外的职责,就增加功能来说,装饰器模式相比生成子类更为灵活。 一、基础 1 意图 动态地给一个对象添加一些额外的职责。 就增加功能来说,装饰器模式相比生成子类更为灵活。 2 适用场景 当…...
生活电子类常识——搭建openMauns工作流+搭建易犯错解析
前言 小白一句话生成一个网站?小白一句话生成一个游戏?小白一句话生成一个ppt?小白一句话生成一个视频? 可以 原理 总体的执行流程是 1,用户下达指令 2,大模型根据用户指令,分解指令任务为多个细分步骤…...
题型笔记 | Apriori算法
目录 内容拓展知识 内容 其步骤如下: 扫描全部数据,产生候选项 1 1 1 项集的集合 C 1 C_1 C1根据最小支持度,由候选 1 1 1 项集的集合 C 1 C_1 C1 产生频繁 1 1 1 项集的集合 L 1 L_1 L1。若 k > 1 k > 1 k>1…...
雷电模拟器启动94%卡住不动解决方案
安卓模拟器启动失败/启动加载卡0-29%/启动卡50%/启动卡94%的解决方法 首先看官方论坛常见问题来尝试解决: 安卓模拟器启动失败/启动加载卡0-29%/启动卡50%/启动卡94%的解决方法-雷电安卓模拟器-手游模拟器安卓版_android手机模拟器电脑版_雷电模拟器帮助中心 所有…...
站群服务器是什么意思呢?
站群服务器是一种专门为托管和管理多个网站而设计的服务器,其核心特点是为每个网站分配独立的IP地址。这种服务器通常用于SEO优化、提高网站权重和排名,以及集中管理多个网站的需求。以下是站群服务器的详细解释: 一、站群服务器的定义 站群…...
靶场(十五)---小白心得思路分析---LaVita
启程: 扫描端口,发现开放22,80端口,发现ws.css可能存在exp,经查发现无可利用的exp PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.4p1 Debian 5deb11u2 (protocol 2.0) | ssh-hostkey: | 3072 c9…...
第十六次CCF-CSP认证(含C++源码)
第十六次CCF-CSP认证 小中大满分思路遇到的问题 二十四点(表达式求值)难点满分思路 小中大 这次我觉得是非常难的 只有一道easy 做的时候看这个通过率就有点不对劲 上官网看了一眼平均分 106 就是人均A一道的水准 一开始看了半天 第三题几乎还是下不了手…...
大数据中的数据预处理:脏数据不清,算法徒劳!
大数据中的数据预处理:脏数据不清,算法徒劳! 在大数据世界里,数据预处理是个让人又爱又恨的环节。爱它,是因为数据预处理做好了,后续的模型跑起来又快又准,仿佛给AI装上了火箭助推器࿱…...
17153 班级活动
17153 班级活动 ⭐️难度:简单 🌟考点:2023、思维、国赛 📖 📚 import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {static int N 10…...
算力100问☞第93问:算力资源为何更分散了?
目录 1、政策驱动与地方投资的盲目性 2、美国芯片断供与国产替代的阵痛 3、政企市场对私有云的偏好 4、技术标准与供需结构的失衡 5、产业生态与市场机制的滞后 6、破局路径与未来展望 在大模型和人工智能技术快速发展的背景下,算力资源已成为数字经济时代的核心基础设施…...
记录 macOS 上使用 Homebrew 安装的软件
Homebrew 是 macOS 上最受欢迎的软件包管理器之一,能够轻松安装各种命令行工具和 GUI 应用。本文记录了我通过 Homebrew 安装的各种软件,并对它们的用途和基本使用方法进行介绍。 🍺 Homebrew 介绍 Homebrew 是一个开源的包管理器ÿ…...
Java 安装开发环境(Mac Apple M1 Pro)
下载 Java Downloads 查看本地安装的 JDK 所在位置以及 JAVA 版本 系统默认的安装处 /Library/Java/JavaVirtualMachines配置Java 添加环境变量 vim ~/.bash_profileAdd # 安装位置 export JAVA_11_HOME"/Library/Java/JavaVirtualMachines/zulu-11.jdk…...
微前端框架的实战demo
以下是基于主流微前端框架的实战 Demo 开发指南,综合多个开源项目与实践案例整理而成: 一、qiankun 框架实战 1. 核心架构 主应用:负责路由分发、子应用注册与生命周期管理子应用:独立开发部署,支持不同技术栈&#…...
win32汇编环境,网络编程入门之九
;在上一教程里,我们学习了在连接成功网站后,应该发送什么数据给网站 ;在前面的几个教程里,简单地运行了套接字机制连接网站的方式,这是字节级的网络连接,扩展几乎是无限的。 ;想了想,这个开个头就行了&…...
OceanBase 4.3.3 AP 解析:应用 RoaringBitmaps 类型处理海量数据的判重和基数统计
对于大数据开发人员而言,处理海量数据的判重操作和基数统计是常见需求,而 RoaringBitmap类型及其相关函数是当前非常高效的一种解决方案,许多大数据库产品已支持RoaringBitmap类型。OceanBase 4.3.3版本,作为专为OLAP场景设计的正…...
点亮STM32最小系统板LED灯
对于如何点亮板载LED灯只需要掌握如何初始化GPIO引脚,并改变GPIO引脚的电平即可实现点亮或者熄灭LED。 Led_INFO led_info {0}; led_info 是一个结构体变量,类型为 Led_INFO,用于存储LED的状态信息。这里初始化为 {0},表示所有成…...
分区表的应用场景与优化实践
当表的数据量非常大,达到几千万甚至上亿行时,全表扫描会很慢,这时候分区可以帮助缩小扫描范围。比如,在一个电商系统中,订单表可能按月份分区,这样查询某个月的订单时,只需要扫描对应的分区,而不是整个表。或者在日志系统中,按天分区,方便归档和删除旧日志。 另外,如…...
如何高效参与 GitHub 知名项目开发并成为核心贡献者
参与知名 GitHub 项目开发不仅能提升你的编程能力,还能积累开源贡献经验,甚至为求职加分。以下是详细步骤: 1. 选择合适的 GitHub 项目 (1) 确定兴趣方向 后端开发:Spring、Spring Boot、Netty前端开发:React、Vue、…...
AIGC 新势力:探秘海螺 AI 与蓝耘 MaaS 平台的协同创新之旅
探秘海螺AI:多模态架构下的认知智能新引擎 在人工智能持续进阶的进程中,海螺AI作为一款前沿的多功能AI工具,正凭借其独特的多模态架构崭露头角。它由上海稀宇科技有限公司(MiniMax)精心打造,依托自研的万亿…...
银河麒麟桌面版包管理器(三)
以下内容摘自《银河麒麟操作系统进阶应用》一书 麒麟系统软件源配置 使用官方内置源时,无须任何操作。仅在使用其他镜像源(Mirror)时,需要修改/etc/apt/sources.list文件,根据不同版本,将原始sources.lis…...
在 .NET 9.0 Web API 中实现 Scalar 接口文档及JWT集成
示例代码:https://download.csdn.net/download/hefeng_aspnet/90408075 介绍 随着 .NET 9 的发布,微软宣布他们将不再为任何 .NET API 项目提供默认的 Swagger gen UI。以前,当我们创建 .NET API 项目时,微软会自动添加 Swagger…...
XSS跨站脚本攻击漏洞(Cross Site Scripting)
前提概要 本文章主要用于分享XSS跨站脚本攻击漏洞基础学习,以下是对XSS跨站脚本攻击漏洞的一些个人解析,请大家结合参考其他文章中的相关信息进行归纳和补充。 XSS跨站脚本攻击漏洞描述 跨站脚本攻击(XSS)漏洞是一种常见且危害较…...
Android:蓝牙设置配套设备配对
一、概述 在搭载 Android 8.0(API 级别 26)及更高版本的设备上,配套设备配对会代表您的应用对附近的设备执行蓝牙或 Wi-Fi 扫描,而不需要 ACCESS_FINE_LOCATION 权限。这有助于最大限度地保护用户隐私。使用此方法执行配套设备&am…...
MFC中CString类型是如何怎么转std::string的
文章目录 一、转换方法总结二、详细步骤1. Unicode 项目(CStringW → std::string)2. 多字节项目(CStringA → std::string) 三、注意事项四、总结更多信息(知识点存在重复,可跳过)方法 1:项目使用 Unicode…...