介绍下今年以来深度搜索相关的一些论文~
文章目录
Search-o1
Search-o1: Agentic Search-Enhanced Large Reasoning Models
https://github.com/sunnynexus/Search-o1
简述
- 背景
LRM通常会有一个比较长的思考过程,生成很长的推理链,逐步地生成过程和最终答案。这种方式虽然提高了推理能力,但是常面临知识不足的问题,在推理链中产生不确定性,导致推理错误。论文中统计了不同方法生成的内容中“不确定性词”的频率,LRM和RAG中不确定性都很高。 - 动机
虽然已经有RAG了,但检索到的文档通常篇幅较长且包含冗余信息,直接将其输入到LRM可能会干扰原有的推理连贯性,甚至引入噪声。且RAG是单次检索,不一定能够为LRM提供足够的信息。 - 方法
提出了Search-o1,引入Agentic RAG机制和Reason-in-Documents模块来增强LRM的知识能力。使LRM在推理过程中动态地根据需要进检索。
方法
Search-o1的两个核心模块:
- Agentic RAG。和朴素的RAG不同,可以执行多次,引导模型在缺少相关知识时主动进行search。
- Reason-in-Documents。检索到的文档通常太长且冗余信息太多,模型也难以理解其中的内容。为了有效利用检索的的知识,在每次检索后会先分析检索到的文档,只把相关的信息放入推理链中。该模块是独立于模型的推理链的。
整体方法的框架如下图c所示:
- 相比普通的推理,增加了search过,避免模型乱猜,这就是论文中的Reason with Agentic RAG。这一模块使模型在需要外部知识时进行search。
- 在此基础上,增加了Reason-In-Documents,避免无用信息对推理过程的干扰,得到最终的Search-o1。
Search-o1的目标是为每个问题q生成一个全面的解决方案,包括逻辑推理链R和最终答案a,整个过程可以形式化为:
从实现来看,这两个模块都是通过prompt实现的:
- 模型生成时如果遇到不确定的知识点,则生成带查询的query,格式为
<|begin_search_query|>query<|end_search_query|>
。检测到该符号则提取query进行搜索。 - 简化搜索到的文档。通过一个单独的模块,以prompt的方式分析检索到的文档,提取关键信息,然后以
<|begin_search_result|>提炼后的检索内容<|end_search_result|>
将其拼接会主推理链中继续生成。
可以看出,整个流程主要还是通过prompt实现的,Search-o1的batch推理伪代码如下所示: