AI Personal Learning
und praktische Anleitung

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: Aufbau eines effizienten HTML Retrieval Enhanced Generation Systems zur Optimierung des Abrufs und der Verarbeitung von HTML-Dokumenten in RAG-Systemen-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, um das Modell zu erstellen. Der erste Schritt befasst sich mit den Ergebnissen der verlustfreien HTML-Bereinigung, während der zweite Schritt die Ergebnisse des ersten Bereinigungsschritts behandelt.

 

HtmlRAG: Aufbau eines effizienten HTML Retrieval Enhanced Generation Systems zur Optimierung des Abrufs und der Verarbeitung von HTML-Dokumenten in RAG-Systemen-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}"
**Frage**: **{Frage}**

Ihre Aufgabe ist es, das Textfragment aus dem HTML-Dokument zu identifizieren, das für die gestellte Frage am relevantesten ist. Das Textfragment kann eine direkte Paraphrase eines Sachverhalts sein oder als Beleg für die Schlussfolgerung dieses Sachverhalts dienen.

Die Gesamtlänge des Textfragments sollte mehr als 20 Wörter und weniger als 300 Wörter betragen. Sie müssen den Pfad zu dem Textfragment in dem HTML-Dokument angeben.

Beispiel für die Ausgabe: 
<html1><body><div2><p>Einige Kernaussagen...

Ausgabe. 
<html1><body><div2><p>Shinsuke Nakamura gewann die Men's Battle Royal bei der historischen Battle Royal 2018 . . .

 

 

HtmlRAG: Aufbau eines effizienten HTML Retrieval Enhanced Generation Systems zur Optimierung des Abrufs und der Verarbeitung von HTML-Dokumenten in RAG-Systemen-1

Informationsverluste bei der Umwandlung von HTML in einfachen Text

 

Funktionsliste

  • Abfrageverarbeitungs- und Umschreibungsfunktionen zur Unterstützung der Zerlegung komplexer Probleme in Teilabfragen
  • System zum Durchsuchen und Verarbeiten von HTML-Dokumenten, das Informationen über die Dokumentstruktur bewahrt
  • 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 mit ihren eigenen Daten arbeiten können
  • Integrierte Bing-Suchfunktion zum Auffinden relevanter Webseiten
  • Bereitstellung eines detaillierten Bewertungssystems, einschließlich einer Vielzahl von Bewertungsindikatoren wie ROUGE-Bewertungen
  • 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 anforderungen.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",
      "frage": "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 Indikatorenkonfigurationen:
    • 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
# Initialisieren Sie den Evaluator
Einbettungen = HuggingFaceEmbeddings('BAAI/bge-base-de')
answer_relevancy = AnswerRelevancy(embeddings=embeddings)
# lädt das Modell
antwort_relevanz.init_model()
# Ausführen der Auswertung
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

  • Sicherstellen, dass genügend Speicherplatz für die Verarbeitung von HTML-Daten vorhanden ist
  • 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. parsen von HTML mit BeautifulSoup
soup = bs4.BeautifulSoup(html, 'html.parser')

# 2. simplify_html aufrufen, um es zu vereinfachen
html = simplify_html(soup)

# 3. clean_xml aufrufen, um das XML-Markup zu bereinigen
html = clean_xml(html)

Rückgabe html

 

 

1. mit HTML-Dokumenten verknüpfte Wörter (der folgende Inhalt ist nicht der Projektcode)

# HTML-Reinigungsaufforderung Wörter
CLEAN_HTML_PROMPT = """
Aufgabe: HTML-Dokument bereinigen, um gültige Informationen beizubehalten
Eingabe: Original-HTML-Dokument
Anforderungen:
1. entfernen.
- JavaScript-Code (<script>标签)
- CSS样式信息 (<style>标签)
- HTML注释
- 空白标签
- 多余属性
2. 保留:
- 主要内容标签(<title>, <p>, <div>, <h1>-<h6>, usw.)
- Inhalt des Textes
- Strukturelle Beziehungen
Ausgabe: bereinigter HTML-Text
"""
# HTML Chunking Aufforderung Wörter
HTML_BLOCK_PROMPT = """
Aufgabe: HTML-Dokument in semantisch vollständige Blöcke aufteilen
Eingabe:
- Bereinigtes HTML-Dokument
- Maximale Blockgröße: {max_words} Wörter
Anforderungen:
1. Beibehaltung der hierarchischen Struktur der HTML-Tags
2. Sicherstellung der semantischen Integrität der einzelnen Blöcke
3. Aufzeichnung des hierarchischen Pfades des Blocks
4. Kontrolle, dass die Größe eines jeden Blocks die Grenze nicht überschreitet
Ausgabe: Liste der Blöcke im JSON-Format, die Folgendes enthält.
{
"Blöcke": [
{
"Inhalt": "Blockinhalt",
"Pfad": "HTML-Pfad",
"depth": "Hierarchietiefe"
}
]
}
"""

2. die Stichworte zur Konstruktion des Blockbaums

# Blockbaumknoten Bewertungsaufforderung Wort
BLOCK_SCORING_PROMPT = """
AUFGABE: Bewerten Sie die Relevanz des HTML-Blocks für die Frage
Eingabe:
- Frage: {Frage}
- HTML-Block: {block_content}
- Blockpfad: {block_path}
Anforderungen:
1. Berechne den semantischen Relevanzwert (0-1)
2. Berücksichtigen Sie die folgenden Faktoren:
- Textähnlichkeit
- Strukturelle Bedeutung
- kontextuelle Relevanz
Ausgabe:
{
"score": Float, # Relevanz-Score
"Grund": "Grund für die Bewertung"
}
"""
# Block Baumbeschneidung Wort
TREE_PRUNING_PROMPT = """
Aufgabe: Entscheidung, ob der HTML-Block beibehalten werden soll
Eingabe:
- {Frage}
- Aktueller Block: {current_block}
- Übergeordneter Block: {parent_block}
- Liste der untergeordneten Blöcke: {child_blocks}
Anforderungen:
1. Analysieren Sie die Bedeutung des Blocks:
- Relevanz für das Problem
- Rolle in der Dokumentstruktur
- Beziehung zu übergeordneten und untergeordneten Blöcken
2. Entscheidungen zur Aufbewahrung/Löschung generieren
Ausgabe:
{
"Aktion": "behalten/entfernen",
"Konfidenz": Float, # Konfidenzniveau der Entscheidung
"reason": "Grund für die Entscheidung"
}
"""

3) Begriffe aus dem Bereich der Wissensabfrage

# Wort zur Aufforderung zur Relevanzberechnung
RELEVANT_PROMPT = """
AUFGABE: Berechnen der Relevanz eines Dokumentfragments für eine Frage
Eingabe:
- Frage: {Frage}
- Dokumentfragment: {text_chunk}
Bewertungskriterien:
1. direkte Relevanz: das Ausmaß, in dem der Inhalt die Frage direkt beantwortet
2. indirekte Relevanz: das Ausmaß, in dem der Inhalt Kontext oder zusätzliche Informationen liefert. 3.
3. Vollständigkeit der Information: ob die Antwort vollständig ist
Ausgabe:
{
"relevance_score": float, # Relevanzwert 0-1
"reason": "Grund für die Wertung".
"key_matches": ["key match 1", "key match 2", ...]
}
"""
# Antwortgenerierung Aufforderungswörter
ANSWER_GENERATION_PROMPT = """
AUFGABE: Generieren einer Antwort auf der Grundlage eines relevanten Dokuments
Eingabe:
- Benutzerfrage: {question}
- Verwandte Dokumente: {relevant_docs}
- Dokument-Bewertungen: {doc_scores}
Anforderungen:
1. Synthese von Informationen aus hochrelevanten Dokumenten
2. die Genauigkeit der Antworten beibehalten
3. sicherstellen, dass die Antworten vollständig und kohärent sind
4. zitiere Quellen wo nötig
Ausgabeformat:
{
"answer": "Generated answer", "sources": ["Documentation sources used"], ["Sources used"], {
"sources": ["Sources of documents used"], { "confidence": float # Answer confidence.
"confidence": float # Antwortkonfidenz
}
"""

4. die Bewertung der relevanten Prompts

# Antwort Bewertungsaufforderung Wörter
EVALUATION_PROMPT = """
TASK: Bewerten Sie die Qualität der generierten Antworten
Eingabe:
- Ursprüngliche Frage: {question}
- Generierte Antwort: {generated_answer}
- Referenzantwort: {reference_answer}
Bewertungsdimensionen:
1. Korrektheit: ob die Informationen korrekt sind
2. die Vollständigkeit: ob die Frage vollständig beantwortet ist
3. die Relevanz: wie relevant der Inhalt für die Frage ist
4. Kohärenz: ob die Darstellung klar und kohärent ist
Ausgabe:
{
"Punkte": {
"Korrektheit": float, "Vollständigkeit": float, {
"Vollständigkeit": float, "Relevanz": float, "Kohärenz": {
"Relevanz": Float, { "Kohärenz": Float
"kohärenz": float
}, "feedback": "Detaillierte Kommentare".
"feedback": "Detaillierte Bewertungskommentare"
}
"""
# Fehleranalyse Aufforderungswörter
ERROR_ANALYSIS_PROMPT = """
Aufgabe: Analysieren Sie mögliche Fehler in Antworten
Eingabe:
- Antwort generieren: {answer}
- Referenz: {reference_docs}
Analysieren Sie die wichtigsten Punkte:
1. Überprüfung der sachlichen Richtigkeit
2. Überprüfung der logischen Argumentation
3. Überprüfung der Quelle
Ausgabe:
{
"Fehler": [
{
"type": "Fehlertyp",
"description": "Beschreibung des Fehlers", "correction".
"correction": "Vorgeschlagene Korrektur"
}
], "reliability_score".
"reliability_score": Float # Reliability Score
}
"""
Darf nicht ohne Genehmigung vervielfältigt werden:Chef-KI-Austauschkreis " HtmlRAG: Aufbau eines effizienten Systems zur verbesserten Generierung von HTML-Dokumenten, Optimierung des Abrufs und der Verarbeitung von HTML-Dokumenten in RAG-Systemen

Chef-KI-Austauschkreis

Der Chief AI Sharing Circle konzentriert sich auf das KI-Lernen und bietet umfassende KI-Lerninhalte, KI-Tools und praktische Anleitungen. Unser Ziel ist es, den Nutzern dabei zu helfen, die KI-Technologie zu beherrschen und gemeinsam das unbegrenzte Potenzial der KI durch hochwertige Inhalte und den Austausch praktischer Erfahrungen zu erkunden. Egal, ob Sie ein KI-Anfänger oder ein erfahrener Experte sind, dies ist der ideale Ort für Sie, um Wissen zu erwerben, Ihre Fähigkeiten zu verbessern und Innovationen zu verwirklichen.

Kontaktieren Sie uns
de_DE_formalDeutsch (Sie)