HtmlRAG:RAG系統(tǒng)中,HTML比純文本效果更好
HtmlRAG 方法通過使用 HTML 而不是純文本來增強 RAG 系統(tǒng)中的知識表示能力。通過 HTML 清洗和兩步塊樹修剪方法,在保持關鍵信息的同時縮短了 HTML 文檔的長度。這種方法優(yōu)于現(xiàn)有基于純文本的RAG的性能。
方法
其實主要看下圍繞html提純思路,將提純后的Html內容送入LLM進行增強問答。
圖片
1. HTML 清洗
由于原始 HTML 文檔過長(每個超過 80K),并且不需要考慮用戶查詢的語義特征,因此在這個步驟中使用基于規(guī)則的方法進行預處理。這個清洗過程移除無關內容并壓縮冗余結構,保留原始 HTML 中的所有語義信息。清洗后的 HTML 適合于配備長上下文 LLM 的 RAG 系統(tǒng),并且不希望在生成前丟失任何信息。清洗后的 HTML 還是后續(xù) HTML 修剪的基礎。
1.1 HTML 內容清洗
從網(wǎng)絡上檢索到的 HTML 文檔包含大量對人類用戶不可見的額外內容,如 HTML 標簽、CSS 和 JavaScript。大多數(shù) HTML 標簽提供豐富的結構信息,幫助 LLM 理解 HTML,而 CSS 和 JavaScript 內容提供的幫助有限。具體的清洗步驟幾乎是無損的:
- 移除 CSS 樣式、注釋和 JavaScript。
- 清理冗長的 HTML 標簽屬性。
1.2 無損結構壓縮
在大多數(shù) 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 樹過于細粒度,導致大量的節(jié)點和深樹結構帶來巨大的計算成本。
3. 基于塊樹的 HTML 修剪
塊樹基礎的 HTML 修剪包括兩個步驟,這兩個步驟都在塊樹結構上進行。第一個修剪步驟使用嵌入模型來修剪 HTML 清洗模塊輸出的結果,而第二個步驟使用生成模型來修剪第一個修剪步驟輸出的結果。
3.1 基于文本嵌入的塊修剪
該步驟的目標是在保持關鍵信息的同時,縮短檢索結果的 HTML 文檔長度。通過刪除與用戶查詢相關性較低的塊,可以減少輸入到LLM中的冗余信息,從而提高生成效率和質量。
步驟
- 從每個塊中提取純文本內容。使用文本嵌入模型計算這些文本內容與用戶查詢的相似性得分。通常,嵌入模型會將文本轉換為向量表示,并計算這些向量之間的相似性。
- 貪心算法修剪:使用貪心算法來選擇要刪除的塊。算法會從相似性得分最低的塊開始刪除,直到 HTML 文檔的總長度滿足設定的上下文窗口要求。刪除塊時,可能會重新出現(xiàn)冗余的 HTML 結構(如多層嵌套標簽或空標簽),因此需要重新調整 HTML 結構,以確保其簡潔性和正確性。
- 重新調整 HTML 結構:在刪除塊后,檢查并合并多層單嵌套標簽(例如,將 <div<div><p>...</p></div></div> 簡化為 <p>...</p>)。移除空標簽(如 <p></p>),以進一步簡化 HTML 結構。
3.2 生成模型的細粒度塊修剪
生成模型的細粒度塊修剪提示詞
如下圖,為了進一步細粒度地修剪塊,擴展了修剪后塊樹的葉節(jié)點,構建了一個更細粒度的塊樹。由于生成模型具有較長的上下文窗口,可以全局建模塊樹。生成模型計算每個塊的得分,得分由唯一序列的生成概率給出,序列由從根標簽到塊標簽和文本的HTML標簽路徑表示。最后,根據(jù)塊得分,應用類似的貪心算法獲得最終的修剪HTML。
塊得分計算。使用分詞器將塊樹轉換為標記樹,相應的HTML標簽和標記用相同的顏色標記。標記生成概率位于右上角,虛線框中的標記不需要推理。塊樹的右上角顯示塊概率,可以從相應的標記概率推導出來。
實驗效果
圖片
圖片
- HtmlRAG的消融研究及塊樹粒度影響的實驗結果
圖片