Aprendizagem pessoal com IA
e orientação prática
Espelho de desenho CyberKnife

HtmlRAG: Building an Efficient HTML Retrieval Enhanced Generation System, Otimizando a recuperação e o processamento de documentos HTML em sistemas RAG

Introdução geral

O HtmlRAG é um projeto inovador de código aberto focado em aprimorar a recuperação de geração aprimorada (RAG) para o processamento de documentos HTML no sistema. O projeto apresenta uma nova abordagem que argumenta que o uso da formatação HTML em sistemas RAG é mais eficiente do que o texto simples. O projeto abrange um fluxo completo de processamento de dados, desde a reescrita de consultas até o rastreamento de documentos HTML e um sistema de avaliação para geração de respostas. Ele é compatível com o processamento de vários conjuntos de dados convencionais, incluindo ASQA, HotpotQA, NQ etc., e fornece métricas de avaliação detalhadas para medir o desempenho do sistema. O projeto não apenas fornece uma implementação de código-fonte, mas também inclui conjuntos de dados pré-processados e ferramentas de avaliação, permitindo que os pesquisadores reproduzam facilmente os resultados e façam melhorias adicionais.

Endereço para correspondência: https://arxiv.org/pdf/2411.02959


HtmlRAG: criação de um sistema eficiente de geração aprimorada de recuperação de HTML para otimizar a recuperação e o processamento de documentos HTML em sistemas RAG-1

Propõe o HtmlRAG, que usa HTML em vez de texto simples como formato para conhecimento externo no sistema RAG. Para lidar com o longo contexto trazido pelo HTML, são propostas a limpeza de HTML sem perdas e a poda de HTML baseada em árvore de bloco em duas etapas.

 

  • Limpeza não destrutiva de HTMLEsse processo de limpeza remove apenas o conteúdo completamente irrelevante e comprime as estruturas redundantes, preservando todas as informações semânticas do HTML original. O HTML compactado com limpeza de HTML sem perdas é adequado para sistemas RAG com LLMs de contexto longo e uma falta de vontade de perder qualquer informação antes da geração.
  • Poda de HTML baseada em árvores de blocos de duas etapasA poda de HTML baseada em árvore de blocos consiste em duas etapas, ambas executadas na estrutura da árvore de blocos.A primeira etapa de poda usa o modelo de incorporação para calcular as pontuações dos blocosmas (não)A segunda etapa usa o caminho para gerar o modelo. A primeira etapa lida com os resultados da limpeza de HTML sem perdas, enquanto a segunda etapa lida com os resultados da primeira etapa de poda.

 

HtmlRAG: criação de um sistema eficiente de geração aprimorada de recuperação de HTML para otimizar a recuperação e o processamento de documentos HTML em sistemas RAG-1

Cálculo da pontuação do bloco. A árvore de blocos é convertida em uma árvore de tokens por um divisor, e as tags HTML e os tokens correspondentes são marcados com a mesma cor. As probabilidades de geração de tokens são mostradas no canto superior direito, e os tokens na caixa tracejada não requerem inferência. No canto superior direito da árvore de blocos, as probabilidades de blocos são mostradas, e as probabilidades podem ser derivadas das probabilidades de tokens correspondentes

 

Exemplo de comando:

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

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

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

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

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

 

 

HtmlRAG: criação de um sistema eficiente de geração aprimorada de recuperação de HTML para otimizar a recuperação e o processamento de documentos HTML em sistemas RAG-1

Perda de informações ao converter HTML em texto simples

 

Lista de funções

  • Funcionalidade de processamento e reescrita de consultas para dar suporte à decomposição de problemas complexos em subconsultas
  • Sistema de processamento e rastreamento de documentos HTML, com retenção de informações sobre a estrutura do documento
  • Suporte a vários conjuntos de dados (ASQA, HotpotQA, NQ, TriviaQA, MuSiQue, ELI5)
  • Estrutura de avaliação completa com várias dimensões, incluindo correção de respostas, relevância, etc.
  • Suporte ao processamento de conjuntos de dados personalizados, permitindo que os usuários usem seus próprios dados
  • Função de pesquisa integrada do Bing para recuperar páginas da Web relevantes
  • Fornecer um sistema de pontuação detalhado com várias métricas de avaliação, incluindo a pontuação ROUGE
  • Oferece suporte à integração com a estrutura LangChain
  • Ferramentas de visualização e análise de resultados

 

Usando a Ajuda

1. configuração ambiental

Primeiro, você precisa clonar o repositório do projeto e instalar as dependências necessárias:

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

2. preparação do conjunto de dados

O projeto oferece suporte a duas maneiras de usar os dados:

  1. Use um conjunto de dados pré-processado:
    • O conjunto de dados é armazenado na pasta html_data
    • O conjunto completo de dados de teste pode ser baixado de huggingface: HtmlRAG-test
    • Os formatos de conjunto de dados compatíveis incluem ASQA, HotpotQA, NQ, etc.
  2. Use dados personalizados:
    • Prepare o arquivo de consulta no formato .jsonl com cada linha contendo os seguintes campos:
      {
      "id": "unique_id",
      "question": "query_text",
      "answers": ["answer_text_1", "answer_text_2"]
      }
      

3. fluxo das principais funções

processamento de consultas

  1. Reescrita de consulta:
    • O sistema divide automaticamente as perguntas complexas em várias subconsultas
    • O resultado da reescrita é armazenado no campo rewrite_method_result do objeto json

Processamento de documentos HTML

  1. Rastreamento de páginas:
    • O sistema usa o Bing para pesquisar URLs relevantes
    • Rastreamento automático de documentos HTML estáticos
    • Manter informações sobre a estrutura HTML do documento

Sistemas de avaliação

  1. Avaliar as configurações dos indicadores:
    • Avaliação da exatidão das respostas
    • Avaliação da relevância da resposta
    • Cálculo da pontuação ROUGE
    • Configurações personalizadas do indicador de avaliação
  2. Uso de ferramentas de avaliação:
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. análise e otimização dos resultados

  • Analisar os resultados da avaliação usando as ferramentas de visualização fornecidas
  • Ajuste dos parâmetros do sistema com base nos indicadores de avaliação
  • Otimização de estratégias de reescrita de consultas e métodos de processamento de documentos

5 Cuidados

  • Garantir espaço de armazenamento suficiente para lidar com dados HTML
  • Conformidade com limites de uso de API e limites de taxa
  • Atualize regularmente os pacotes de dependência para obter os recursos mais recentes
  • Preste atenção à exatidão do formato dos dados
  • As GPUs são recomendadas para acelerar o processamento de dados em grande escala

 

Nota de referência sobre limpeza de documentos HTML

Regras de limpeza de 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

 

 

1. palavras-chave relacionadas ao processamento de documentos HTML (o conteúdo a seguir não é o código do projeto)

# 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. palavras-chave relacionadas à construção da árvore de blocos

# 块树节点评分提示词
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. termos relacionados à recuperação de conhecimento

# 相关性计算提示词
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. avaliação de prompts relevantes

# 答案评估提示词
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  # 可信度评分
}
"""
Não pode ser reproduzido sem permissão:Chefe do Círculo de Compartilhamento de IA " HtmlRAG: Building an Efficient HTML Retrieval Enhanced Generation System, Otimizando a recuperação e o processamento de documentos HTML em sistemas RAG
pt_BRPortuguês do Brasil