HtmlRAG: создание эффективной системы расширенного поиска HTML, оптимизация поиска и обработки HTML-документов в системах RAG

Общее введение

HtmlRAG - это инновационный проект с открытым исходным кодом, направленный на улучшение поиска расширенного поколения (RAG) подход к обработке HTML-документов в системе. В проекте представлен новый подход, утверждающий, что использование HTML-форматирования в системах RAG более эффективно, чем обычного текста. Проект включает в себя полный цикл обработки данных, начиная с переписывания запросов, просмотра HTML-документов и заканчивая системой оценки для генерации ответов. Он поддерживает обработку нескольких основных наборов данных, включая ASQA, HotpotQA, NQ и т. д., и предоставляет подробные метрики для оценки производительности системы. Проект не только предоставляет реализацию с исходным кодом, но и включает в себя предварительно обработанные наборы данных и инструменты оценки, что позволяет исследователям легко воспроизводить результаты и вносить дальнейшие улучшения.

Бумажный адрес: https://arxiv.org/pdf/2411.02959

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

Предлагается HtmlRAG, который использует HTML, а не обычный текст в качестве формата для внешних знаний в системе RAG. Чтобы справиться с длинным контекстом, привносимым HTML, предлагается очистка HTML без потерь и двухэтапное обрезание HTML на основе блочных деревьев.

 

  • Неразрушающая очистка HTML: Этот процесс очистки удаляет только полностью нерелевантный контент и сжимает избыточные структуры, сохраняя всю семантическую информацию в исходном HTML. Сжатый HTML без потерь подходит для систем RAG с длинными контекстными LLM и нежеланием терять какую-либо информацию перед генерацией.
  • Обрезка HTML на основе двухэтапных блочных деревьев: Обрезка HTML на основе блочного дерева состоит из двух этапов, оба из которых выполняются над структурой блочного дерева.Первый шаг обрезки использует модель встраивания для вычисления оценок для блоковно (не)На втором этапе с помощью пути создается модель. На первом этапе обрабатываются результаты очистки HTML без потерь, а на втором - результаты первого этапа обрезки.

 

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

Подсчет баллов блока. Дерево блоков преобразуется в дерево лексем с помощью разделителя, а соответствующие HTML-теги и лексемы помечаются одним цветом. Вероятности генерации токенов показаны в правом верхнем углу, а токены в пунктирной рамке не требуют вывода. В правом верхнем углу дерева блоков показаны вероятности блоков, которые могут быть получены из соответствующих вероятностей токенов

 

Пример команды:

**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文档检索与处理

Потеря информации при преобразовании HTML в обычный текст

 

Список функций

  • Функции обработки и переписывания запросов для поддержки декомпозиции сложных проблем на подзапросы
  • Система просмотра и обработки HTML-документов, сохраняющая информацию о структуре документа
  • Поддержка нескольких наборов данных (ASQA, HotpotQA, NQ, TriviaQA, MuSiQue, ELI5)
  • Полная система оценки с множеством параметров, включая правильность ответа, релевантность и т. д.
  • Поддержка обработки пользовательских наборов данных, позволяющая пользователям использовать свои собственные данные
  • Встроенная функция поиска Bing для извлечения соответствующих веб-страниц
  • Обеспечьте подробную систему оценок с множеством показателей, включая оценку по шкале ROUGE
  • Поддерживает интеграцию с фреймворком LangChain
  • Инструменты визуализации и анализа результатов

 

Использование помощи

1. конфигурация окружающей среды

Сначала нужно клонировать репозиторий проекта и установить необходимые зависимости:

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

2. подготовка набора данных

Проект поддерживает два способа использования данных:

  1. Используйте предварительно обработанный набор данных:
    • Набор данных хранится в папке html_data.
    • Полный набор тестовых данных можно загрузить с сайта huggingface: HtmlRAG-test
    • Поддерживаемые форматы наборов данных включают ASQA, HotpotQA, NQ и др.
  2. Используйте пользовательские данные:
    • Подготовьте файл запроса в формате .jsonl, каждая строка которого содержит следующие поля:
      {
      "id": "unique_id",
      "question": "query_text",
      "answers": ["answer_text_1", "answer_text_2"]
      }
      

3. Поток основных функций

обработка запросов

  1. Переписывание запросов:
    • Система автоматически разбивает сложные вопросы на несколько подвопросов
    • Результат перезаписи хранится в поле rewrite_method_result объекта json

Обработка документов HTML

  1. Page Crawl:
    • Система использует Bing для поиска релевантных URL-адресов
    • Автоматическое наполнение статических HTML-документов
    • Сохраняйте информацию о HTML-структуре документа

Системы оценки

  1. Оцените конфигурации индикаторов:
    • Оценка правильности ответов
    • Оценка релевантности ответа
    • Расчет баллов ROUGE
    • Индивидуальные настройки показателей оценки
  2. Использование инструментов оценки:
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. Анализ и оптимизация результатов

  • Проанализируйте результаты оценки с помощью предоставленных инструментов визуализации
  • Настройка параметров системы на основе показателей оценки
  • Оптимизация стратегий переписывания запросов и методов обработки документов

5. предостережения

  • Обеспечьте достаточное пространство для хранения данных HTML
  • Соблюдение лимитов использования API и ограничений по тарифам
  • Регулярно обновляйте пакеты зависимостей для получения новейших функций.
  • Обратите внимание на правильность формата данных
  • Графические процессоры рекомендуются для ускорения обработки крупномасштабных данных

 

Справочные материалы по очистке HTML-документов

Правила очистки 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. Обработка HTML-документа, связанного со словами подсказки (следующее содержание не является кодом проекта)

# 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. слова подсказки, связанные с построением дерева блоков

# 块树节点评分提示词
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. Термины, связанные с поиском знаний

# 相关性计算提示词
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. Оценка соответствующих подсказок

# 答案评估提示词
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  # 可信度评分
}
"""
© заявление об авторских правах

Похожие статьи

Нет комментариев

Вы должны войти в систему, чтобы участвовать в комментариях!
Войти сейчас
нет
Нет комментариев...