HtmlRAG : Building an Efficient HTML Retrieval Enhanced Generation System, Optimising HTML Document Retrieval and Processing in RAG Systems (en anglais)

Introduction générale

HtmlRAG est un projet open source innovant qui vise à améliorer la récupération des données de génération améliorée (RAG) pour le traitement des documents HTML dans le système. Le projet présente une nouvelle approche qui soutient que l'utilisation du formatage HTML dans les systèmes RAG est plus efficace que le texte brut. Le projet englobe un flux complet de traitement des données, depuis la réécriture des requêtes jusqu'à l'exploration des documents HTML, en passant par un système d'évaluation pour la génération de réponses. Il prend en charge le traitement de plusieurs ensembles de données courants, notamment ASQA, HotpotQA, NQ, etc., et fournit des paramètres d'évaluation détaillés pour mesurer les performances du système. Le projet fournit non seulement une implémentation du code source, mais aussi des ensembles de données prétraitées et des outils d'évaluation, ce qui permet aux chercheurs de reproduire facilement les résultats et d'apporter d'autres améliorations.

Adresse du document : https://arxiv.org/pdf/2411.02959

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

Propose HtmlRAG , qui utilise HTML plutôt que du texte brut comme format pour les connaissances externes dans le système RAG. Pour faire face au long contexte apporté par HTML, un nettoyage HTML sans perte et un élagage HTML en deux étapes basé sur des blocs et des arbres sont proposés.

 

  • Nettoyage HTML non destructifCe processus de nettoyage ne supprime que le contenu non pertinent et comprime les structures redondantes, en préservant toutes les informations sémantiques dans le HTML d'origine. Le HTML compressé avec nettoyage sans perte convient aux systèmes RAG avec des LLM à long contexte et une volonté de ne pas perdre d'informations avant la génération.
  • Élagage HTML basé sur des arbres de blocs en deux étapesL'élagage HTML basé sur l'arbre à blocs comprend deux étapes, toutes deux réalisées sur la structure de l'arbre à blocs.La première étape d'élagage utilise le modèle d'intégration pour calculer les scores des blocsmais (pas)La deuxième étape utilise le chemin pour générer le modèle. La première étape traite des résultats du nettoyage HTML sans perte, tandis que la deuxième étape traite des résultats de la première étape d'élagage.

 

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

Calcul du score du bloc. L'arbre de blocs est converti en arbre de jetons par un séparateur, et les balises HTML et les jetons correspondants sont marqués de la même couleur. Les probabilités de génération de jetons sont indiquées dans le coin supérieur droit, et les jetons dans la boîte en pointillés ne nécessitent pas d'inférence. Dans le coin supérieur droit de l'arbre de blocs, les probabilités des blocs sont indiquées, et les probabilités peuvent être dérivées des probabilités des tokens correspondants

 

Exemple de commande :

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

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

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

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

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

 

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

 

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

Perte d'informations lors de la conversion de HTML en texte brut

 

Liste des fonctions

  • Traitement des requêtes et capacités de réécriture pour permettre la décomposition de problèmes complexes en sous-requêtes.
  • Système d'exploration et de traitement de documents HTML, préservant les informations relatives à la structure des documents
  • Prise en charge de plusieurs ensembles de données (ASQA, HotpotQA, NQ, TriviaQA, MuSiQue, ELI5)
  • Cadre d'évaluation complet avec de multiples dimensions, y compris l'exactitude des réponses, la pertinence, etc.
  • Prise en charge du traitement des ensembles de données personnalisés, permettant aux utilisateurs d'utiliser leurs propres données
  • Fonction de recherche Bing intégrée pour retrouver les pages web pertinentes
  • Fournir un système de notation détaillé avec de multiples mesures d'évaluation, y compris la notation ROUGE.
  • Prise en charge de l'intégration avec le cadre LangChain
  • Outils de visualisation et d'analyse des résultats

 

Utiliser l'aide

1. configuration de l'environnement

Vous devez d'abord cloner le dépôt du projet et installer les dépendances nécessaires :

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

2. préparation de l'ensemble des données

Le projet soutient deux façons d'utiliser les données :

  1. Utiliser un ensemble de données prétraitées :
    • L'ensemble de données est stocké dans le dossier html_data
    • L'ensemble des données du test peut être téléchargé à partir de huggingface : HtmlRAG-test
    • Les formats de données pris en charge comprennent ASQA, HotpotQA, NQ, etc.
  2. Utiliser des données personnalisées :
    • Préparez le fichier de requête au format .jsonl, chaque ligne contenant les champs suivants :
      {
      "id": "unique_id",
      "question": "query_text",
      "answers": ["answer_text_1", "answer_text_2"]
      }
      

3. flux des fonctions principales

traitement des requêtes

  1. Réécriture de requête :
    • Le système décompose automatiquement les questions complexes en plusieurs sous-requêtes.
    • Le résultat de la réécriture est stocké dans le champ rewrite_method_result de l'objet json.

Traitement des documents HTML

  1. Recherche de pages :
    • Le système utilise Bing pour rechercher des URL pertinents.
    • Exploration automatique de documents HTML statiques
    • Conserver des informations sur la structure HTML du document

Systèmes d'évaluation

  1. Évaluer les configurations des indicateurs :
    • Évaluation de l'exactitude des réponses
    • Évaluation de la pertinence des réponses
    • Calcul du score ROUGE
    • Paramétrage personnalisé des indicateurs d'évaluation
  2. Utilisation d'outils d'évaluation :
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. l'analyse et l'optimisation des résultats

  • Analyser les résultats de l'évaluation à l'aide des outils de visualisation fournis
  • Ajustement des paramètres du système sur la base des indicateurs d'évaluation
  • Optimisation des stratégies de réécriture des requêtes et des méthodes de traitement des documents

5) Précautions

  • Assurer un espace de stockage suffisant pour traiter les données HTML
  • Respect des limites d'utilisation de l'API et des limites tarifaires
  • Mettre régulièrement à jour les paquets de dépendances pour qu'ils intègrent les dernières fonctionnalités.
  • Veiller à l'exactitude du format des données
  • Les GPU sont recommandés pour accélérer le traitement des données à grande échelle.

 

Notes de référence sur le nettoyage des documents HTML

Règles de nettoyage HTML (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

 

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

 

1. les mots liés au traitement des documents HTML (le contenu suivant n'est pas le code du projet)

# 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. les mots-clés liés à la construction de l'arbre à blocs

# 块树节点评分提示词
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. les termes liés à la recherche de connaissances

# 相关性计算提示词
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. l'évaluation des messages pertinents

# 答案评估提示词
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  # 可信度评分
}
"""
© déclaration de droits d'auteur

Articles connexes

Pas de commentaires

Vous devez être connecté pour participer aux commentaires !
S'inscrire maintenant
aucun
Pas de commentaires...