在大语言模型(LLMs)的发展进程中,搜索能力是一个重要的研究方向,阿里巴巴研究团队的ZeroSearch是一种全新的强化学习框架,能在不与真实搜索引擎交互的情况下,激发大语言模型的搜索能力。
ZeroSearch通过监督微调,将大语言模型转变为一个检索模块,这个检索模块可以根据查询生成相关文档,同时也会生成一些噪声文档。研究团队引入了课程展开机制,通过让模型接触越来越有挑战性的检索场景,逐步激发模型的推理能力。
研究人员在领域内和领域外的数据集上都进行了大量实验,实验结果显示,ZeroSearch的表现优于基于真实搜索引擎的模型,而且它无需支付API费用。ZeroSearch在各种大小的基础模型和指令微调模型上都有良好的泛化能力,支持不同的强化学习算法。
下面是一些主要的实验结果对比:
方法 | 单跳问答(NQ、TriviaQA、PopQA) | 多跳问答(HotpotQA、2Wiki、Musique、Bamboogle) | 平均得分 |
---|---|---|---|
Qwen-2.5-7B-Base/Instruct(直接回答) | 11.60、35.60、1.20 | 16.40、22.20、4.80、14.40 | 15.17 |
Qwen-2.5-7B-Base/Instruct(思维链) | 12.80、35.60、3.80 | 16.20、22.60、6.60、24.00 | 17.37 |
Qwen-2.5-7B-Base/Instruct(RAG) | 27.40、58.20、17.80 | 25.80、23.20、9.40、16.80 | 25.51 |
RA-Agent | 21.20、40.20、8.80 | 19.60、19.60、7.60、28.00 | 20.71 |
Search-o1 | 19.40、40.60、11.40 | 17.00、27.00、8.60、30.40 | 22.06 |
R1-base | 25.15、43.18、22.29 | 21.02、28.46、9.76、24.80 | 24.95 |
R1-instruct | 25.25、42.68、27.81 | 20.45、26.83、8.33、27.05 | 25.49 |
Search-R1-base | 41.51、60.53、51.02 | 32.25、36.31、16.39、28.00 | 38.00 |
Search-R1-inst | 41.46、62.17、49.80 | 34.55、34.22、19.43、33.06 | 39.24 |
ZEROSEARCH-base | 41.84、63.54、51.72 | 30.30、40.33、12.25、30.25 | 38.61 |
ZEROSEARCH-inst | 43.24、61.81、51.52 | 29.21、43.12、19.72、35.20 | 40.54 |
Qwen-2.5-3B-Base/Instruct(直接回答) | 12.40、30.60、5.60 | 16.00、19.20、4.40、16.80 | 15.00 |
Qwen-2.5-3B-Base/Instruct(思维链) | 15.00、33.60、3.60 | 16.20、18.00、3.60、12.80 | 14.69 |
Qwen-2.5-3B-Base/Instruct(RAG) | 31.60、58.00、15.20 | 24.20、23.20、8.20、15.20 | 25.09 |
RA-Agent | 15.20、28.40、6.60 | 12.60、16.60、2.60、13.60 | 13.66 |
Search-o1 | 16.60、31.00、8.20 | 14.80、22.40、5.20、22.40 | 17.23 |
R1-base | 21.46、34.02、16.29 | 22.67、28.57、5.51、7.20 | 19.39 |
R1-instruct | 17.41、33.13、18.40 | 18.90、25.66、4.69、15.32 | 19.07 |
Search-R1-base | 41.13、61.22、40.73 | 27.64、31.97、12.17、12.40 | 32.47 |
Search-R1-inst | 40.82、59.11、42.76 | 30.83、31.10、8.37、13.01 | 32.28 |
ZEROSEARCH-base | 41.21、61.49、43.99 | 31.02、33.20、12.58、14.29 | 33.97 |
ZEROSEARCH-inst | 66.19、57.29、23.39 | 24.44、30.75、9.39、19.67 | 33.02 |
LLaMA-3.2-3B-Base/Instruct(直接回答) | 16.20、29.60、7.40 | 12.60、9.20、2.00、8.00 | 12.14 |
LLaMA-3.2-3B-Base/Instruct(思维链) | 26.20、44.40、2.80 | 16.00、10.20、5.80、21.60 | 18.14 |
LLaMA-3.2-3B-Base/Instruct(RAG) | 30.00、57.60、26.40 | 23.40、17.60、9.60、11.20 | 25.11 |
RA-Agent | 22.40、36.20、11.40 | 16.60、21.00、5.60、26.40 | 19.94 |
Search-o1 | 24.20、48.40、8.80 | 19.40、17.40、6.00、32.00 | 22.31 |
R1-base | 26.63、42.31、20.16 | 22.56、28.31、7.36、15.45 | 23.25 |
R1-instruct | 32.32、52.43、25.98 | 19.51、29.21、10.34、21.95 | 27.39 |
Search-R1-base | 40.85、61.68、44.47 | 28.25、32.66、13.74、12.10 | 33.39 |
Search-R1-inst | 43.72、56.44、45.49 | 22.45、23.37、9.27、18.70 | 31.35 |
ZEROSEARCH-base | 40.28、61.87、49.80 | 30.57、35.05、14.75、14.52 | 35.26 |
ZEROSEARCH-inst | 40.52、60.41、48.99 | 20.98、27.40、6.35、13.71 | 31.19 |
从表格数据能看出,ZeroSearch在不同模型和任务上,相比其他方法有一定优势。
1、创建激活虚拟环境:使用conda创建名为zerosearch的虚拟环境,指定Python版本为3.9,然后激活该环境。
conda create -n zerosearch python=3.9
conda activate zerosearch
2、安装依赖项:安装项目所需的各种库,包括torch、vllm、wandb、serpapi等。
pip install torch==2.4.0 --index-url https://download.pytorch.org/whl/cu121
pip install vllm==0.6.3
pip install wandb
pip install serpapi
# verl
pip install -e.
# flash attention 2
pip3 install flash-attn --no-build-isolation
# sglang
pip install sglang
3、下载训练数据集:使用huggingface-cli下载训练数据集。
huggingface-cli download --repo-type dataset --resume-download sunhaonlp/ZeroSearch_dataset --local-dir ZeroSearch_dataset
4、下载模拟大语言模型:根据需求选择不同参数规模的模型下载。
huggingface-cli download --resume-download sunhaonlp/SearchSimulation_3B --local-dir SearchSimulation_3B
huggingface-cli download --resume-download sunhaonlp/SearchSimulation_7B --local-dir SearchSimulation_7B
huggingface-cli download --resume-download sunhaonlp/SearchSimulation_14B --local-dir SearchSimulation_14B
5、启动本地模拟服务器:有基于提示的模拟和基于微调的模拟两种方式。
# 基于提示的模拟
python -m sglang.launch_server --model-path Qwen2.5-14B-Instruct --host 0.0.0.0 --tp 2 --dp 2 --port 6001
# 基于微调的模拟
python -m sglang.launch_server --model-path SearchSimulation_14B --host 0.0.0.0 --tp 2 --dp 2 --port 6001
6、进行强化学习训练:以Llama-3.2-3B模型为例,设置好Google Search API密钥后,就能使用提供的脚本进行GRPO或PPO训练。
# 激活Conda环境
conda activate zerosearch
# 设置Google Search API密钥
export SER_API_KEY=your_api_key
# 基于提示的模拟
bash train_grpo.sh NUM_GPUS_PER_NODE 4 MODEL_PATH Llama-3.2-3B DATA_PATH ZeroSearch_dataset TOTAL_STEPS 203 IP localhost SEARCH_MODE simulate_prompt SIMULATION_LLM Qwen2.5-14B-Instruct START_THRESHOLD 0.25 END_THRESHOLD 0.5
bash train_ppo.sh NUM_GPUS_PER_NODE 4 MODEL_PATH Llama-3.2-3B DATA_PATH ZeroSearch_dataset TOTAL_STEPS 203 IP localhost SEARCH_MODE simulate_prompt SIMULATION_LLM Qwen2.5-14B-Instruct START_THRESHOLD 0.25 END_THRESHOLD 0.5
# 基于微调的模拟
bash train_grpo.sh NUM_GPUS_PER_NODE 4 MODEL_PATH Llama-3.2-3B DATA_PATH ZeroSearch_dataset TOTAL_STEPS 203 IP localhost SEARCH_MODE simulate_sft SIMULATION_LLM SearchSimulation_14B START_THRESHOLD 0.25 END_THRESHOLD 0.5
bash train_ppo.sh NUM_GPUS_PER_NODE 4 MODEL_PATH Llama-3.2-3B DATA_PATH ZeroSearch_dataset TOTAL_STEPS 203 IP localhost SEARCH_MODE simulate_sft SIMULATION_LLM SearchSimulation_14B START_THRESHOLD 0.25 END_THRESHOLD 0.5