RAG分塊優化之語義分塊方法CrossFormer模型技術思路 原創
筆者在前期文章中總結了RAG的分塊《??RAG常見13種分塊策略大總結(一覽表)??》,本文介紹一個語義分段的工作,該工作解決的問題是文本語義分割,即將文檔分割成多個具有連續語義的段落。傳統方法通常依賴于預處理文檔以分段來解決輸入長度限制問題,但這會導致段間關鍵語義信息的丟失。RAG系統中的文本分塊方法主要分為基于規則和基于LLM的方法。
插入一個思路,其實,語義分段的方式筆者在很早實踐過一個思路,不管是RAG分塊還是基于規則分塊,都會或多或少的都是段落信息,如何通過語義的方式分割段落?筆者之前的思路最初的想法來源于序列標注模型,那么是否能應用序列標注的方法,來預測文本行之間的跳轉概率?答案是肯定的,以pdf為例,具體實施步驟如下: 先放上筆者之前的老圖:
- 從pdf讀取程序或ocr引擎中得到文本行及其坐標;
- 使用神經網絡對第i行的文本進行編碼,得到文本嵌入向量text_emb(i);
- 提取對應行的圖像,得到圖像嵌入向量img_emb(i);
- 提取字號、文字長度特征,并進行歸一化得到特征向量;
- 聚合步驟2、3、4得到的向量,得到行嵌入line_emb(i);
- 使用神經網絡對行向量序列[line_emb(i)]進行序列標注。
整體方案流程圖如下:
接下來,本文介紹的方法有異曲同工之處,也是采用序列標注的方式進行,供參考。
方法-CrossFormer
任務定義
CrossFormer 將文本語義分割任務定義為句子級別的序列標注問題。給定一個文檔 ,包含 個句子,每個句子 被分配一個二分類標簽 。標簽 表示由語義連貫性統一的一個段落的終端邊界,而 表示在同一主題段落內的連續性。目標是訓練一個函數 ,能夠根據上下文預測每個句子的標簽 。
為了實現這一點,模型在每個句子 的末尾添加一個特殊的標記 [SENT],并評估這個標記是否標志著一個段落邊界。通過這種方式,文檔被分割成一組不相交的語義段落。
文檔預處理
由于文本語義分割任務通常涉及長文檔,需要采用適當的建模方法來有效處理這些文檔。論文中采用了截斷和分段的方法。步驟如下:
- 分段:根據任務指定的分隔符(如換行符或句號)對文檔進行分段。
- 截斷:將每個句子截斷到最大長度 。
- 拼接:將截斷后的句子按順序拼接,形成多個文檔段,每個段的長度不超過 。
- 批處理:將這些文檔段組裝成一個批次,并輸入模型進行訓練或推理。
跨段融合模塊 (CSFM)
CSFM 是 CrossFormer 的核心組件,用于增強文檔段之間的語義連貫性。原理如下:
- 全局語義表示:通過選擇預訓練的特殊標記 [CLS] 和 [SEP],提取每個段落的語義表示 。然后,通過最大池化從這些表示中獲取最大的語義成分,得到全局語義信息 。
- 拼接和線性變換:將全局語義嵌入 與每個分隔符嵌入 進行拼接,并通過兩個線性層進行處理,得到 ,即結合了全局語義信息的分隔符表示。
- 分類:將 輸入線性層并應用 Softmax 函數,得到分類結果,從而確定段落邊界。
訓練模型使用交叉熵損失函數即可。
通過這種方式,CSFM 能夠有效地捕捉文檔段之間的語義依賴關系,提高分割性能。
CrossFormer 作為 RAG 文本塊分割器
CrossFormer 可以作為RAG系統中的文本塊分割器,生成更具語義連貫性的文本塊。流程如下:
流程圖
- 分割長文檔:首先使用 CrossFormer 對輸入文檔進行分割,生成一系列文本塊。
- 長度評估:評估每個文本塊的長度。如果長度超過預設閾值,則將其輸入分割隊列進行進一步處理,直到確定不需要額外分割或文本塊長度低于指定閾值。
- 檢索和生成:使用分割后的文本塊進行檢索和生成。通過檢索器和問題提示進行相關性檢索,生成上下文,并將其輸入到LLM中以獲得最終答案。
局限性
- CrossFormer不能精確控制文本塊長度的上限。因此,可能需要結合基于規則的方法來輸出合適的長度。
- 作為線性文本語義分割模型,CrossFormer不能輸出部分重疊的文本塊,這在RAG系統的某些場景中是必需的。
實驗效果
文本語義分割的結果
在RAG基準測試上的結果
參考文獻:CrossFormer: Cross-Segment Semantic Fusion for Document Segmentation,https://arxiv.org/pdf/2503.23671v1
公眾號大模型自然語言處理 作者:余俊暉
