HtmlRAG: Creación de un sistema eficaz de generación mejorada de documentos HTML, Optimización de la recuperación y el procesamiento de documentos HTML en sistemas RAG
Últimos recursos sobre IAActualizado hace 8 meses Círculo de intercambio de inteligencia artificial 12.6K 00
Introducción general
HtmlRAG es un innovador proyecto de código abierto centrado en mejorar la recuperación de la generación mejorada (RAG) para el tratamiento de documentos HTML en el sistema. El proyecto presenta un enfoque novedoso que defiende que el uso del formato HTML en los sistemas RAG es más eficiente que el texto plano. El proyecto abarca un flujo completo de procesamiento de datos, desde la reescritura de consultas hasta el rastreo de documentos HTML, pasando por un sistema de evaluación para la generación de respuestas. Admite el procesamiento de varios conjuntos de datos de gran difusión, como ASQA, HotpotQA, NQ, etc., y proporciona métricas de evaluación detalladas para medir el rendimiento del sistema. El proyecto no sólo ofrece la implementación del código fuente, sino que también incluye conjuntos de datos preprocesados y herramientas de evaluación, lo que permite a los investigadores reproducir fácilmente los resultados y realizar nuevas mejoras.
Dirección de la ponencia: https://arxiv.org/pdf/2411.02959

Propone HtmlRAG , que utiliza HTML en lugar de texto plano como formato para el conocimiento externo en el sistema RAG. Para hacer frente al largo contexto que aporta HTML, se proponen la limpieza de HTML sin pérdidas y la poda de HTML en dos pasos basada en bloques y árboles.
Limpieza HTML no destructivaEl proceso de limpieza elimina sólo el contenido completamente irrelevante y comprime las estructuras redundantes, preservando toda la información semántica del HTML original. El HTML comprimido con limpieza de HTML sin pérdidas es adecuado para sistemas RAG con LLM de contexto largo y poco dispuestos a perder información antes de la generación. Poda de HTML basada en árboles de bloques de dos pasosLa poda HTML basada en el árbol de bloques consta de dos pasos, ambos realizados sobre la estructura del árbol de bloques.El primer paso de la poda utiliza el modelo de incrustación para calcular las puntuaciones de los bloquespero (no)El segundo paso utiliza la trayectoria para generar el modelo. El primer paso se ocupa de los resultados de la limpieza HTML sin pérdidas, mientras que el segundo se ocupa de los resultados del primer paso de poda.

Cálculo de la puntuación de los bloques. El árbol de bloques se convierte en un árbol de tokens mediante un divisor, y las etiquetas HTML y los tokens correspondientes se marcan con el mismo color. Las probabilidades de generación de tokens se muestran en la esquina superior derecha, y los tokens en el recuadro discontinuo no requieren inferencia. En la esquina superior derecha del árbol de bloques se muestran las probabilidades de los bloques, que pueden deducirse de las probabilidades de los tokens correspondientes.
Ejemplo de comando:
**HTML**: “{HTML}” **问题**: **{Question}** 您的任务是从 HTML 文档中识别与给定问题最相关的文本片段。该文本片段可以是对事实的直接释义,或可用作推断该事实的支持性证据。 文本片段的整体长度应超过 20 个单词且少于 300 个单词。您需要提供该文本片段在 HTML 文档中的路径。 输出示例为: <html1><body><div2><p>一些关键信息... 输出: <html1><body><div2><p>在历史性的 2018 年皇家大战中,Shinsuke Nakamura 赢得了男子皇家大战. . .


Pérdida de información al convertir HTML a texto sin formato
Lista de funciones
- Procesamiento de consultas y funciones de reescritura para descomponer problemas complejos en subconsultas.
- Sistema de rastreo y tratamiento de documentos HTML que conserva la información de la estructura del documento
- Compatibilidad con varios conjuntos de datos (ASQA, HotpotQA, NQ, TriviaQA, MuSiQue, ELI5)
- Completo marco de evaluación con múltiples dimensiones que incluyen la corrección de la respuesta, la relevancia, etc.
- Soporte de procesamiento de conjuntos de datos personalizados, que permite a los usuarios trabajar con sus propios datos.
- Función de búsqueda Bing integrada para recuperar páginas web relevantes
- Proporcionar un sistema de puntuación detallado con diversos parámetros de evaluación, incluidas las puntuaciones ROUGE.
- Admite la integración con el marco LangChain
- Herramientas de visualización y análisis de resultados
Utilizar la ayuda
1. Configuración medioambiental
Primero hay que clonar el repositorio del proyecto e instalar las dependencias necesarias:
git clone https://github.com/plageon/HtmlRAG
cd HtmlRAG
pip install -r requirements.txt
2. Preparación del conjunto de datos
El proyecto apoya dos formas de utilizar los datos:
- Utilizar un conjunto de datos preprocesados:
- El conjunto de datos se almacena en la carpeta html_data
- El conjunto completo de datos de prueba puede descargarse de huggingface: HtmlRAG-test
- Los formatos de conjuntos de datos compatibles son ASQA, HotpotQA, NQ, etc.
- Utilizar datos personalizados:
- Prepare el archivo de consulta en formato .jsonl con cada línea conteniendo los siguientes campos:
{ "id": "unique_id", "question": "query_text", "answers": ["answer_text_1", "answer_text_2"] }
- Prepare el archivo de consulta en formato .jsonl con cada línea conteniendo los siguientes campos:
3. Flujo de funciones principales
procesamiento de consultas
- Reescritura de consultas:
- El sistema descompone automáticamente las preguntas complejas en varias subconsultas
- El resultado de la reescritura se almacena en el campo rewrite_method_result del objeto json
Tratamiento de documentos HTML
- Rastreo de páginas:
- El sistema utiliza Bing para buscar las URL pertinentes
- Rastreo automático de documentos HTML estáticos
- Conservar información sobre la estructura HTML del documento
Sistemas de evaluación
- Evaluar las configuraciones de los indicadores:
- Evaluación de la corrección de las respuestas
- Evaluación de la pertinencia de las respuestas
- Cálculo de la puntuación ROUGE
- Configuración personalizada de los indicadores de evaluación
- Utilización de herramientas de evaluación:
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álisis y optimización de los resultados
- Analizar los resultados de la evaluación utilizando las herramientas de visualización proporcionadas.
- Ajuste de los parámetros del sistema en función de los indicadores de evaluación
- Optimización de las estrategias de reescritura de consultas y los métodos de tratamiento de documentos
5. Precauciones
- Garantizar un espacio de almacenamiento suficiente para manejar los datos HTML
- Cumplimiento de los límites de uso de la API y de las tarifas
- Actualice periódicamente los paquetes de dependencias para incorporar las últimas funciones.
- Prestar atención a la corrección del formato de los datos
- Las GPU se recomiendan para acelerar el procesamiento de datos a gran escala
Nota de referencia sobre la limpieza de documentos HTML
Reglas de limpieza 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. Palabras relacionadas con el tratamiento de documentos HTML (el siguiente contenido no es el código del proyecto)
# 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. Palabras clave relacionadas con la construcción del árbol de bloques
# 块树节点评分提示词
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. Términos relacionados con la recuperación de conocimientos
# 相关性计算提示词
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. Evaluación de las indicaciones pertinentes
# 答案评估提示词
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 # 可信度评分
}
"""
© declaración de copyright
Derechos de autor del artículo Círculo de intercambio de inteligencia artificial Todos, por favor no reproducir sin permiso.
Artículos relacionados
Sin comentarios...