Aprendizagem pessoal com IA
e orientação prática

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

Este artigo foi atualizado em 2025-01-02 14:31, parte do conteúdo é sensível ao tempo, se for inválido, por favor, deixe uma mensagem!

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**: **{Question}**

Sua tarefa é identificar o fragmento de texto do documento HTML que seja mais relevante para a pergunta dada. O fragmento de texto pode ser uma paráfrase direta de um fato ou pode ser usado como evidência de apoio para inferir esse fato.

O comprimento total do fragmento de texto deve ter mais de 20 palavras e menos de 300 palavras. Você precisa fornecer o caminho para o fragmento de texto no documento HTML.

Exemplo de saída: 
<html1><body><div2><p>Algumas mensagens importantes...

Saída. 
<html1><body><div2><p>Shinsuke Nakamura venceu a Battle Royal masculina na histórica Battle Royal de 2018. . .

 

 

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",
      "pergunta": "texto_da_consulta",
      "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
# Inicializar o avaliador
embeddings = HuggingFaceEmbeddings('BAAI/bge-base-en')
answer_relevancy = AnswerRelevancy(embeddings=embeddings)
# carregando o modelo
answer_relevancy.init_model()
# Executar a avaliação
resultados = 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. analisando HTML com BeautifulSoup
soup = bs4.BeautifulSoup(html, 'html.parser')

# 2 Chame simplify_html para simplificá-lo
html = simplify_html(soup)

# 3. chame clean_xml para limpar a marcação XML
html = clean_xml(html)

retornar html

 

 

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

Palavras do prompt de limpeza de HTML do #
CLEAN_HTML_PROMPT = """
Tarefa: limpar o documento HTML para manter as informações válidas
Entrada: documento HTML original
Requisitos:
1. remover.
- Código JavaScript (<script>标签)
- CSS样式信息 (<style>标签)
- HTML注释
- 空白标签
- 多余属性
2. 保留:
- 主要内容标签(<title>, <p>, <div>, <h1>-<h6>, etc.)
- Conteúdo do texto
- Relações estruturais
Saída: texto HTML limpo
"""
Palavras do prompt de fragmentação de HTML do #
HTML_BLOCK_PROMPT = """
Tarefa: dividir o documento HTML em blocos semanticamente completos
Entrada:
- Documento HTML limpo
- Tamanho máximo do bloco: {max_words} palavras
Requisitos:
1. manter a estrutura hierárquica das tags HTML
2. garantir a integridade semântica de cada bloco
3. registrar o caminho hierárquico do bloco
4. controlar o tamanho de cada bloco para que não exceda o limite
Saída: lista de blocos no formato JSON contendo.
{
"blocks": [
{
"conteúdo": "conteúdo do bloco",
"caminho": "caminho HTML",
"depth" (profundidade): "Hierarchical depth" (profundidade hierárquica)
}
]
}
"""

2. palavras-chave relacionadas à construção da árvore de blocos

# Palavra do prompt de pontuação do nó da árvore de blocos
BLOCK_SCORING_PROMPT = """
TAREFA: Avaliar a relevância do bloco HTML para a pergunta
Entrada:
- Pergunta: {question}
- Bloco HTML: {block_content}
- Caminho do bloco: {block_path}
Requisitos:
1. calcular a pontuação de relevância semântica (0-1)
2. considerar os seguintes fatores:
- Similaridade de texto
- Importância estrutural
- Relevância contextual
Saída:
{
"score": flutuante, pontuação de relevância #
"reason": "motivo da pontuação"
}
"""
Palavra do prompt de poda da árvore de blocos #
TREE_PRUNING_PROMPT = """
Tarefa: decidir se o bloco HTML deve ser mantido
Entrada:
- {question}
- Bloco atual: {current_block}
- Bloco pai: {parent_block}
- Lista de blocos filhos: {child_blocks}
Requisitos:
1. Analisar a importância do bloco:
- Relevância para o problema
- Função na estrutura do documento
- Relacionamento com os blocos pai e filho
2. gerar decisões de retenção/exclusão
Saída:
{
"ação": "manter/remover",
"confidence": float, nível de confiança da decisão #
"reason": "motivo da decisão"
}
"""

3. termos relacionados à recuperação de conhecimento

# Palavra de solicitação de cálculo de relevância
RELEVANCE_PROMPT = """
TAREFA: Calcular a relevância de um fragmento de documento para uma pergunta
Entrada:
- Pergunta: {question}
- Fragmento de documento: {text_chunk}
Critérios de avaliação:
1. relevância direta: a extensão em que o conteúdo responde diretamente à pergunta
2. relevância indireta: até que ponto ele fornece contexto ou informações adicionais. 3.
3. Integralidade das informações: se a resposta está completa
Saída:
{
"relevance_score": float, # Pontuação de relevância 0-1
"reason": "Motivo da pontuação".
"key_matches": ["key match 1", "key match 2", ...]
}
"""
# Answer Generation Prompt Words (Palavras do prompt de geração de respostas)
ANSWER_GENERATION_PROMPT = """
TAREFA: gerar uma resposta com base em um documento relevante
Entrada:
- Pergunta do usuário: {question}
- Documentos relacionados: {relevant_docs}
- Pontuação do documento: {doc_scores}
Requisitos:
1. sintetizar informações de documentos altamente relevantes
2. manter a precisão das respostas
3. garantir que as respostas sejam completas e coerentes
4. citar fontes quando necessário
Formato de saída:
{
"answer": "Generated answer", "sources": ["Documentation sources used"], ["Sources used"], {
"sources": ["Sources of documents used"], { "confidence": float # Confiança da resposta.
"confidence": nível de confiança da resposta #
}
"""

4. avaliação de prompts relevantes

# Responder ao prompt de avaliação de palavras
EVALUATION_PROMPT = """
TAREFA: Avaliar a qualidade das respostas geradas
Entrada:
- Pergunta original: {question}
- Resposta gerada: {generated_answer}
- Resposta de referência: {reference_answer}
Dimensões da avaliação:
1. exatidão: se as informações são precisas
2. completude: se a pergunta foi respondida por completo
3. relevância: o quanto o conteúdo é relevante para a pergunta
4. coerência: se a apresentação é clara e coerente
Saída:
{
"scores": {
"correção": ponto flutuante, "completude": ponto flutuante, {
"completude": ponto flutuante, "relevância": ponto flutuante, "coerência": {
"relevância": flutuante, { "coerência": flutuante
"coherence": float
}, "feedback": "Comentários detalhados".
"feedback": "Comentários detalhados da avaliação"
}
"""
Palavras do prompt de análise de erros do #
ERROR_ANALYSIS_PROMPT = """
Tarefa: analisar possíveis erros nas respostas
Entrada:
- Gerar resposta: {answer}
- Referência: {reference_docs}
Analisar os pontos principais:
1. verificação da precisão dos fatos
2. verificação do raciocínio lógico
3. verificação da fonte
Output:
{
"errors": [
{
"type": "Tipo de erro",
"description": "Descrição do erro", "correction".
"correction": "Correção sugerida"
}
], "reliability_score".
"reliability_score": pontuação de confiabilidade flutuante do #
}
"""
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

Chefe do Círculo de Compartilhamento de IA

O Chief AI Sharing Circle se concentra no aprendizado de IA, fornecendo conteúdo abrangente de aprendizado de IA, ferramentas de IA e orientação prática. Nosso objetivo é ajudar os usuários a dominar a tecnologia de IA e explorar juntos o potencial ilimitado da IA por meio de conteúdo de alta qualidade e compartilhamento de experiências práticas. Seja você um iniciante em IA ou um especialista sênior, este é o lugar ideal para adquirir conhecimento, aprimorar suas habilidades e realizar inovações.

Entre em contato conosco
pt_BRPortuguês do Brasil