WEBCPM 技术解析:交互式中文长文本问答框架
背景与概述
WEBCPM (Web-based Chinese Pre-trained Model) 是近期提出的一项针对中文长文开放问答(Long-form Question Answering, LFQA)的研究成果。该研究旨在解决传统搜索引擎在回答复杂、多步骤问题时的局限性,通过构建模型与搜索引擎的多轮交互机制,完成从信息检索到答案生成的全过程。
该方案集成了 WebGPT 和 WebGLM 的部分设计思想,利用 Bing 搜索 API 作为外部知识源。研究团队招募了 23 名标注人员,通过与搜索引擎进行多轮交互,收集回答问题所需的支撑性事实数据。数据集来源于 Reddit 上的英文 QA 对转译成的中文数据。选择 Reddit 而非知乎或百度知道,是因为后者经过人工处理的答案往往过于完善,导致单轮搜索即可获取结果,无法有效模拟多轮搜索的交互难度。
基于人工标注的搜索数据,研究团队微调了一个 10B 参数的 CPM 模型,并在 LFQA 任务上取得了显著效果。
整体架构
WebCPM 的整体框架包含四个核心模块,协同工作以完成复杂的问答任务:
- Action (行为规划):决定下一步操作。
- Search (查询改写):优化搜索关键词。
- Retriever (摘要抽取):从网页内容中提取关键信息。
- Synthesis (信息聚合):整合信息生成最终答案。
以下将详细解析各模块的设计原理与实现细节。
1. Action:行为规划
行为规划模块的核心目标是让模型学习人类与搜索引擎交互的行为链路。针对交互式搜索场景,WEBCPM 定义了包括搜索、页面加载、页面下滑等在内的 10 种具体行为。
状态表示
为了预测下一步动作,系统需要将当前状态转化为文本表述,并输入到分类模型中。状态描述包含以下要素:
- 最初的问题:用户输入的原始 Query。
- 当前的搜索 Query:最近一次执行的搜索词。
- 历史 Action 序列:过去执行的操作记录。消融实验证明这是最重要的特征之一。
- 历史全部摘要内容:之前步骤中已提取的关键信息拼接。
- 上一步搜索界面:上一步页面展示的所有标题和摘要的文本拼接。
- 当前搜索界面:当前页面展示的所有标题和摘要的文本拼接。
- 剩余 Action 步骤:限制的最大操作步数。
指令样本构建
状态信息被拼接成特定的 Prompt 格式,用于训练分类模型。以下是构建输入数据的逻辑示意:
def make_input(self, info_dict, type="action"):
context_ids = ""
# 定义辅助函数处理空值
def convert_nothing(info):
return "无" if len(info) == 0 else info
context_ids += + info_dict[] +
context_ids += + convert_nothing(info_dict[]) +
last_few_actions =
past_action info_dict[]:
past_action != []:
last_few_actions += past_action
context_ids += + convert_nothing(info_dict[]) +
context_ids += + convert_nothing(info_dict[]) +
context_ids += + convert_nothing(info_dict[]) +
context_ids += + (info_dict[]) +
== :
context_ids +=
idx, k (.action2idx):
context_ids += .action2idx[k]
idx != (.action2idx) - :
context_ids +=
context_ids +=
context_ids += + convert_nothing(last_few_actions) +
context_ids +=
== :
context_ids +=
== :
context_ids +=
next_action = info_dict[]
context_ids, next_action


