本项目为 WebGLM 的官方实现。
demo.mp4
Read this in English.
WebGLM 旨在使用 10 亿参数的通用语言模型(GLM)提供一种高效且低成本的网络增强问答系统。它旨在通过将网络搜索和召回功能集成到预训练的语言模型中以进行实际应用的部署。
- 大模型增强检索器:增强了相关网络内容的检索能力,以更好地准确回答问题。
- 自举生成器:利用 GLM 的能力为问题生成回复,提供详细的答案。
- 基于人类偏好的打分器:通过优先考虑人类偏好来评估生成回复的质量,确保系统能够产生有用和吸引人的内容。
克隆此仓库,并安装所需第三方库
pip install -r requirements.txt
安装 Nodejs。
apt install nodejs # 如果你使用Ubuntu
安装 playwright 依赖项。
playwright install
如果你的主机中没有安装浏览器环境,则需要安装。不用担心,如果是这种情况,playwright 会在首次执行时出现说明。
在搜索过程中,我们使用 SerpAPI 获取搜索结果。你需要从这里获取 SerpAPI 密钥。
然后将环境变量SERPAPI_KEY
设置为你的密钥。
或者,你可以通过 playwright 使用 Bing。你可以在 WebGLM 的启动命令行中添加 --searcher bing
以使用 Bing 搜索。
export SERPAPI_KEY="YOUR KEY"
通过运行以下命令从清华云下载检索器的权重。
你可以通过 --save SAVE_PATH
手动指定检索器权重的保存路径。
python download.py retriever-pretrained-checkpoint
在运行代码之前,请确保你的设备空间足够。
将环境变量WEBGLM_RETRIEVER_CKPT
设定为检索器权重的路径。如果你已将检索器权重下载到默认路径,可以直接运行以下命令行。
export WEBGLM_RETRIEVER_CKPT=./download/retriever-pretrained-checkpoint
你可以尝试 WebGLM-2B 模型:
python cli_demo.py -w THUDM/WebGLM-2B
或直接尝试 WebGLM-10B 模型:
python cli_demo.py
如果你想使用 Bing 搜索而不是 SerpAPI,可以在命令行中添加 --searcher bing
,例如:
python cli_demo.py -w THUDM/WebGLM-2B --searcher bing
使用与 cli_demo.py
相同的参数运行 web_demo.py
。例如,你可以通过 Bing 搜索使用 WebGLM-2B 模型:
python web_demo.py -w THUDM/WebGLM-2B --searcher bing
运行下面的命令行从清华云下载训练数据。
python download.py generator-training-data
它将自动下载所有数据,并将它们预处理成可以立即在./download
中使用的 seq2seq 格式。
请参考GLM 仓库进行 seq2seq 训练。
通过运行以下命令行,从清华云下载训练数据。
python download.py retriever-training-data
运行以下命令行来训练检索器。如果你已经在默认路径下载了检索器训练数据,可以直接运行以下命令行。
python train_retriever.py --train_data_dir ./download/retriever-training-data
你可以在 TriviaQA、WebQuestions 和 NQ Open 上重现我们的结果。以 TriviaQA 为例,可以运行以下命令行:
bash scripts/triviaqa.sh
并开始进行评测。
您可以在这里查看一些 WebGLM 实际应用场景的示例。
如果您针对您的研究使用了这个代码,请引用我们的论文。
@misc{liu2023webglm,
title={WebGLM: Towards An Efficient Web-Enhanced Question Answering System with Human Preferences},
author={Xiao Liu and Hanyu Lai and Hao Yu and Yifan Xu and Aohan Zeng and Zhengxiao Du and Peng Zhang and Yuxiao Dong and Jie Tang},
year={2023},
eprint={2306.07906},
archivePrefix={arXiv},
primaryClass={cs.CL}
}
该仓库已进行简化以便于部署。