RAG文本分塊

不論是向量化模型還是大語言模型,都存在輸入長度的限制。對于超過限制的文本,模型會進行截斷,造成語義缺失。分塊可以確保每個文本片段都在模型的處理范圍內,避免重要信息的丟失。

文本分塊的核心原則

高質量分塊的核心原則是:一個分塊應當表示一個完整且語義相關的上下文信息

這意味著:

  • 分塊過小:會導致語義信息被割裂,檢索時可能錯過真正相關的內容
  • 分塊過大:一個塊內可能包含多個不相關的上下文信息,增加檢索噪聲

實際應用中,合理的分塊大小通常在幾百到一千多個token之間,但具體應根據文檔特性和應用場景靈活調整。

主流分塊策略詳解

1. 遞歸文本分塊

遞歸文本分塊是最常用的分塊策略,其核心思想是根據特定的分隔符(段落、句子、單詞等)對文檔進行遞歸分割。

工作原理

  1. 指定目標塊大小(如200個token,不要超過embedding尺寸)
  2. 定義由粗到細的分隔符列表(段落 > 句子 > 單詞 > 字符)
  3. 先使用最粗的分隔符(如段落標記)拆分文本
  4. 檢查拆分結果,如果某塊大小超過目標值,則使用下一級更細的分隔符繼續拆分
  5. 重復此過程,直到所有塊都不超過目標大小
from langchain.text_splitter import RecursiveCharacterTextSplitter# 創建遞歸文本分塊器
text_splitter = RecursiveCharacterTextSplitter(# 設置塊大小chunk_size=500,# 設置塊間重疊部分chunk_overlap=50,# 按優先級定義分隔符separators=["\n\n", "\n", "。", ",", " ", ""]
)# 進行分塊
chunks = text_splitter.split_text(long_text)

chunk_overlap 重疊設置
分塊時通常會設置一定的重疊區域(overlap),可以保持上下文連貫性,避免關鍵信息在塊邊界處斷裂

在這里插入圖片描述

separators 分隔符設置
不同類型的文檔可能需要特定的分隔符設置:

  • 中文文檔:應增加中文標點符號(如"。“、”,")作為分隔符
  • Markdown文檔:可使用標題標記(#、##)、代碼塊標記(```)等作為分隔符

2. 基于語義的分塊策略

遞歸文本分塊基于預定義規則工作,雖然簡單高效,但可能無法準確捕捉語義變化。
基于語義的分塊策略則直接分析文本內容,根據語義相似度判斷分塊位置。

基于Embedding的語義分塊

這種方法利用向量表示捕捉語義變化,可分為四個步驟:

  1. 將文檔拆分為句子級別的基本單位
  2. 設定滑動窗口(如包含3個句子)
  3. 計算相鄰窗口文本的embedding相似度
  4. 當相似度低于設定閾值時,在該位置進行分塊
from langchain.text_splitter import SentenceTransformersTokenTextSplitter# 創建基于語義的分塊器
semantic_splitter = SentenceTransformersTokenTextSplitter(model_name="all-MiniLM-L6-v2",  # 指定embedding模型# 選擇閾值策略threshold_strategy="percentile",  # 百分位策略threshold=0.95,  # 95%分位數作為閾值window_size=3  # 滑動窗口大小
)# 分塊
semantic_chunks = semantic_splitter.split_text(long_text)

閾值選擇策略包括:

  • 百分位策略:對所有相似度值排序,選擇特定百分位的值作為閾值
  • 標準差策略:基于相似度的統計分布確定閾值
  • 四分位策略:使用四分位數統計確定閾值
基于模型的端到端語義分塊

更先進的方法是使用專門訓練的神經網絡模型,直接判斷每個句子是否應作為分塊點。這種方法無需手動設置閾值,而是由模型端到端地完成分塊決策。

以阿里達摩院開發的語義分塊模型為例,其工作流程為:

  1. 將文本窗口中的N個句子輸入模型
  2. 模型為每個句子生成表示向量
  3. 通過二分類層直接判斷每個句子是否為分塊點
    在這里插入圖片描述
from modelscope.pipelines import pipeline# 加載語義分塊模型
semantic_segmentation = pipeline('text-semantic-segmentation',model='damo/nlp_bert_semantic-segmentation_chinese-base'
)# 進行分塊
result = semantic_segmentation(long_text)
segments = result['text']

這種方法的優勢在于模型已經學習了語義變化的復雜模式,無需手動調整參數。但需注意模型的泛化能力,應在特定領域文檔上進行驗證。

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

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

相關文章

2025 年九江市第二十三屆中職學校技能大賽 (網絡安全)賽項競賽樣題

2025 年九江市第二十三屆中職學校技能大賽 (網絡安全)賽項競賽樣題 (二)A 模塊基礎設施設置/安全加固(200 分)A-1 任務一登錄安全加固(Windows,Linux)A-2 任務二 Nginx 安全策略&…

量子隧穿:PROFINET到Ethernet ip的無損耗協議轉換方案轉

在本季度的生產工作中,我們成功實現了倉儲物流自動化分揀系統中的關鍵技術突破。我們面臨的主要挑戰是將采用EtherNet/IP協議的輸送帶控制器與PROFINET協議的上位系統進行有效通信。通過引入ethernet IP轉PROFINET網關倍訊科技BX-606-EIP,我們實現了輸送…

OpenCV CUDA模塊中矩陣操作------降維操作

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 cv::cuda::reduce 函數用于對 GPU 上的矩陣沿某個維度進行降維操作,例如求和、取最大值等。此函數支持多種降維操作,并允…

一分鐘用 MCP 上線一個 貪吃蛇 小游戲(CodeBuddy版)

我正在參加CodeBuddy「首席試玩官」內容創作大賽,本文所使用的 CodeBuddy 免費下載鏈接:騰訊云代碼助手 CodeBuddy - AI 時代的智能編程伙伴 你好,我是悟空。 背景 上篇我們用 MCP 上線了一個 2048 小游戲,這次我們繼續做一個 …

簡單神經網絡(ANN)實現:從零開始構建第一個模型

本文將手把手帶你用 Python Numpy 實現一個最基礎的人工神經網絡(Artificial Neural Network, ANN)。不依賴任何深度學習框架,適合入門理解神經網絡的本質。 一、項目目標 構建一個三層神經網絡(輸入層、隱藏層、輸出層&#xf…

使用python進行人員軌跡跟蹤

一、系統概述 該系統基于計算機視覺技術,實現對視頻或攝像頭畫面中的人員進行檢測、跟蹤,并生成軌跡數據。支持透視變換校準(鳥瞰圖顯示)、多目標跟蹤、軌跡存儲及視頻錄制功能,適用于安防監控、行為分析等場景。 二…

[強化學習的數學原理—趙世鈺老師]學習筆記02-貝爾曼方程

本人為強化學習小白,為了在后續科研的過程中能夠較好的結合強化學習來做相關研究,特意買了西湖大學趙世鈺老師撰寫的《強化學習數學原理》中文版這本書,并結合趙老師的講解視頻來學習和更深刻的理解強化學習相關概念,知識和算法技…

Docker入門指南:鏡像、容器與倉庫的核心概念解析

目錄 前言:為什么需要Docker? 一、Docker能做什么? 二、核心概念解析 1. 鏡像(Image):應用的標準化打包 2. 容器(Container):鏡像的運行實例 3. 鏡像倉庫&#xff0…

大模型微調實戰:基于GpuGeek平臺的低成本高效訓練方案

文章目錄 引言一、GpuGeek平臺使用入門1. 注冊與賬號設置2. 控制臺功能概覽3. 快速創建GPU實例3. 預置鏡像與自定義環境 二、GpuGeek平臺核心優勢解析1. 顯卡資源充足:多卡并行加速訓練2. 鏡像超多:開箱即用的開發環境3. 計費靈活:按需付費降…

Linux:計算機的層狀結構

1.馮諾依曼體系結構 我們常見的計算機,如筆記本、臺式機。我們不常見的計算機,如服務器,大部分都遵守馮諾依曼體系結構。 CPU:運算器和控制器組成。運算器主要工作是做算術運算和邏輯運算。控制器主要工作是協調設備之間信息流動的…

LangGraph(四)——加入人機交互控制

目錄 1. 引言2. 添加Human Assistance工具3. 編譯狀態圖4. 提示聊天機器人5. 恢復執行參考 1. 引言 智能體可能不可靠,甚至需要人工輸入才能完成任務。同樣,對于某些操作,你可能需要在運行前獲得人工批準,以保證一切按預期運行。 …

數據結構【AVL樹】

AVL樹 1.AVL樹1.AVL的概念2.平衡因子 2.AVl樹的實現2.1AVL樹的結構2.2AVL樹的插入2.3 旋轉2.3.1 旋轉的原則 1.AVL樹 1.AVL的概念 AVL樹可以是一個空樹。 它的左右子樹都是AVL樹,且左右子樹的高度差的絕對值不超過1。AVL樹是一顆高度平衡搜索二叉樹,通…

JavaScript【5】DOM模型

1.概述: DOM (Document Object Model):當頁面被加載時,瀏覽器會創建頁面的文檔對象模型,即dom對象;dom對象會被結構化為對象樹,如一個HTML文檔會被分為head,body等部分,而每個部分又…

STM32燒錄程序正常,但是運行異常

一、硬件配置問題 BOOT引腳設置錯誤 STM32的啟動模式由BOOT0和BOOT1引腳決定。若設置為從RAM啟動(BOOT01,BOOT10),程序在掉電后無法保存,導致復位后無法正常運行。應確保BOOT00(從Flash啟動)15。…

汽車二自由度系統模型以及電動助力轉向系統模型

汽車二自由度系統模型與電動助力轉向系統(EPS)的詳細建模方案,包含理論推導、MATLAB/Simulink實現代碼及參數說明: 一、二自由度汽車模型 1. 模型描述 包含以下兩個自由度: 橫向運動(側向加速度&#xf…

git提交庫常用詞

新功能 feat修改BUG fix文檔修改 docs格式修改 style重構 refactor性能提升 perf測試 test構建系統 build對CI配置文件修改 ci修改構建流程、或增加依賴庫、工具 chore回滾版本 revert

JavaScript 時間轉換:從 HH:mm:ss 到十進制小時及反向轉換

關鍵點 JavaScript 可以輕松實現時間格式(HH:mm:ss 或 HH:mm)與十進制小時(如 17.5)的相互轉換。兩個函數分別處理時間字符串到十進制小時,以及十進制小時到時間字符串的轉換,支持靈活的輸入和輸出格式。這…

LLM智能體新紀元:深入解析MCP與A2A協議,賦能智能自動化協作

LLM智能體(LLM agents)是能夠自主行動以實現特定目標的AI系統。在實際應用中,智能體能夠將用戶請求拆解為多個步驟,利用知識庫或API獲取數據,最終整合出答案。這讓智能體相比于傳統獨立聊天機器人擁有更強大的能力——…

[PMIC]PMIC重要知識點總結

PMIC重要知識點總結 摘要:PMIC (Power Management Integrated Circuit) 是現代電子設備中至關重要的組件,負責電源管理,包括電壓調節、電源轉換、電池管理和功耗優化等。PMIC 中的數字部分主要涉及控制邏輯、狀態機、寄存器配置、通信接口&am…

PYTHON訓練營DAY28

類 (一)題目1:定義圓(Circle)類 要求: 包含屬性:半徑 radius。包含方法: calculate_area():計算圓的面積(公式:πr)。calculate_circ…