来看一个RAG比赛方案,提出了一个名为EasyRAG的框架,用于自动化网络操作的检索增强生成。该框架旨在解决网络操作中信息检索和生成效率低、准确性差的问题。研究难点包括:如何在保证准确性的前提下提高检索和生成的效率;如何实现简单快速的部署;如何在推理过程中显著减少延迟。
比赛地址:competition.aiops-challenge.com
方法
整体包含两部分,数据处理工作流和RAG工作流
EasyRAG框架
数据处理工作流
1.数据处理与文本分割
对原始数据进行处理,解压并提取HTML文档中的文本、图像标题和路径信息。使用SentenceSplitter进行分词,初始按中文标点分割,然后根据设定的文本块大小合并(文本分割chunk使用的块大小(chunk-size)是1024,块重叠大小(chunk-overlap)是200)。为了消除路径影响,实现了一个自定义的分词类,去除路径长度的影响。
2.图像信息提取 :使用GLM-4V-9B模型从所有图像中提取信息,并通过使用PP-OCRv4模型从图像中提取文本内容,过滤掉不包含中文的图像,再根据标题和内容过滤掉无用图像。
RAG工作流
1.查询重写:在输入RAG pipline之前,使用GLM4进行查询重写,包括查询扩展和假设文档嵌入(HyDE)。使用LLM总结查询中的关键术语或其他潜在相关关键词,即利用LLM的知识进行操作和通信领域的关键词关联和总结。这被称为关键词扩展;HyDE则通过生成虚构文档来处理缺乏特异性的查询。
生成假设性文档的过程
2.粗排检索:采用BM25算法进行双路稀疏检索和密集检索。BM25算法基于词频(TF)和逆文档频率(IDF),并结合文档长度信息计算文档与查询的相关性。密集检索使用gte-Qwen2-7B-instruct模型,通过余弦相似度匹配召回相关文本块。
3.重排 :使用bge-reranker-v2-minicpm-layerwise模型(模型在中文和英文中都表现出高级的排名性能,并包括附带工具代码,可以方便地针对特定场景进行微调。在实际的推理(inference)过程中,重排器是耗时的部分。因此,EasyRAG框架探索了使用不同层数的模型来平衡推理时间和排名准确性。例如,可以选用28层或40层的模型,根据资源限制和性能需求进行选择 。)进行LLM重排,结合知识路径和文本块进行相似度排名,返回前K个最高排名的文本块。
步骤:
- 文档扩展:在重新排名阶段,框架会将知识路径与每个文本块进行拼接,形成扩展后的文档,这些文档将用于检索。
- 文本处理:将查询(query)与粗排阶段返回的k'个文本块结合起来,形成k'个查询-文档对。这些查询-文档对被输入到分词器中,生成LLM的输入数据。
- 相似性排名:将输入数据喂给LLM,获取查询与每个文本块的重新排名分数。根据这些分数对文本块进行排序,通常返回分数最高的k个(通常是6个)文本块作为最终结果。
4.多路排序融合
设计了多种排序融合策略,包括简单合并和互惠排名融合(RRF)。简单合并直接合并多路检索结果,而RRF则通过对多路检索结果的排名取倒数和来计算融合分数。
- 粗排合并:在粗排阶段,框架会从多个检索路径(例如,基于文本块的检索和基于路径的检索)中获取一组候选文档。这些文档集合会被去重并合并成一个单一的文档集合,然后这个集合会被传递给重排器(Reranker)进行进一步的排序。
- 重排融合:在每个检索路径上完成粗排和重排后,框架会采用特定的融合策略来整合这些路径的结果。
融合策略 :
- (1)使用RRF在粗略和精细排名后合并结果。
- (2)将每条路线中的文本块输入到LLM中,以获得各自答案,并选择较长的答案作为最终答案。
- (3)将每条路线中的文本块输入到LLM中,以获得各自答案,并直接连接所有路线中的答案。
小结:实际应用中,通常更倾向于使用第一种重排融合策略,即对每个路径分别进行重排,然后使用RRF融合结果作为最终输入到LLM的上下文 。这种方法在实践中是有效的,因为它能够在保持较高准确性的同时,提高处理效率。
5.LLM答案生成与优化:将重排后的前K个文本块内容拼接成上下文字符串,再与问题一起输入GLM4生成答案。设计了答案整合提示,允许LLM利用Top1文本块补充和优化答案。
相关问答提示模版:
Markdown 格式问答模板:
## Objective
Please, based on the information from
k private domain documents about 5G
operational maintenance, answer the given
question.
## Requirements
1. You may itemize your answer; be as
detailed and specific as possible.
2. Do not merely repeat information from
the context.
3. Do not use your own knowledge; rely
solely on the content from the context
documents.
## Context
{context_str}
## Question
{query_str}
## Answer
思维连问答模版:
Context information as follows:
----------
{context_str}
----------
Please answer the following question based
on the context information rather than your
own knowledge. Think step by step, first
provide an analysis process, then generate
an answer:
{query_str}
Answer:
聚焦问答模版:
Context information as follows:
----------
{context_str}
----------
Please answer the following question based
on the context information rather than
your own knowledge. You may itemize
your answer. Document 0’s content is
particularly important, consider it carefully.
If the context does not contain relevant
knowledge, you may respond with ’uncertain’. Do not simply restate the context
information:
{query_str}
Answer:
答案整合模板:
Context:
----------
{top1_content_str}
----------
You will see a question and a corresponding
reference answer
Please, based on the context knowledge and
not your own knowledge, supplement the
reference answer to make it more complete
in addressing the question
Please note, strictly retain every character
of the reference answer and reasonably
integrate your supplement with the reference answer to produce a longer, more
complete answer containing more terms
and itemization
Question:
{query_str}
Reference answer:
{answer_str}
New answer:
参考文献
-
EasyRAG: Efficient Retrieval-Augmented Generation Framework for Automated Network Operations,https://arxiv.org/pdf/2410.10315v2