8.2 文檔預處理模塊(二)

一、從0開始:簡易RAG實現

在構建更復雜的 RAG 架構之前,我們先從最基礎的版本入手。整個流程可以分為以下幾個關鍵步驟:

1.數據導入:加載并預處理原始文本數據,為后續處理做好準備。

2.文本分塊:將長文本分割成較小的段落或句子,以提高檢索效率和相關性。

3.創建 Embedding:使用嵌入模型將文本塊轉換為向量表示,便于進行語義層面的比較與匹配。

4.語義搜索:根據用戶輸入的查詢內容,在已有向量庫中檢索出最相關的文本塊。

5.響應生成:基于檢索到的相關內容,結合語言模型生成最終的回答輸出。

二、基于語義的文本分塊

在 RAG中,文本分塊(Text Chunking)是一個至關重要的環節。其核心作用是將一大段連續文本劃分為多個具有語義完整性的較小段落,從而提升信息檢索的準確性和整體效果。

傳統的分塊方式通常采用固定長度的切分策略,例如每500個字符或每若干句子進行一次分割。這種方法雖然實現簡單,但在實際應用中容易割裂完整的語義單元,導致后續的信息檢索與理解受到影響。

相比之下,一種更智能的分塊方法是語義分塊(Semantic Chunking)。它不再依據字數或句數進行機械劃分,而是通過分析句子之間的內容相似性來判斷合適的切分位置。當檢測到前后句子在語義上出現明顯差異時,就在該位置斷開,形成一個新的語義段落。

切分點的判定方法

為了找到合適的語義切分點,我們可以借助以下幾種常見的統計方法:

1.百分位法(Percentile)找出所有相鄰句子之間語義相似度差異的“第 X 百分位數”,并在那些差異值超過該閾值的位置進行切分。

2.標準差法(Standard Deviation)當句子間的語義相似度下降幅度超過平均值減去 X 倍標準差時,在該位置進行切分。

3.四分位距法(IQR, Interquartile Range)利用上下四分位數之差(Q3 - Q1)來識別變化較大的位置,并將其作為潛在的切分點。

三、添加“塊標題”(Contextual Chunk Headers,CCH)

RAG 通過在生成回答之前從外部知識庫中檢索相關信息,從而提升語言模型的事實準確性。然而,在傳統的文本分塊方法中,往往會丟失重要的上下文信息,導致檢索效果不佳,甚至使模型生成脫離上下文的回答。

為了解決這個問題,我們引入了一種改進方法:上下文塊標題(Contextual Chunk Headers, 簡稱 CCH)。 這個方法的核心思想是: 在將文本分成小塊(chunk)時,將該段內容所屬的高級上下文信息(如文檔標題、章節標題等)一并加到每個文本塊的開頭,然后再進行嵌入和檢索。 這樣做可以讓每個文本塊都帶有其背景信息,幫助模型更好地理解它屬于哪個部分,從而提高檢索的相關性,并避免模型基于斷章取義的內容生成錯誤答案。

本方法中的步驟如下:

1.數據導入(Data Ingestion)加載并預處理原始文本數據。

2.帶上下文標題的分塊(Chunking with Contextual Headers)自動識別文檔中的章節標題,并將這些標題加到對應段落的前面,形成帶有上下文的文本塊。👉?例如:

# 第三章:人工智能的基本技術人工智能的核心方法包括機器學習、深度學習和自然語言處理...

3.創建嵌入向量(Embedding Creation)將這些帶有上下文信息的文本塊轉換成數字形式(即嵌入向量),以便后續進行語義搜索。

4.語義搜索(Semantic Search)當用戶提出問題時,系統會基于這些增強后的文本塊,找到最相關的內容。

5.生成回答(Response Generation)使用大語言模型(如 Llama、ChatGLM 等)基于檢索結果生成自然、準確的回答。

6.評估效果(Evaluation)通過評分系統對 AI 的回答進行評估,檢查加入上下文標題后是否提升了回答的準確性和相關性。

四、Query改寫

實現了三種查詢轉換(Query Transformation),以提升檢索增強生成(RAG)系統的信息檢索效果。

核心目標:

通過修改或擴展用戶的原始查詢,幫助系統更準確地理解用戶意圖,并從向量庫中找到更相關的信息。

三大查詢轉換技巧

1. 查詢重寫(Query Rewriting)

將用戶的問題變得更具體、更詳細,從而提高檢索的精準度。

🔹 示例:

  • 用戶原問題:“AI 是什么?”

  • 重寫后的問題:“人工智能的定義及其核心技術有哪些?”

? 提升點:讓搜索更精確,避免過于寬泛的結果。


2. 回退提問(Step-back Prompting)

生成一個更廣泛、更高層次的問題,用于獲取更多背景信息,幫助系統更好地理解上下文。

🔹 示例:

  • 用戶原問題:“深度學習在醫療領域有哪些應用?”

  • 回退問題:“人工智能在醫療行業的應用有哪些?”

? 提升點:有助于找到與問題相關但不直接匹配的重要背景知識。


3. 子查詢拆解(Sub-query Decomposition)

將一個復雜的問題拆分成多個更簡單的小問題,分別進行檢索,最后綜合所有結果,提供更全面的回答。

🔹 示例:

  • 用戶原問題:“比較機器學習和深度學習的優缺點及應用場景。”

  • 拆解為:

  • “什么是機器學習?”

  • “什么是深度學習?”

  • “機器學習有哪些優缺點?”

  • “深度學習有哪些優缺點?”

  • “它們各自適用于哪些場景?”

? 提升點:確保覆蓋問題的所有方面,避免遺漏關鍵信息。

ref :RAG技巧與底層代碼剖析

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

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

相關文章

【系統與工具】Linux——Linux簡介、安裝、簡單使用

計算機概論與Linux簡介 計算機概論Linux介紹與版本 Linux的規劃與安裝 Linux與硬件平臺密切相關規劃硬件與Linux安裝 主機規劃與磁盤分區安裝CentOS、多重引導 簡單使用 幫助手冊文本編輯器關機 0. Linux介紹與版本 操作系統(Linux):高效…

從視頻數據到數字孿生:如何構建虛擬與現實的橋梁?

概述 視頻數據與三維場景融合渲染技術通過將動態視頻與靜態三維模型結合,利用GPU加速、WebGL渲染、數字孿生等技術,實現虛擬與現實的交互式融合。該技術廣泛應用于智慧城市、工業監控、虛擬現實、游戲特效等領域,能夠提升場景的直觀性和用戶沉…

【筆記】開源 AI Agent 項目 V1 版本 [新版] 部署 日志

kortix-ai/suna at v1 一、最新版本號 V1 二、部署截圖 本地開發環境仍然依賴于 Poetry 環境&#xff1a; &#xff08;Python>3.11,<3.13&#xff09; 創建本地 Poetry 虛擬環境 Python 多版本環境治理理念驅動的系統架構設計&#xff1a;三維治理、四級隔離、五項自…

NumPy-梯度與導數計算詳解

NumPy-梯度與導數計算詳解一、梯度與導數的基本概念1. 導數的定義2. 梯度的定義二、NumPy中的梯度計算函數&#xff1a;np.gradient()1. 函數語法2. 一維數組的梯度計算3. 多維數組的梯度計算三、基于梯度的導數近似方法1. 前向差分2. 中心差分四、實際應用場景1. 函數優化2. 數…

Redis架構安全

先學習&#xff1a;Redis架構簡介-CSDN博客 Redis壓測 Redis一般應用于高并發的場景&#xff0c;所以一定要對Redis的性能做壓測。 Redis提供了壓測腳本redis-benchmark&#xff0c;可以對Redis進行快速的基準測試。 # 20個線程&#xff0c;100W個請求&#xff0c;測試redi…

自動化Trae Apollo參數解釋的批量獲取

自動化Trae Apollo參數解釋的批量獲取一、背景介紹二、設計思路三、操作步驟1. 環境準備2. 獲取界面坐標3. 定位關鍵元素4. 執行自動化查詢5. 獲取結果四、完整代碼五、擴展應用一、背景介紹 在自動駕駛開發中&#xff0c;百度Apollo平臺提供了大量參數用于調整系統行為。Trae…

數學模型:十大距離

十大距離 文章目錄十大距離定義1. 歐氏距離&#xff08;Euclidean Distance&#xff09;2. 曼哈頓距離&#xff08;Manhattan Distance&#xff09;3. 切比雪夫距離&#xff08;Chebyshev Distance&#xff09;4. 閔可夫斯基距離&#xff08;Minkowski Distance&#xff09;5. …

流水線(Jenkins)打包拉取依賴的時候提示無法拉取,需要登錄私倉的解決辦法

在日常工作中&#xff0c;遇到了Jenkins拉取部門內部組件庫失敗的情況&#xff0c;原因是組件庫后面放到了阿里云私倉&#xff0c;并且是沒有公開的&#xff0c;所以就會有如下提示的&#xff0c;一開始我實在.npmrc文件寫死阿里云提供的接入token&#xff0c;后面發現可能是因…

操作系統王道考研習題

1.1.4本節習題精選 一、單項選擇題 01&#xff0e;操作系統是對(&#xff09;進行管理的軟件。 A.軟件 B.硬件 C.計算機資源 D.應用程序 01.c 操作系統管理計算機的硬件和軟件資源&#xff0c;這些資源統稱為計算機資源。注意&#xff0c;操作系統不僅管理處理機、存儲器等硬件…

C語言extern的用法(非常詳細,通俗易懂)

以往我們都是將所有的代碼寫到一個源文件里面&#xff0c;對于小程序&#xff0c;代碼不過幾百行&#xff0c;這或許無可厚非&#xff0c;但當程序膨脹代碼到幾千行甚至上萬行后&#xff0c;就應該考慮將代碼分散到多個文件中&#xff0c;否則代碼的閱讀和維護將成為一件痛苦的…

Git【開源分布式版本控制工具】安裝-配置-常用指令-Git遠程倉庫-IDEA使用Git

參考博客&#xff1a;Git&#xff08;分布式版本控制工具&#xff09;_為什么嗶哩嗶哩有些視頻沒有字幕-CSDN博客 Git就是一個類似于百度云盤的倉庫&#xff1b;重點是要掌握使用idea操作Git&#xff0c;企業用的最多&#xff0c;一般不會去使用命令 Git通過不斷階段保存文件…

JavaScript數組鍵值去重方法

使用 filter 和 Map 根據鍵值去重我來詳細解釋方法2&#xff0c;這是一種高效且簡潔的數組去重方法&#xff0c;特別適合根據對象中的某個鍵值進行去重操作。完整代碼function uniqueByKey(arr, key) {return [...new Map(arr.map(item > [item[key], item])).values()]; }分…

【機器學習筆記Ⅰ】9 特征縮放

特征縮放&#xff08;Feature Scaling&#xff09;詳解 特征縮放是機器學習數據預處理的關鍵步驟&#xff0c;旨在將不同特征的數值范圍統一到相近的尺度&#xff0c;從而加速模型訓練、提升性能并避免某些特征主導模型。1. 為什么需要特征縮放&#xff1f; (1) 問題背景 量綱不…

10.9 大模型訓練數據優化實戰:3步讓準確率從68%飆升至79%

大模型訓練過程分析與數據優化 一、訓練過程關鍵指標分析 (插入mermaid流程圖:訓練過程監控與優化閉環) #mermaid-svg-Gni031LkHA93fQYM {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Gni031LkHA93fQYM .erro…

深度學習模型在C++平臺的部署

一、概述深度學習模型能夠在各種生產場景中發揮重要的作用&#xff0c;而深度學習模型往往在Python環境下完成訓練&#xff0c;因而訓練好的模型如何在生產環境下實現穩定可靠的部署&#xff0c;便是一個重要內容。C開發平臺廣泛存在于各種復雜的生產環境&#xff0c;隨著業務效…

若以部署在linux,nginx反向代理,登錄404,刷新404問題

history模式在router下面的index.js文件的最下面history: createWebHistory(import.meta.env.VITE_APP_CONTEXT_PATH),這兩個配置文件都加上然后nginx里面的配置是這個位置按照實際情況&#xff0c;我的是用docker掛載的&#xff0c;所以在/usr/share/nginx/html/lw-clothing為…

SQL Server通過存儲過程實現HTML頁面生成

引言在現代企業應用中&#xff0c;數據可視化是提升決策效率的關鍵。SQL Server作為核心數據庫管理系統&#xff0c;不僅處理數據存儲和查詢&#xff0c;還具備強大的擴展能力。通過存儲過程直接生成HTML頁面&#xff0c;企業能減少對中間層&#xff08;如Web服務器或應用程序&…

qt繪制餅狀圖并實現點擊即放大點擊部分

做得比較low #ifndef TEST_POWER_H #define TEST_POWER_H#include <QWidget> #include <QtMath> #include <QPainter> #include <QPushButton> #include <QVector> #include <cmath>namespace Ui { class test_power; } struct PieData {Q…

HashMap的put、get方法詳解(附源碼)

put方法 HashMap 只提供了 put 用于添加元素&#xff0c;putVal 方法只是給 put 方法調用的一個方法&#xff0c;并沒有提供給用戶使用。 對 putVal 方法添加元素的分析如下&#xff1a;如果定位到的數組位置沒有元素 就直接插入。如果定位到的數組位置有元素就和要插入的 key …

雙立柱式帶鋸床cad【1張總圖】+設計說明書+絳重

雙立柱式帶鋸床 摘 要 隨著機械制造技術的進步&#xff0c;制造業對于切割設備的精度、效率和穩定性要求越來越高。雙立柱式帶鋸床作為一種重要的切割設備&#xff0c;必須能夠滿足工業生產對于高精度、高效率的需求。 雙立柱式帶鋸床是一種重要的工業切割設備&#xff0c;其結…