AI Personal Learning
und praktische Anleitung
豆包Marscode1

HtmlRAG: Aufbau eines effizienten Systems zur verbesserten Generierung von HTML-Dokumenten, Optimierung des Abrufs und der Verarbeitung von HTML-Dokumenten in RAG-Systemen

Allgemeine Einführung

HtmlRAG ist ein innovatives Open-Source-Projekt, das sich auf die Verbesserung der Abfrage von Enhanced Generation (RAG) Ansatz zur Verarbeitung von HTML-Dokumenten im System. Das Projekt präsentiert einen neuartigen Ansatz, der argumentiert, dass die Verwendung von HTML-Formatierung in RAG-Systemen effizienter ist als reiner Text. Das Projekt umfasst einen kompletten Datenverarbeitungsablauf, vom Rewriting von Anfragen über das Crawling von HTML-Dokumenten bis hin zu einem Bewertungssystem für die Generierung von Antworten. Es unterstützt die Verarbeitung mehrerer gängiger Datensätze, einschließlich ASQA, HotpotQA, NQ usw., und bietet detaillierte Bewertungsmetriken zur Messung der Systemleistung. Das Projekt stellt nicht nur eine Quellcode-Implementierung zur Verfügung, sondern umfasst auch vorverarbeitete Datensätze und Bewertungswerkzeuge, die es Forschern ermöglichen, die Ergebnisse leicht zu reproduzieren und weitere Verbesserungen vorzunehmen.

Adresse des Papiers: https://arxiv.org/pdf/2411.02959


HtmlRAG:构建高效HTML检索增强生成系统,优化RAG系统中的HTML文档检索与处理-1

schlägt HtmlRAG vor, das HTML anstelle von einfachem Text als Format für externes Wissen im RAG-System verwendet. Um den langen Kontext von HTML zu bewältigen, werden eine verlustfreie HTML-Bereinigung und ein zweistufiges, auf Blockbäumen basierendes HTML Pruning vorgeschlagen.

 

  • Nicht-destruktive HTML-BereinigungDieser Bereinigungsprozess entfernt nur völlig irrelevante Inhalte und komprimiert redundante Strukturen, wobei alle semantischen Informationen im ursprünglichen HTML erhalten bleiben. Verlustfrei bereinigtes, komprimiertes HTML eignet sich für RAG-Systeme mit langen Kontext-LLMs und einer geringen Bereitschaft, vor der Generierung Informationen zu verlieren.
  • HTML-Beschneidung auf der Grundlage von zweistufigen BlockbäumenBlockbaum-basiertes HTML Pruning besteht aus zwei Schritten, die beide an der Blockbaumstruktur durchgeführt werden.Im ersten Schritt wird das Einbettungsmodell verwendet, um die Punktzahlen für Blöcke zu berechnenaber (nicht)Der zweite Schritt verwendet den Pfad zur Erstellung des Modells. Der erste Schritt befasst sich mit den Ergebnissen der verlustfreien HTML-Bereinigung, während der zweite Schritt die Ergebnisse des ersten Bereinigungsschritts behandelt.

 

HtmlRAG:构建高效HTML检索增强生成系统,优化RAG系统中的HTML文档检索与处理-1

Berechnung der Blockpunktzahl. Der Blockbaum wird durch einen Splitter in einen Tokenbaum umgewandelt, und die entsprechenden HTML-Tags und Token sind mit derselben Farbe markiert. Die Wahrscheinlichkeiten für die Tokengenerierung werden in der oberen rechten Ecke angezeigt, und die Token im gestrichelten Feld erfordern keine Inferenz. In der oberen rechten Ecke des Blockbaums werden die Blockwahrscheinlichkeiten angezeigt, und die Wahrscheinlichkeiten können aus den entsprechenden Tokenwahrscheinlichkeiten abgeleitet werden

 

Beispielbefehl:

**HTML**: “{HTML}” 
**问题**: **{Question}**

您的任务是从 HTML 文档中识别与给定问题最相关的文本片段。该文本片段可以是对事实的直接释义,或可用作推断该事实的支持性证据。

文本片段的整体长度应超过 20 个单词且少于 300 个单词。您需要提供该文本片段在 HTML 文档中的路径。

输出示例为: 
<html1><body><div2><p>一些关键信息...

输出: 
<html1><body><div2><p>在历史性的 2018 年皇家大战中,Shinsuke Nakamura 赢得了男子皇家大战. . .

 

 

HtmlRAG:构建高效HTML检索增强生成系统,优化RAG系统中的HTML文档检索与处理-1

Informationsverluste bei der Umwandlung von HTML in einfachen Text

 

Funktionsliste

  • Abfrageverarbeitungs- und Umschreibfunktionen zur Unterstützung der Zerlegung komplexer Probleme in Teilabfragen
  • System zum Durchsuchen und Verarbeiten von HTML-Dokumenten, das Informationen über die Struktur der Dokumente speichert
  • Unterstützung mehrerer Datensätze (ASQA, HotpotQA, NQ, TriviaQA, MuSiQue, ELI5)
  • Vollständiger Bewertungsrahmen mit mehreren Dimensionen, einschließlich Korrektheit der Antworten, Relevanz usw.
  • Unterstützung für die Verarbeitung benutzerdefinierter Datensätze, damit die Benutzer ihre eigenen Daten verwenden können
  • Integrierte Bing-Suchfunktion zum Auffinden relevanter Webseiten
  • Bereitstellung eines detaillierten Bewertungssystems mit mehreren Bewertungsmaßstäben einschließlich ROUGE-Bewertung
  • Unterstützt die Integration mit dem LangChain-Framework
  • Werkzeuge zur Visualisierung und Analyse der Ergebnisse

 

Hilfe verwenden

1. ökologische Konfiguration

Zunächst müssen Sie das Projekt-Repository klonen und die erforderlichen Abhängigkeiten installieren:

git clone https://github.com/plageon/HtmlRAG
cd HtmlRAG
pip install -r requirements.txt

2. die Vorbereitung des Datensatzes

Das Projekt unterstützt zwei Arten der Datennutzung:

  1. Verwenden Sie einen vorverarbeiteten Datensatz:
    • Der Datensatz wird im Ordner html_data gespeichert
    • Der vollständige Testdatensatz kann von huggingface heruntergeladen werden: HtmlRAG-test
    • Zu den unterstützten Datensatzformaten gehören ASQA, HotpotQA, NQ, usw.
  2. Verwenden Sie benutzerdefinierte Daten:
    • Bereiten Sie die Abfragedatei im .jsonl-Format vor, wobei jede Zeile die folgenden Felder enthält:
      {
      "id": "unique_id",
      "question": "query_text",
      "answers": ["answer_text_1", "answer_text_2"]
      }
      

3. der Ablauf der Hauptfunktionen

Anfragebearbeitung

  1. Abfrage umschreiben:
    • Das System unterteilt komplexe Fragen automatisch in mehrere Unterabfragen
    • Das Rewrite-Ergebnis wird im Feld rewrite_method_result des json-Objekts gespeichert

Verarbeitung von HTML-Dokumenten

  1. Page Crawl:
    • Das System verwendet Bing für die Suche nach relevanten URLs
    • Automatisches Crawlen von statischen HTML-Dokumenten
    • Informationen über die HTML-Struktur des Dokuments aufbewahren

Bewertungssysteme

  1. Bewerten Sie Indikator-Konfigurationen:
    • Bewertung der Korrektheit der Antworten
    • Bewertung der Relevanz der Antworten
    • Berechnung der ROUGE-Punktzahl
    • Benutzerdefinierte Einstellungen für Bewertungsindikatoren
  2. Einsatz von Bewertungsinstrumenten:
from ragas.metrics import AnswerRelevancy
from langchain.embeddings import HuggingFaceEmbeddings
# 初始化评估器
embeddings = HuggingFaceEmbeddings('BAAI/bge-base-en')
answer_relevancy = AnswerRelevancy(embeddings=embeddings)
# 加载模型
answer_relevancy.init_model()
# 运行评估
results = answer_relevancy.score(dataset)

4. die Analyse und Optimierung der Ergebnisse

  • Analysieren Sie die Ergebnisse der Bewertung mit Hilfe der bereitgestellten Visualisierungstools
  • Anpassung der Systemparameter auf der Grundlage von Bewertungsindikatoren
  • Optimierung von Strategien zum Umschreiben von Abfragen und Methoden zur Verarbeitung von Dokumenten

5. vorsichtsmaßnahmen

  • Genügend Speicherplatz für die Verarbeitung von HTML-Daten sicherstellen
  • Einhaltung von API-Nutzungsbeschränkungen und Tarifbeschränkungen
  • Regelmäßige Aktualisierung der Abhängigkeitspakete auf die neuesten Funktionen
  • Achten Sie auf die Korrektheit des Datenformats
  • GPUs werden empfohlen, um die Verarbeitung großer Datenmengen zu beschleunigen

 

Hinweise zum Bereinigen von HTML-Dokumenten

HTML-Bereinigungsregeln (Clean Patterns)

def clean_html(html: str) -> str:
# 1. 使用BeautifulSoup解析HTML
soup = bs4.BeautifulSoup(html, 'html.parser')

# 2. 调用simplify_html进行简化处理
html = simplify_html(soup)

# 3. 调用clean_xml清理XML标记
html = clean_xml(html)

return html

 

 

1. die Verarbeitung von HTML-Dokumenten, die mit der Eingabeaufforderung zusammenhängen (der folgende Inhalt ist nicht der Projektcode)

# HTML清洗提示词
CLEAN_HTML_PROMPT = """
任务:清洗HTML文档,保留有效信息
输入:原始HTML文档
要求:
1. 移除:
- JavaScript代码 (<script>标签)
- CSS样式信息 (<style>标签)
- HTML注释
- 空白标签
- 多余属性
2. 保留:
- 主要内容标签(<title>, <p>, <div>, <h1>-<h6>等)
- 文本内容
- 结构关系
输出:清洗后的HTML文本
"""
# HTML分块提示词
HTML_BLOCK_PROMPT = """
任务:将HTML文档分割成语义完整的块
输入:
- 清洗后的HTML文档
- 最大块大小:{max_words}词
要求:
1. 保持HTML标签的层级结构
2. 确保每个块的语义完整性
3. 记录块的层级路径
4. 控制每个块的大小不超过限制
输出:JSON格式的块列表,包含:
{
"blocks": [
{
"content": "块内容",
"path": "HTML路径",  
"depth": "层级深度"
}
]
}
"""

2. die Stichworte zur Konstruktion des Blockbaums

# 块树节点评分提示词
BLOCK_SCORING_PROMPT = """
任务:评估HTML块与问题的相关性
输入:
- 问题:{question}
- HTML块:{block_content}
- 块路径:{block_path}
要求:
1. 计算语义相关性分数(0-1)
2. 考虑以下因素:
- 文本相似度
- 结构重要性
- 上下文关联
输出:
{
"score": float,  # 相关性分数
"reason": "评分理由"
}
"""
# 块树剪枝提示词
TREE_PRUNING_PROMPT = """
任务:决定是否保留HTML块
输入:
- 问题:{question}
- 当前块:{current_block}
- 父级块:{parent_block}
- 子块列表:{child_blocks}
要求:
1. 分析块的重要性:
- 与问题的相关性
- 在文档结构中的作用
- 与父子块的关系
2. 生成保留/删除决策
输出:
{
"action": "keep/remove",
"confidence": float,  # 决策置信度
"reason": "决策理由"
}
"""

3) Begriffe aus dem Bereich der Wissensabfrage

# 相关性计算提示词
RELEVANCE_PROMPT = """
任务:计算文档片段与问题的相关性
输入:
- 问题:{question}
- 文档片段:{text_chunk}
评估标准:
1. 直接相关性:内容直接回答问题的程度
2. 间接相关性:提供背景或补充信息的程度
3. 信息完整性:回答是否完整
输出:
{
"relevance_score": float,  # 相关性分数0-1
"reason": "评分理由",
"key_matches": ["关键匹配点1", "关键匹配点2", ...]
}
"""
# 答案生成提示词
ANSWER_GENERATION_PROMPT = """
任务:根据相关文档生成答案
输入:
- 用户问题:{question}
- 相关文档:{relevant_docs}
- 文档评分:{doc_scores}
要求:
1. 综合高相关性文档信息
2. 保持答案的准确性
3. 确保回答完整且连贯
4. 必要时标注信息来源
输出格式:
{
"answer": "生成的答案",
"sources": ["使用的文档来源"],
"confidence": float  # 答案置信度
}
"""

4. die Bewertung der relevanten Prompts

# 答案评估提示词
EVALUATION_PROMPT = """
任务:评估生成答案的质量
输入:
- 原始问题:{question}
- 生成答案:{generated_answer}
- 参考答案:{reference_answer}
评估维度:
1. 正确性:信息是否准确
2. 完整性:是否完整回答问题
3. 相关性:内容与问题的相关程度
4. 连贯性:表述是否清晰连贯
输出:
{
"scores": {
"correctness": float,
"completeness": float,
"relevance": float,
"coherence": float
},
"feedback": "详细评估意见"
}
"""
# 错误分析提示词
ERROR_ANALYSIS_PROMPT = """
任务:分析答案中的潜在错误
输入:
- 生成答案:{answer}
- 参考资料:{reference_docs}
分析要点:
1. 事实准确性检查
2. 逻辑推理验证
3. 信息来源核实
输出:
{
"errors": [
{
"type": "错误类型",
"description": "错误描述",
"correction": "建议修正"
}
],
"reliability_score": float  # 可信度评分
}
"""
Darf nicht ohne Genehmigung vervielfältigt werden:Leiter des AI-Austauschkreises " HtmlRAG: Aufbau eines effizienten Systems zur verbesserten Generierung von HTML-Dokumenten, Optimierung des Abrufs und der Verarbeitung von HTML-Dokumenten in RAG-Systemen
de_DEDeutsch