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 布局举行以下压缩而不丢失语义信息:
为了整体修剪所有检索到的 HTML 文档,我们首先将所有检索到的 HTML 文档毗连在一起,并使用 Beautiful Soup 分析为单个 DOM 树。使用 DOM 树修剪 HTML 是最天然的方式,但 DOM 树过于细粒度,导致大量的节点和深树布局带来巨大的计算本钱。
考虑到上述问题,我们提出了一种优化的树布局来建模 HTML,这种布局不是那么细粒度。理想情况下,树布局的粒度可以根据不同的修剪需求举行调解。我们称之为“块树”,并设置每个块的最大单词数 m a x W o r d s maxWords maxWords 来控制块树的粒度。在构建块树时,我们从 DOM 树开始,归并碎片化的子节点到它们的父节点,并将其视为一个块。我们可以递归地归并块或子节点到它们的父节点,以形成更大的块,条件是块的单词数不超过 m a x W o r d s maxWords maxWords。归并后,无法归并的原始叶节点也被视为块。
3. 基于块树的 HTML 修剪
块树基础的 HTML 修剪包括两个步调,这两个步调都在块树布局上举行。第一个修剪步调使用嵌入模子来修剪 HTML 洗濯模块输出的结果,而第二个步调使用生成模子来修剪第一个修剪步调输出的结果。
3.1 基于文本嵌入的块修剪
该步调的目标是在保持关键信息的同时,紧缩检索结果的 HTML 文档长度。通过删除与用户查询相关性较低的块,可以减少输入到LLM中的冗余信息,从而提高生成效率和质量。
步调