返回列表
Research14 分钟阅读

长上下文开放式睡眠报告生成:难点与训练方案

如何让模型从数周或数月的睡眠记录中找准事实、解释可能原因,并给出安全且可执行的个性化建议。

从数周到数月的睡眠记录中找准事实、解释可能原因,并给出安全可执行的个性化建议:长上下文开放式睡眠报告生成的难点、推理图教师数据、weighted DPOP 与细粒度 GRPO 训练方案。

赵郅昊 / 巫杰枫 / 张潮

长上下文开放式睡眠报告生成:难点与训练方案
目录
  1. 1. 引言
  2. 2. 问题定义
  3. 2.1 输入
  4. 2.2 输出
  5. 3. 任务难点
  6. 3.1 从长上下文表格中精确提取信息
  7. 3.2 开放式推理与准确归因
  8. 4. 训练难点
  9. 4.1 获得高质量、符合知识的 SFT 教师数据
  10. 4.2 为开放式报告设计有效奖励
  11. 5. 方案总览
  12. 6. 用推理图生成 SFT 教师样本
  13. 7. 用 weighted DPOP 定位偏好反馈
  14. 7.1 偏好样本与多层权重
  15. 7.2 优化目标与正样本约束
  16. 7.3 DPOP 阶段结果
  17. 8. 用细粒度 GRPO 优化当前模型输出
  18. 8.1 遗漏项惩罚
  19. 8.2 Token 级训练目标
  20. 9. 最终结果
  21. 9.1 未注入计数事实
  22. 9.2 注入计数事实
  23. 9.3 分项评分
  24. 10. 展望

1. 引言

想象一个周一早晨。John 被闹钟叫醒时,第一反应是:“昨晚明明睡够了,为什么还是这么累?”

他打开 Speediance 的睡眠记录。过去一个月里,他有几晚因为加班只睡了五六个小时,周末又一口气补到九个小时。有时总时长看起来正常,夜里却反复醒来。出差、晚间训练、咖啡和聚餐也穿插在这个月里。数据清楚记录了每一晚,但面对几十项指标,他仍然不知道最值得关注的模式是什么,也不知道今晚应该先改变哪一件事。

这正是自动生成睡眠报告最难、也最有价值的部分。模型需要从长时间、多维度的数据中找出重要模式,结合生活背景解释可能原因,再把复杂判断转成安全、具体、可以执行的建议。为了让模型看准数字、理清关系并说清行动,我们研究了长上下文开放式睡眠报告生成任务。

2. 问题定义

我们的任务是:根据结构化睡眠数据,生成个性化的开放式睡眠报告。“开放式”表示模型不是从固定选项中选择答案,而是需要自行组织证据、解释和建议。

2.1 输入

数据类别主要内容示例
每日用户数据人口学信息、每晚睡眠日志、工作日与休息日的作息差异上床和起床时间、入睡潜伏期、夜间清醒次数、入睡后清醒时长、小睡记录
聚合统计指标从多日记录计算出的汇总特征平均睡眠时长、少于 7 小时的夜数、周末起床时间偏移、睡眠中点偏移、睡眠效率、清醒次数、小睡次数
可选用户背景可能帮助解释睡眠变化的生活信息酒精和咖啡因摄入、生活节律、训练安排、旅行和关键日常事件

入睡后清醒时长也称为 WASO(wake after sleep onset),指首次入睡后到最终醒来之间保持清醒的总时长。

2.2 输出

报告字段目标质量要求
洞察(insight)说明最重要的睡眠模式引用准确数据,区分偶发事件和持续模式
归因(etiology)解释可能原因结合多个指标,使用有边界的因果表达
建议(recommendation)给出下一步行动安全、具体、与数据直接相关,并优先列出最重要的 1–2 项

3. 任务难点

3.1 从长上下文表格中精确提取信息

这个任务表面上是把数据转成报告,实际却需要多层能力。输入可能包含数天到数月的每日睡眠日志,以及从这些日志计算出的多种统计指标。模型必须在很长的上下文中准确定位并提取关键信息。

以计数为例,任务可能要求模型回答:“过去 N 天中,睡眠时长少于 7 小时的夜晚有多少个?”这看似只需逐日检查并累加,但在我们的测试中,前沿闭源模型 GPT-5.5 在这类任务上的准确率约为 87%。常见错误包括漏掉某些日期、误判恰好 7 小时这样的边界值,以及因上下文太长而忽略前段记录。

代码规则可以计算这些数量,并把结果直接放进提示词,但这种方法有三个根本限制:

  1. 无法覆盖所有提取需求。 精确信息不只有计数,还包括连续变量的极值、趋势变化和跨字段条件。我们无法提前为每种需求编写规则。
  2. 泛化能力有限。 真实应用中的数据结构、字段定义和异常标准都可能变化,硬编码规则很难灵活适配。
  3. 会切断推理链。 计数通常不是终点。模型还要判断连续多天睡眠不足是否形成了稳定模式,并把这个判断连接到可能原因和建议。

如果把关键特征提取全部交给规则,模型就无法在自己的推理过程中建立中间表示。这会限制后续分析的深度和质量。

3.2 开放式推理与准确归因

从原始数据中找出重要睡眠问题,远不只是“查表”。模型需要综合多个维度的证据,而不是只看一个指标。

推理较浅的模型常使用一步因果关系。例如,它看到睡眠效率较低,就直接建议“早点上床”;看到睡眠时长不足,就只建议“增加睡眠时间”。这类建议在真实场景中经常失效。

睡眠效率说明了这个问题:

睡眠效率=总睡眠时长卧床总时长\text{睡眠效率}=\frac{\text{总睡眠时长}}{\text{卧床总时长}}
情况数据表现更可能的核心问题
A只睡 4.5 小时,卧床时长正常睡眠时长不足
B已睡 7.5 小时,但卧床 10 小时可能存在睡眠碎片化、频繁醒来或浅睡比例较高

如果模型只看到“效率低”就建议增加睡眠时长,这条建议在情况 B 中不仅无效,还可能鼓励用户继续延长卧床时间,从而加重碎片化。

高质量报告需要三种能力:

  1. 多指标交叉验证。 结合睡眠时长、效率、清醒次数和 WASO 等指标,判断低效率更可能来自哪类问题。
  2. 建立有边界的因果链。 从现象追溯到可能的中间机制,如碎片化、睡眠机会不足或入睡困难,再给出对应建议。报告应说明证据支持“可能原因”,不能把相关性写成已证实的医学诊断。
  3. 做出个性化取舍。 优先推荐最关键的 1–2 项行动,而不是罗列所有可能建议。

4. 训练难点

4.1 获得高质量、符合知识的 SFT 教师数据

SFT(supervised fine-tuning,监督微调)让目标模型学习高质量输入和答案之间的对应关系。直接使用闭源教师模型的原始回答会带来两个问题。

第一,教师模型可能不稳定地使用领域知识。例如,它可能对“多少睡眠时长属于不足”或“哪些因素会影响某个指标”给出不一致的判断。

第二,推理深度不稳定。我们的实验中有些教师样本包含较深的推理路径,但这种质量不能稳定复现。概念边界的不确定性也会降低可审计性。例如,严谨的医学规则可能把 7 小时作为睡眠不足的分界点,但教师模型对 7 小时 10 分钟这类临界值可能给出不同判断。模型一旦在概念判断上摇摆,后续推理也很难保持严谨。

4.2 为开放式报告设计有效奖励

我们的训练流程先做 SFT,再做基于偏好的 weighted DPOP,最后做 GRPO 强化学习。

数学、代码或多步智能体任务常有明确且可验证的中间步骤。开放式报告没有唯一的写作顺序,而且一篇报告中的不同部分可能质量不同。如果整篇报告只得到一个总奖励,那么洞察、归因和建议中的所有 token 都会共享同一个信号。我们的早期实验显示,这种全局奖励效果很差。

核心问题是:如何把反馈送到真正出错的数字、文本片段、句子或章节,同时不误伤报告中已经正确的内容。

5. 方案总览

我们的方案连接了知识构建、教师数据生成和学生模型训练三个阶段。

  1. 从睡眠资料中提取推理图。推理图把观察、模式、假设、安全限制和建议连接成可检查的路径。
  2. 根据用户指标激活相关概念节点,把经过筛选的推理路径放进教师模型的提示词。教师模型再通过“起草—批评—修订”的多轮反思生成训练样本。
  3. 依次训练学生模型:SFT 学习高质量示例,weighted DPOP 学习对更好答案的偏好,细粒度 GRPO 直接优化当前模型采样出的报告。

图 1. 总体训练流程。推理图和教师反思过程只用于构建监督信号,不直接展示给学生模型。
图 1. 总体训练流程。推理图和教师反思过程只用于构建监督信号,不直接展示给学生模型。

6. 用推理图生成 SFT 教师样本

我们先从睡眠领域资料中抽取概念及其关系。例如,一条路径可以从“观察到多次夜间清醒”出发,连接到“睡眠碎片化模式”,再连接到几个受数据约束的原因假设,最后生成对应建议。安全节点会阻止模型把有限证据写成确定诊断。

当用户指标满足预设条件时,系统先激活初始概念,再沿图激活后续节点。教师模型得到的是与当前用户相关的推理路径,而不是一份无差别的睡眠知识清单。随后,教师模型通过多轮自我反思检查数字、推理和建议,逐步修订草稿。这个过程提高了教师样本的稳定性,也让关键判断更容易审计。

7. 用 weighted DPOP 定位偏好反馈

SFT 学习教师答案的条件分布,但训练后的模型仍可能写错数字,或只学到教师的整体风格而忽略细节。我们因此引入 weighted DPOP。它是直接偏好优化(DPO)的一种变体,并加入正样本约束。它的核心原则是:教师真正修改过的文本片段应获得更强的学习权重,整篇报告中的其他 token 不应平均分担同样的反馈。

一篇报告通常较长,而且三个主要字段承担不同任务。insight 描述模式,etiology 解释可能原因,recommendation 给出行动。即使同一字段内部,也可能同时讨论睡眠节律、睡眠时长和医学阈值。一个全局奖励会稀释局部信号,也会惩罚本来正确的句子。

7.1 偏好样本与多层权重

我们先选择错误类型,再构造 chosen–rejected 偏好对。错误类型包括数字扰动、教师完整修订、推理错误注入,以及格式或安全错误。规则根据错误类型选择掩码范围,再把权重分配到 token、文本片段、句子和章节。

图 2. Weighted DPOP 的偏好对构造与训练流程。错误越局部,掩码范围越窄;被修改内容附近的 token 权重越高。
图 2. Weighted DPOP 的偏好对构造与训练流程。错误越局部,掩码范围越窄;被修改内容附近的 token 权重越高。

对第 ii 个偏好样本,我们定义:

zi=(xi,yiw,yir,τi,Si,ai)z_i=(x_i,y_i^w,y_i^r,\tau_i,\mathcal{S}_i,a_i)

其中,xix_i 是输入提示词,yiwy_i^wyiry_i^r 分别是 chosen(较好)和 rejected(较差)回答,τi\tau_i 是偏好对类型,Si\mathcal{S}_i 是教师标出的修改片段集合,aia_i 是样本级权重。

jj 个 token 的权重为:

m~ij=maxsSi{mbase,  msection1{jsection(s)},msent1{jsentence(s)},  b(c(s))1{jspan(s)}}\begin{aligned} \tilde{m}_{ij}=\max_{s\in\mathcal{S}_i}\Big\{ &\, m_{\text{base}},\; m_{\text{section}}\mathbf{1}\{j\in\text{section}(s)\},\\ &\, m_{\text{sent}}\mathbf{1}\{j\in\text{sentence}(s)\},\; b(c(s))\mathbf{1}\{j\in\text{span}(s)\} \Big\} \end{aligned}

一个 token 可能同时属于多个层级。系统取所有适用权重中的最大值。

层级覆盖范围权重作用
背景所有回答 token0.05保留最小的全局学习信号
同章节与修改片段同属 insightetiologyrecommendation0.25关注同一语义字段
同句与修改片段位于同一句0.60强化局部上下文
修改片段教师直接标出的文本低 0.70;中 0.85;高 1.00重点修复具体错误

样本级权重 aia_i 取该偏好对中最高的错误等级:

等级aia_i典型问题
1.20数字事实错误;医疗或安全过度断言;主要原因解释错误;建议方向明显错误
1.00漏掉关键指标;建议太宽泛;缺少时间范围;重要但不致命的推理遗漏
0.80措辞、结构或轻微完整性问题

举例来说,rejected 回答写“18 个夜晚少于 7 小时”和“这证明失眠导致了这个模式”,chosen 回答则写“13 个夜晚”和“这可能反映了睡眠机会不足和作息漂移”。两个修改片段都属于高等级,所以 ai=1.2a_i=1.2

数字“13”和“18”的权重都是 1.00。同句中的其他 token 获得 0.60,同字段但与修改句无关的内容获得 0.25,未修改字段中的句子只获得 0.05。对于 numeric_perturbation 偏好对,掩码会更窄:系统只提高真正变化的数字 token 权重,不惩罚同句的其他内容。

7.2 优化目标与正样本约束

Weighted DPOP 的训练目标为:

iDPOP=ai[logσ(β(Δπ,iΔref,i))+λ[ref(yiwxi)π(yiwxi)]+]\begin{aligned} \ell_i^{\text{DPOP}} =a_i\Big[ &-\log\sigma\big(\beta(\Delta_{\pi,i}-\Delta_{\text{ref},i})\big)\\ &+\lambda\big[\ell_{\text{ref}}(y_i^w\mid x_i)-\ell_{\pi}(y_i^w\mid x_i)\big]_+ \Big] \end{aligned}

Δπ,i\Delta_{\pi,i}Δref,i\Delta_{\text{ref},i} 分别表示策略模型与参考模型对 chosen、rejected 回答的加权对数概率差。第一项让策略模型更偏好较好的回答,并降低对较差回答的偏好。

Token 权重通过加权对数概率进入目标:

logπ(y)=tm~tlogπ(yt)\log\pi(y)=\sum_t\tilde{m}_t\log\pi(y_t\mid\cdot)

第二项是正样本约束,其中 [u]+=max(u,0)[u]_+=\max(u,0)。我们曾观察到一种退化现象:chosen 和 rejected 的对数概率都下降,只是 rejected 下降得更多。偏好差虽然变大,模型对正确答案的信心却也下降。这个约束在策略模型对 chosen 回答的信心低于参考模型时生效,从而阻止这种负向优化。

7.3 DPOP 阶段结果

训练阶段洞察归因建议均分
SFT 起点4.57174.47174.67334.5722
DPOP 100 步4.60174.58004.70834.6300

8. 用细粒度 GRPO 优化当前模型输出

DPOP 是离策略方法,也就是它不直接优化当前策略模型刚刚采样的输出。它的效果还依赖已经构造好的偏好数据。DPOP 改进了报告,但各项评分与 GPT 仍有小幅差距。因此,我们从 DPOP 检查点继续进行在线策略训练:让当前模型生成报告,再由教师批评模型给出局部修订和奖励。

早期 GRPO 实验给每篇报告一个总分。这个方案在长上下文开放式报告上表现很差,损失也不稳定。于是,我们采用与 weighted DPOP 相似的局部设计。评估器先标出好的文本片段、差的文本片段和遗漏项,再把每个片段的总奖励分摊到对应 token。

图 3. 细粒度 GRPO 奖励。绿色表示正奖励,红色表示负奖励,橙色表示遗漏项惩罚,灰色表示没有局部奖励。
图 3. 细粒度 GRPO 奖励。绿色表示正奖励,红色表示负奖励,橙色表示遗漏项惩罚,灰色表示没有局部奖励。

8.1 遗漏项惩罚

missing_obligations 表示报告漏掉了必须回答的内容。理想情况下,系统应在最适合插入缺失内容的位置分配奖励。但缺失内容没有对应 token,因此无法直接定位。我们采用一个折中方案:把惩罚分配到报告结束区域和最后一句附近。

rtmiss=mαmv(cm)[qtD(m)+γqtL(m)]r_t^{\text{miss}} =-\sum_m\alpha_m v(c_m) \big[q_t^{D(m)}+\gamma q_t^{L(m)}\big]

其中,rtmissr_t^{\text{miss}} 是第 tt 个 token 因遗漏项得到的惩罚,αm\alpha_m 是基础惩罚强度,目前设为 0.85。cmc_m 是教师批评模型判断的遗漏严重度,v(cm)v(c_m) 把严重度映射为数值。

严重度cmc_mv(cm)v(c_m)相对惩罚强度
0.35最弱
0.70中等
1.00
严重1.20最强

qtD(m)q_t^{D(m)} 表示 token tt 从结束边界区域分到的惩罚份额,区域外取 0,区域内所有份额之和为 1。qtL(m)q_t^{L(m)} 对最后一句区域采用同样定义,γ\gamma 控制这部分惩罚的相对强度。

8.2 Token 级训练目标

得到 token 级奖励后,最终优化目标为:

L=k,trk,tlogπθ(yk,t)k,trk,t+ϵ\mathcal{L} =-\frac{\sum_{k,t} r_{k,t}\log\pi_\theta(y_{k,t}\mid\cdot)} {\sum_{k,t}|r_{k,t}|+\epsilon}

正奖励提高对应 token 的生成概率,负奖励降低对应 token 的生成概率。分母按奖励绝对值归一化,使不同样本中的奖励规模更容易比较。

9. 最终结果

我们比较了 SFT 检查点、从该检查点训练 100 步得到的 DPOP 模型、细粒度 GRPO 模型,以及 GPT-5.5 base。原始运行名 pre-CGD ckpt200 对应 SFT 起点,DPOP100 对应 DPOP 100 步,No-anchor GRPO ckpt65 对应细粒度 GRPO。运行名前缀只是实验配置产生的名称,不代表额外方法。

实验同时包含两种输入条件:

  • 未注入计数事实: 模型直接读取原始记录并自行计算。
  • 注入计数事实: 提示词额外提供“XX 个夜晚中有 X 个少于 7 小时”这类人工计算的事实。在另一组不启用思维链或工具调用的测试设置中,GPT-5.5 的计数准确率约为 93%,所以我们单独比较了这个条件。

9.1 未注入计数事实

模型阶段洞察归因建议均分
SFT(pre-CGD ckpt2004.57174.47174.67334.5722
Weighted DPOP(DPOP1004.60174.58004.70834.6300
细粒度 GRPO(No-anchor GRPO ckpt654.62674.64004.70674.6578
GPT-5.5 base

9.2 注入计数事实

模型阶段洞察归因建议均分
SFT(pre-CGD ckpt2004.65334.59504.71334.6539
Weighted DPOP(DPOP1004.68834.71674.74174.7156
细粒度 GRPO(No-anchor GRPO ckpt654.77334.74004.79504.7694
GPT-5.5 base4.73674.69674.80174.7450

所有表格结果都由 GPT-5.5 评分。从 SFT 到 weighted DPOP,再到细粒度 GRPO,三个报告字段和均分整体持续提升。在注入计数事实的条件下,细粒度 GRPO 的均分为 4.7694,高于 GPT-5.5 base 的 4.7450;GPT-5.5 base 在建议项上的分数略高。

我们也用 GPT-5.4 做了跨模型评分,观察到的优势更明显。但内部 API 问题阻止了 autoeval_model=gpt5.4gen_model=5.5 base 组合的完整评测。因此,未完成设置不能作为完整结论,相关趋势只作为补充观察。

9.3 分项评分

下面两张图从报告字段和评分原则两个层面展示不同最终来源的 AutoEval 分数。AutoEval 指使用评估模型按预设评分规则自动打分,范围为 1–5 分。

图 4. 各报告字段的 AutoEval 分数。
图 4. 各报告字段的 AutoEval 分数。

图 5. 各评分原则的 AutoEval 分数。
图 5. 各评分原则的 AutoEval 分数。

10. 展望

这项研究最终仍要回到一个普通的夜晚。用户读完报告后,应该能理解最近为什么总在清晨醒来,为什么周末补觉没有消除疲惫,以及今晚最值得先做哪一件事。

未来的睡眠报告需要处理更长的时间跨度,也需要结合训练负荷、压力、咖啡因、旅行和生活事件等更多线索。我们希望报告能从每天醒来后的一张“成绩单”,逐步变成一个持续理解个人变化、根据新证据修正判断,并尊重安全边界的睡眠助手。技术的价值不只在于写出像专家分析的文本,也在于帮助用户看懂数据,并把长期健康管理转成下一步可以采取的行动。

长上下文开放式睡眠报告生成:难点与训练方案 | Speediance