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