Elasticsearch:為推理端點配置分塊設置

推理端點對一次可處理的文本量有限,具體取決于模型的輸入容量。分塊(Chunking) 是指將輸入文本拆分成符合這些限制的小塊的過程,在將文檔攝取到 semantic_text 字段時會進行分塊。分塊不僅有助于保持輸入文本在可處理范圍內,還能使內容更加易讀。相比返回一整篇長文檔,在搜索結果中提供最相關的文本片段更有價值。

每個分塊都會包含 文本片段 以及 從中生成的對應嵌入

默認情況下,文檔會被拆分為 句子(sentence),然后按 最多 250 個單詞 進行分組,并且設置 1 句重疊,使得每個分塊都會與前一個分塊共享一個句子。這種重疊方式可以保持上下文的連續性,防止重要信息因硬性拆分而丟失。

Elasticsearch 使用 ICU4J 庫來檢測單詞和句子的邊界。在確定單詞邊界時,該庫遵循一系列規則,而不僅僅依賴空格字符。對于像 中文或日文 這類不使用空格分隔單詞的書寫語言,系統會利用 字典查找 來識別單詞邊界。

分塊策略

Elasticsearch 提供了 兩種分塊策略句子策略(sentence)單詞策略(word)

  • 句子策略(sentence)
    該策略按 句子邊界 拆分文本,每個分塊包含一個或多個完整的句子,以確保句子級別的語境完整性。

    • 若某個句子導致分塊超出 max_chunk_size 設定的單詞數上限,該句子會被拆分至多個分塊中。
    • sentence_overlap 選項控制前一個分塊中的 多少個句子 應該包含在當前分塊中,可選值為 0 或 1
  • 單詞策略(word)
    該策略按 單詞 拆分文本,直至 max_chunk_size 限制。

    • overlap 選項控制當前分塊應包含前一個分塊中的 多少個單詞

默認分塊策略句子策略(sentence)

注意:對于 8.16 版本之前創建的推理端點,默認的分塊策略是 單詞策略(word)

可以在文章 “Elasticsearch:使用阿里 infererence API 及 semantic text 進行向量搜索” 查看更為詳盡的示例。

安裝

Elasticsarch 及 Kibana

?我們首先需要安裝 Elasticsearch 及 Kibana。我們可以參考如下的文章來進行安裝:

  • 如何在 Linux,MacOS 及 Windows 上進行安裝 Elasticsearch

  • Kibana:如何在 Linux,MacOS 及 Windows 上安裝 Elastic 棧中的 Kibana

當我們安裝的時候,選擇 Elastic Stack 8.x 的文章來進行安裝。在本展示中,我們將使用 Elastic Stack 8.17.2 來進行展示。當我們首次運行 Elasticsearch 時,我們可以看到如下的界面:

請記下上面的 elastic 超級用戶的密碼,以備在下面進行使用。

下載代碼

為了展示方便,我們在地址?https://github.com/liu-xiao-guo/elasticsearch-labs/blob/main/notebooks/document-chunking/configuring-chunking-settings-for-inference-endpoints.ipynb下載最新的代碼。

拷貝證書

為了能夠使得我們的代碼能夠正常工作,我們必須拷貝 Elasticsearch 的證書:

cp ~/elastic/elasticsearch-8.17.2/config/certs/http_ca.crt .
$ pwd
/Users/liuxg/python/elasticsearch-labs-liuxg/notebooks/document-chunking
$ cp ~/elastic/elasticsearch-8.17.2/config/certs/http_ca.crt .

創建一個 .env 文件

我們還需要創建一個叫做 .env 的本地文件,并置于項目的根目錄下:

ES_USER="elastic"
ES_PASSWORD="zhHdJmd5oBEVwEfoH2Cr"
ES_ENDPOINT="localhost"
$ pwd
/Users/liuxg/python/elasticsearch-labs-liuxg/notebooks/document-chunking
$ cat .env
ES_USER="elastic"
ES_PASSWORD="zhHdJmd5oBEVwEfoH2Cr"
ES_ENDPOINT="localhost"

你需要根據自己的 Elasticsearch 安裝進行相應的修改。

安裝 Python 依賴項

pip3 install elasticsearch python-dotenv 

安裝? ELSER 模型

你可以參考文章 “部署 ELSER - Elastic Learned Sparse EncoderR”。最后,我們可以看到如下的頁面:

代碼展示

我們使用 jupyter 打開我們的筆記本:

jupyter notebook configuring-chunking-settings-for-inference-endpoints.ipynb

建立 Elasticsearch 客戶端連接

from elasticsearch import Elasticsearch
from dotenv import load_dotenv
import osload_dotenv()ES_USER= os.getenv("ES_USER")
ES_PASSWORD = os.getenv("ES_PASSWORD")
ES_ENDPOINT = os.getenv("ES_ENDPOINT")url = f"https://{ES_USER}:{ES_PASSWORD}@{ES_ENDPOINT}:9200"
client = Elasticsearch(url, ca_certs = "./http_ca.crt", verify_certs = True)print(es.info())

創建推理端點對象

讓我們使用 Create Inference API 創建推理端點。

在此示例中,你將為 ELSER 集成創建一個推理端點,該端點將在你的集群中部署 Elastic 的 ELSER 模型。對于任何具有嵌入任務類型的推理端點,分塊設置都是可配置的。完整的可用集成列表可在 Create Inference API 文檔中找到。

要配置分塊設置,請在請求體中包含一個 chunking_settings 映射,其中包含 strategy 值以及所選分塊策略的任何必需值。在本示例中,你將為 sentence 策略配置分塊設置,最大分塊大小為 25 個單詞,每個分塊與前一個分塊重疊 1 個句子。有關可用分塊策略及其可配置值的更多信息,請參閱分塊策略文檔。

import requeststry: 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,},},)
except Exception as e:print(f"Error: {e}")

創建索引

要查看你配置的分塊設置如何生效,需要將文檔攝取到索引的 semantic_text 字段中。讓我們創建一個索引,其中包含一個 semantic_text 字段,并將其鏈接到上一步創建的推理端點。

client.indices.create(index="my_index",mappings={"properties": {"infer_field": {"type": "semantic_text","inference_id": "my_elser_endpoint",}}},
)

攝入一個文檔

現在,讓我們將一個文檔攝取到上一步創建的索引中。

注意:Elasticsearch 在創建推理端點時會啟動 ELSER 模型部署,分配節點可能需要一些時間。在執行以下請求之前,你需要等待部署被分配到節點。

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 鍵中。這些分塊以字符偏移值列表的形式存儲。讓我們查看在上一步攝取文檔時生成的分塊。

為了能夠看得清楚我們的分塊,我們在 Kibana 中使用如下的命令:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/73791.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/73791.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/73791.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Unity打包Android平臺調用sherpa-onnx

https://github.com/xue-fei/sherpa-onnx-unity 最初測試了PC的Win和Linux平臺,直接從nuget緩存包中拷貝相關文件,按示例寫了語音轉文字和文字轉語音的測試代碼,功能都正常。 然后是Android端,看了示例發現有編譯好的jni.so之類的…

傳統會議室接入神旗視訊-2 Android會議室大屏設備 (Maxhub, Newline, TCL等)

隨著企業對視頻會議安全性、穩定性和統一管理的需求日益增長,私有化視頻會議系統憑借其全平臺兼容性、高安全性部署和智能化會控能力,成為政企客戶的核心選擇。Android會議室大屏設備(Maxhub, Newline, TCL等)作為國內主流智能會議…

個人blog系統 前后端分離 前端js后端go

系統設計: 1.使用語言:前端使用vue,并使用axios向后端發送數據。后端使用的是go的gin框架,并使用grom連接數據庫實現數據存儲讀取。 2.設計結構: 最終展示:僅展示添加模塊,其他模塊基本相似 前…

分支結構- P5717-三角形分類-第二十一天

洛谷題單 第二十一天&#xff1a;3.18&#xff08;周二&#xff09; 題目&#xff1a;分支結構–P5717 代碼 #include <stdio.h>//本題目卡住的點&#xff1a;1.邏輯問題 2.對if-else if-else結構的運行理解&#xff0c;導致了邏輯混亂//注意&#xff1a;程序會組個…

華為OD機試 - 最長回文字符串 - 貪心算法(Java 2024 E卷 100分)

題目描述 如果一個字符串正讀和反讀都一樣(大小寫敏感),則稱之為一個「回文串」。例如: level 是一個「回文串」,因為它的正讀和反讀都是 level。art 不是一個「回文串」,因為它的反讀 tra 與正讀不同。Level 不是一個「回文串」,因為它的反讀 leveL 與正讀不同(因大小…

C語言文件操作入門

本節重點 理解文件的形式與基本概念二進制文件與文本文件文件的打開與關閉文件讀寫函數、文件緩沖區 正文開始--------------------------------------------------------------------------------------------------------------------- 一、為什么使用文件 程序運行時數據存…

Doris:聯邦認證

LDAP? 接入第三方 LDAP 服務為 Doris 提供驗證登錄和組授權服務。 LDAP 驗證登錄? LDAP 驗證登錄指的是接入 LDAP 服務的密碼驗證來補充 Doris 的驗證登錄。Doris 優先使用 LDAP 驗證用戶密碼&#xff0c;如果 LDAP 服務中不存在該用戶則繼續使用 Doris 驗證密碼&#xff…

stm32第六天繼電器

一&#xff1a;繼電器 1.繼電器的工作原理 繼電器是一個電控開關&#xff0c;工作原理基于電磁感應&#xff0c;繼電器包括一個電磁線圈和一組觸點。常用于控制高電流或高電壓的電路&#xff0c;例如自動控制原理&#xff0c;電力系統和自動化設備中&#xff0c;由于可靠性和電…

Vue渲染函數 - render 函數

文章目錄 Vue渲染函數 - render 函數1. 什么是 render 函數2、頁面展示過程3、render 函數的參數4. 如何使用&#xff08;1&#xff09;基本渲染&#xff08;2&#xff09;傳遞屬性和事件&#xff08;3&#xff09;條件渲染 5. render 函數的實際使用6.View Design 組件中的使用…

單片機自學總結

自從工作以來&#xff0c;一直努力耕耘單片機&#xff0c;至今&#xff0c;頗有收獲。從51單片機&#xff0c;PIC單片機&#xff0c;直到STM32&#xff0c;以及RTOS和Linux&#xff0c;幾乎天天在搞:51單片機&#xff0c;STM8S207單片機&#xff0c;PY32F003單片機&#xff0c;…

go回調函數的使用

在Go語言中&#xff0c;回調函數可以有參數&#xff0c;也可以沒有參數。它們的定義和使用方式略有不同&#xff0c;但本質上都是將函數作為參數傳遞給另一個函數&#xff0c;并在適當的時候調用它。以下是帶參數和不帶參數的回調函數的示例和說明。 1. 不帶參數的回調函數 不…

在 Ubuntu 中配置 NFS 共享服務的完整指南

前言 網絡文件系統&#xff08;NFS&#xff09;作為 Linux 系統間實現文件共享的標準協議&#xff0c;在分布式計算和容器化部署場景中具有重要作用。本文將詳細演示如何在 Ubuntu 系統上配置 NFS 服務端與客戶端&#xff0c;并實現可靠的持久化掛載。 一、環境準備 系統要求…

TypeScript Symbols 深度解析:在 Vue3 中的高級應用實踐

一、Symbols 核心特性解析 1.1 什么是 Symbol&#xff1f; Symbol 是 ES6 引入的原始數據類型&#xff0c;表示唯一且不可變的值&#xff0c;主要解決對象屬性名沖突問題。在 TypeScript 中&#xff0c;我們通過 symbol 類型獲得完整的類型支持&#xff1a; const SERIAL_KE…

無需刷機、root,暢享原生安卓的絲滑體驗。

Apex Launcher 是一款歷史悠久的 Android 桌面啟動器&#xff0c;誕生于 Android 系統早期&#xff08;Android 4.0 時代&#xff09;。當時&#xff0c;Android 系統的默認界面被認為較為簡陋&#xff0c;無法滿足一些追求個性化和高效操作的用戶需求。因此&#xff0c;許多開…

Visual Studio Code安裝配置優化全攻略:打造高效開發環境

目錄 一、背景與意義 二、安裝與配置基礎 2.1 下載與安裝 2.2 核心配置目錄 三、深度優化配置指南 3.1 主題與界面優化 3.2 必裝效率插件&#xff08;精選TOP10&#xff09; 3.3 性能優化設置 四、實戰案例&#xff1a;前端開發環境配置 4.1 項目初始化 4.2 調試配置…

味覺傳送器E-Taste:開啟虛擬世界的味覺之門

味覺傳送器E-Taste&#xff1a;開啟虛擬世界的味覺之門 一、發明背景與動機 隨著虛擬現實&#xff08;VR&#xff09;和增強現實&#xff08;AR&#xff09;技術的飛速發展&#xff0c;人們在虛擬世界中的沉浸感不斷提升&#xff0c;視覺和聽覺體驗已經取得了顯著的突破。然而…

判斷質數與合數

判斷質數與合數的邏輯很相似&#xff0c;都是判斷一個屬除了1和它本身&#xff0c;能不能被其他數整除。 其他數包括質數與合數&#xff0c;合數能表示能質數的乘積&#xff0c;因此問題就轉化為&#xff1a;一個數能不能被除了1和它本身之外的其他質數整除。 質數2&#xff…

在Spring Boot項目中接入DeepSeek深度求索,感覺笨笨的呢

文章目錄 引言1. 什么是DeepSeek&#xff1f;2. 準備工作2.1 注冊DeepSeek賬號 3.實戰演示3.1 application增加DS配置3.2 編寫service3.3 編寫controller3.4 編寫前端界面chat.html3.5 測試 總結 引言 在當今快速發展的數據驅動時代&#xff0c;企業越來越重視數據的價值。為了…

Cursor在內網環境配置自定義DeepSeek API

關鍵字 Cursor、DeepSeek、API配置、內網代理、HTTP/2 背景環境 使用Cursor集成環境開發程序。但是我使用公司的內網并不能使用cursor自帶的模型&#xff0c;于是我就想使用DeepSeek官方的API服務。 環境&#xff1a;Windows 11系統 解決過程 網絡檢測 首先進行環境檢測&am…