HtmlRAG:RAG系統中,HTML比純文本效果更好 原創
??HtmlRAG?
? 方法通過使用 HTML 而不是純文本來增強 RAG 系統中的知識表示能力。通過 HTML 清洗和兩步塊樹修剪方法,在保持關鍵信息的同時縮短了 HTML 文檔的長度。這種方法優于現有基于純文本的RAG的性能。
方法
其實主要看下圍繞html提純思路,將提純后的Html內容送入LLM進行增強問答。
1. HTML 清洗
由于原始 HTML 文檔過長(每個超過 80K),并且不需要考慮用戶查詢的語義特征,因此在這個步驟中使用基于規則的方法進行預處理。這個清洗過程移除無關內容并壓縮冗余結構,保留原始 HTML 中的所有語義信息。清洗后的 HTML 適合于配備長上下文 LLM 的 RAG 系統,并且不希望在生成前丟失任何信息。清洗后的 HTML 還是后續 HTML 修剪的基礎。
1.1 HTML 內容清洗
從網絡上檢索到的 HTML 文檔包含大量對人類用戶不可見的額外內容,如 HTML 標簽、CSS 和 JavaScript。大多數 HTML 標簽提供豐富的結構信息,幫助 LLM 理解 HTML,而 CSS 和 JavaScript 內容提供的幫助有限。具體的清洗步驟幾乎是無損的:
- 移除 CSS 樣式、注釋和 JavaScript。
- 清理冗長的 HTML 標簽屬性。
1.2 無損結構壓縮
在大多數 HTML 文檔中,原始 HTML 結構包含冗余。對 HTML 結構進行以下壓縮而不丟失語義信息:
- 合并多層單嵌套標簽。例如,將?
?<div<div><p>some text</p></div></div>?
?? 簡化為??<p>some text</p>?
?。 - 移除空標簽,如?
?<p></p>?
?。
2. 塊樹構建
為了整體修剪所有檢索到的 HTML 文檔,我們首先將所有檢索到的 HTML 文檔連接在一起,并使用 Beautiful Soup 解析為單個 DOM 樹。使用 DOM 樹修剪 HTML 是最自然的方式,但 DOM 樹過于細粒度,導致大量的節點和深樹結構帶來巨大的計算成本。
考慮到上述問題,我們提出了一種優化的樹結構來建模 HTML,這種結構不是那么細粒度。理想情況下,樹結構的粒度可以根據不同的修剪需求進行調整。我們稱之為“塊樹”,并設置每個塊的最大單詞數 來控制塊樹的粒度。在構建塊樹時,我們從 DOM 樹開始,合并碎片化的子節點到它們的父節點,并將其視為一個塊。我們可以遞歸地合并塊或子節點到它們的父節點,以形成更大的塊,條件是塊的單詞數不超過 。合并后,無法合并的原始葉節點也被視為塊。
3. 基于塊樹的 HTML 修剪
塊樹基礎的 HTML 修剪包括兩個步驟,這兩個步驟都在塊樹結構上進行。第一個修剪步驟使用嵌入模型來修剪 HTML 清洗模塊輸出的結果,而第二個步驟使用生成模型來修剪第一個修剪步驟輸出的結果。
3.1 基于文本嵌入的塊修剪
該步驟的目標是在保持關鍵信息的同時,縮短檢索結果的 HTML 文檔長度。通過刪除與用戶查詢相關性較低的塊,可以減少輸入到LLM中的冗余信息,從而提高生成效率和質量。
步驟
- 從每個塊中提取純文本內容。使用文本嵌入模型計算這些文本內容與用戶查詢的相似性得分。通常,嵌入模型會將文本轉換為向量表示,并計算這些向量之間的相似性。
- 貪心算法修剪:使用貪心算法來選擇要刪除的塊。算法會從相似性得分最低的塊開始刪除,直到 HTML 文檔的總長度滿足設定的上下文窗口要求。刪除塊時,可能會重新出現冗余的 HTML 結構(如多層嵌套標簽或空標簽),因此需要重新調整 HTML 結構,以確保其簡潔性和正確性。
- 重新調整 HTML 結構:在刪除塊后,檢查并合并多層單嵌套標簽(例如,將?
?<div<div><p>...</p></div></div>?
?? 簡化為??<p>...</p>?
??)。移除空標簽(如??<p></p>?
?),以進一步簡化 HTML 結構。
3.2 生成模型的細粒度塊修剪
生成模型的細粒度塊修剪提示詞
如下圖,為了進一步細粒度地修剪塊,擴展了修剪后塊樹的葉節點,構建了一個更細粒度的塊樹。由于生成模型具有較長的上下文窗口,可以全局建模塊樹。生成模型計算每個塊的得分,得分由唯一序列的生成概率給出,序列由從根標簽到塊標簽和文本的HTML標簽路徑表示。最后,根據塊得分,應用類似的貪心算法獲得最終的修剪HTML。
塊得分計算。使用分詞器將塊樹轉換為標記樹,相應的HTML標簽和標記用相同的顏色標記。標記生成概率位于右上角,虛線框中的標記不需要推理。塊樹的右上角顯示塊概率,可以從相應的標記概率推導出來。
實驗效果
- HtmlRAG的消融研究及塊樹粒度影響的實驗結果
本文轉載自公眾號大模型自然語言處理 作者:余俊暉
原文鏈接:??https://mp.weixin.qq.com/s/rNGc-Ffvj776Sp-vf9ME8w??
