先说结论如果单看 OpenClaw 这个名字外部人很难直接断定它“用”或“没用”半监督学习。但从这类项目的常见训练目标和数据流反推它大概率不是纯监督管线伪标签策略也不是有没有的问题而是藏在哪个环节、以什么形式出现的问题。这篇就围绕“半监督学习”和“伪标签策略”展开聊聊这类项目里它们会以什么形态存在以及我们作为使用者或复现者该怎么从外部特征去判断。1. 先说结论半监督在 OpenClaw 里更像“隐式存在”1.1 一个项目为何会被问出“是否用了半监督”OpenClaw 这类项目通常要处理的是长尾的、真实世界的交互数据。它不像图像分类那样有大量干净的人工标注也不像机器翻译那样有天然的双语对齐语料。它的训练数据更多来自用户交互日志、仿真环境轨迹、未标注的行为片段这类数据天然就有“海量无标签 少量有标签”的结构。所以会产生这个疑问本质上是因为一个面向真实世界交互的模型如果完全靠人工标注来训练几乎不可能覆盖所有的行为空间。标注成本、隐私限制、场景多样性都会逼着训练管线去考虑半监督或者自监督的手段。OpenClaw 只要能持续从真实使用中学习就势必会在某个环节用到“伪标签”类似的机制哪怕它不叫这个名字。我见过不少项目文档里完全没提“半监督”但训练代码里有一个叫做“unlabeled_buffer”的数据流或者有一个“teacher_model”在给“student_model”生成软标签。名字不同内核一样都属于半监督的范畴。所以判断一个项目是否使用半监督不能只看论文摘要要看数据流和损失函数。1.2 从训练目标函数反推监督信号从哪里来要判断 OpenClaw 是否用了半监督最直接的方法是看它的训练目标里监督信号到底有多少种来源。如果整个模型的 loss 只来自“人类标注好的输入输出对”那它就是一个纯监督模型半监督和它没有关系。但如果出现以下几种信号来源半监督就跑不掉无标签输入的一致性正则同一段行为序列做轻度增广后模型对它的预测应该保持一致。这不需要任何人工标签只需要无标签样本本身。伪标签回填模型先对无标签数据做预测挑出高置信度的那部分把预测结果当成伪标签再混入下一轮训练。对比学习分支让模型自己学会区分“相似行为”和“不同行为”这种信号完全来自数据本身的结构。OpenClaw 如果是一个需要推理、规划、工具调用的智能体项目它的“行为序列”并不像图片那样容易做增广。所以一致性正则的具体形式可能不是简单的 dropout 两次而是“对同一任务的不同成功轨迹做表征对齐”。这类设计一旦存在就可以认为半监督已经隐式嵌入了。1.3 隐式半监督的三种常见形态结合我在类似项目里的观察OpenClaw 如果确实存在半监督成分最可能以三种形态出现。第一种是预训练阶段的对比学习。模型先在大量无标签的行为序列上做自监督预训练学习“哪些行为是连贯的、哪些状态转移是自然的”之后再接一个小的有监督微调层。这个阶段严格说属于自监督但和半监督的边界很模糊因为它同样解决“标签不足”的问题。第二种是交互过程中的 Reward Model 蒸馏。如果 OpenClaw 使用了类似人类反馈来训练奖励模型那么奖励模型本身会产出一个连续的评分信号。这个评分虽然不是完整的标签但它能对海量无标签轨迹做排序和筛选。把得分高的轨迹当作“正样本”、得分低的当作“负样本”这本质上就是一种伪标签策略。第三种是在线蒸馏的软标签。一个较大的、运行较慢的模型或者历史 checkpoint对当前模型产生软化的预测分布作为训练目标的一部分。这在持续学习系统里很常见能让小模型或新模型继承老模型的知识又不需要逐条重新标注。这三种形态都很难从项目名里看出来但在训练日志、配置文件、依赖列表里往往有迹可循。2. 伪标签策略在 OpenClaw 这类持续学习系统里的典型长什么样2.1 伪标签的生成链条从原始交互日志到置信度筛选假设 OpenClaw 确实使用了伪标签策略那么它的数据链条大概是这样的原始交互日志 - 行为切分 - 模型预测 - 置信度评估 - 阈值筛选 - 进入训练集。这个链条里最容易被忽略的是“行为切分”因为日志是连续的而模型的训练样本通常是一个个独立的“状态-动作”对或者“任务-轨迹”对。如果切分做得不好伪标签的质量再高也没用。常见的做法是使用“任务边界检测”来切分日志比如检测用户发出了新的指令、检测环境的 reset 信号、检测目标是否切换。这些信号不需要人工标注但能让无标签数据变成有意义的训练片段。切分之后模型会对每个片段给出预测。如果是序列到序列的任务伪标签就是模型生成的完整输出如果是分类任务伪标签就是一个类别。随后进入置信度评估环节这一环节决定了哪些伪标签能进入训练集。2.2 阈值怎么定动态阈值比固定阈值更现实很多初做伪标签的人会拍脑袋定一个固定阈值比如“置信度大于 0.9 的才收下伪标签”。这个做法在实验室里看起来没什么问题但放到 OpenClaw 这种持续学习系统里几乎必然会出问题。问题在于模型在不同阶段的能力不一样。训练初期模型整体置信度都偏低0.9 的阈值会过滤掉几乎所有样本导致伪标签策略形同虚设。训练后期模型可能对某些类别过度自信即使预测错了也会给出 0.95 以上的置信度固定阈值又会让错误标签大量混入。比较现实的做法是动态阈值要么按照当前模型在验证集上的表现来调整阈值要么按照置信度分位数来筛选每次只选 Top 10% 或 Top 20% 的高置信度样本。还有一种做法是设置一个“阈值记忆”让阈值随着训练轮次缓慢上升模拟课程学习的节奏。我在实际项目中更倾向于使用“分位数 最小阈值”的双重约束。比如“置信度必须大于 0.7且位于当前批次的前 20%”这样既能避免初期样本太少又能避免后期低质量标签混入。对 OpenClaw 这种数据分布经常变化的项目这个策略会比固定阈值稳得多。2.3 伪标签和真标签混在一起后怎么控制噪声即使经过了阈值筛选伪标签仍然是伪标签里面一定有噪声。所以关键问题不是“如何让伪标签完全正确”而是“如何控制噪声对训练的影响”。控制噪声有几种手段。第一种是降低伪标签样本的 loss 权重比如真标签的权重是 1.0伪标签的权重只有 0.3。如果模型发现某个伪标签和多数真标签冲突它会更倾向于相信真标签。第二种是定期清洗每训练若干个 epoch就用当前模型重新对之前加入的伪标签样本做预测把已经不再“高置信度”的样本剔除。第三种是标签平滑不把伪标签当成一个绝对正确的 one-hot 向量而是保留一部分概率给其他类别让模型不至于过度自信。这三种手段可以叠加使用。OpenClaw 这种项目里我最看重的是定期清洗因为持续学习的数据分布会漂移今天看起来正确的伪标签明天可能就成了噪声源。如果只进不出训练集里会积累大量过期标签。3. 判别一个训练管线是否真用了半监督的四个检查点3.1 检查点一数据加载器里有没有“无标签流”如果要判断 OpenClaw 这类项目有没有用半监督第一个该看的就是数据加载器。纯监督训练的模型数据加载器只会返回(input, label)对而用了半监督的模型数据加载器里通常会有两个分支一个有标签一个没标签或者同一个 batch 里既包含有标签样本也包含无标签样本。具体到代码层面可以看是否有类似labeled_iter和unlabeled_iter的结构或者batch里有没有is_labeled这样的掩码字段。如果数据加载器里压根没有无标签数据入口那接下来那些损失函数层面的半监督可能性就很小。我见过一些项目数据加载器里确实写了无标签数据流但逻辑上只是把无标签数据当成“额外的 encoder 输入”根本没有参与监督 loss。这种情况严格说也不算半监督最多算多任务训练。所以只看数据流还不够还得配合损失函数来判断。3.2 检查点二损失函数是否包含一致性正则项第二个检查点是损失函数。半监督学习最核心的公式通常长这样[ L L_{sup} \lambda \cdot L_{unsup} ]其中 (L_{sup}) 是有标签数据的监督损失(L_{unsup}) 是无标签数据上的一致性正则或者伪标签分类损失。如果训练脚本里只有 (L_{sup})没有lambda或者unsup_weight之类的超参数那基本可以断定它没有显式使用半监督。一致性正则项最典型的实现是无标签样本经过两次随机扰动分别得到两个预测分布然后用 KL 散度或者均方误差让这两个分布尽量接近。在 OpenClaw 这种项目里扰动可能是对行为序列做了截断、加噪声、打乱顺序也可能是对同一任务的不同成功轨迹做了编码器 Dropout。如果你想验证一个模型是否用了半监督最直接的方法就是把损失函数打印出来看一眼。如果 loss 曲线中后期一直有一个“附加项”在缓慢下降且它和主监督 loss 的数值量级差不多那基本就是半监督分支在起作用。3.3 检查点三训练循环里是否出现“伪标签回填”环节第三个检查点是训练循环本身。伪标签策略通常不是一个独立的模块而是嵌在训练循环里的一个阶段先跑一版模型然后用它对无标签库做推理把高置信度预测结果写回训练集再开始下一轮训练。这个流程在代码里通常表现为一个“伪标签生成”函数在 epoch 之间被调用且它的输出会落在一个有标签样本目录里。如果你看到某个模型训练流程里出现了“每隔若干个 epoch 就跑一次全量无标签推理”那几乎就是伪标签策略的铁证。有一个细节值得注意伪标签回填既可以是“硬标签”也可以是“软标签”。硬标签是直接把预测类别写进训练集软标签则是保存每个类别的预测概率。软标签对模型的信息量更大也更不容易让模型产生过度自信的偏差。但软标签会显著增加存储开销所以很多工业项目还是会选择硬标签。3.4 检查点四评估指标是否区分了有监督和无监督贡献第四个检查点比较隐蔽要看项目的评估指标和消融实验。如果一个训练管线真正用到了半监督或伪标签那它在汇报实验效果时往往会做一组“去掉伪标签”的对照实验来证明这一环节确实有用。如果项目文档里从不提“w/o 伪标签”或者“无监督损失占比”这类指标也可能是因为半监督只是辅助手段权重很低去掉后影响不大。这种情况虽然算不上经典半监督但也能说明它没有充分发挥作用。我在复盘自己的项目时就发现伪标签策略很容易陷入“看起来有提升实际是噪声带来的提升”这种假象。因为伪标签改变了训练的样本分布模型的全局 loss 可能确实下降了但分品类看某些样本占比少的类别反而被带偏了。所以只看整体指标不一定能判断伪标签策略是否真的有效。4. 如果让我来给 OpenClaw 设计伪标签策略我会怎么做4.1 第一阶段只对高置信度行为片段打伪标签假设我要给 OpenClaw 从零设计一套半监督训练方案第一阶段不会急着上复杂的阈值策略而是先搭一个“最小可用闭环”。核心思路是先把人工标注样本拿来训练一个基线模型然后让这个基线模型在无标签行为片段库上做推理只对预测置信度极高的片段打伪标签。这里说的“置信度极高”在不同任务里定义不同。如果是分类任务可以直接看 softmax 概率如果是生成任务则要看解码时的平均 log 概率。但不管哪种第一阶段的关键原则是“宁缺毋滥”哪怕只选 5% 的样本也要保证伪标签足够干净。为什么先做最小闭环因为伪标签策略的难点不在于“生成标签”而在于“判断标签是否可靠”。如果没有一个可以量化的可靠性指标后面所有迭代都是盲目的。先用高置信度把管线跑通再逐步降低置信度门槛这是最稳妥的路径。4.2 第二阶段用模型不确定性做过滤单靠 softmax 置信度远远不够。神经网络的置信度经常是失真的尤其当训练数据本身有噪声时模型可能对错误答案给出 0.99 的概率。所以第二阶段我会引入模型不确定性估计来做过滤。具体做法有两种。第一种是Monte Carlo Dropout推理时打开 Dropout多次采样得到多个预测结果然后看这些结果的一致性。如果每次预测都是同一个答案说明模型对这个样本很有把握如果答案来回变说明这个样本处于模糊地带不适合打伪标签。第二种是集成投票训练多个模型或维护多个历史 checkpoint让它们对同一个样本投票只有多数模型一致同意时才接受伪标签。这两种做法虽然会增加推理成本但对 OpenClaw 这种对标签质量要求极高的项目来说这笔开销是值得的。我实际测下来集成的过滤效果比阈值靠谱得多它能筛掉大量“高置信度但错误”的样本。还有一个细节不确定性过滤不应该只作用于伪标签生成阶段也应该作用于数据采集阶段。OpenClaw 如果能在采集时就知道当前状态的不确定性就可以优先请求人工标注那些模型“最不确定”的样本形成主动学习闭环。这样能把有限的人工标注用在刀刃上。4.3 第三阶段伪标签加入后的重训练节奏伪标签加入训练之后重训练的节奏也需要设计。最常见的错误是一股脑把所有伪标签样本混入训练集然后正常训练几十个 epoch。这样做的问题是模型会在训练过程中慢慢学会“相信”伪标签里的噪声即使初始噪声比例很低累积下来也会出问题。我更推荐的做法是分阶段注入每个训练阶段只加入一批新的伪标签同时保留上一阶段加入的伪标签。比如阶段一只用高置信度伪标签训练 20 个 epoch 后重新生成一次伪标签这次加入置信度稍低一些的新样本。这样训练集是缓慢扩展的模型不会突然面对数据分布剧变。同时重训练应该配合“旧标签清理”。模型在每个阶段结束后都要对自己之前生成的伪标签重新评分把现在置信度已经下降的样本删掉。听起来这是个很重的工程但实际实现并不复杂无非是多跑一次推理然后和存下来的评分做对比。这个“边扩边清”的节奏比一次性加入所有伪标签要稳定得多。我在之前一个类似的交互式项目里就是靠这种节奏把伪标签带来的性能提升从 2% 提高到了 8%而且没有出现明显的类别偏移。4.4 配套的评估方案怎么知道伪标签到底有没有用最后必须有一个能和“不加伪标签”公平对比的评估方案。我的做法是把整个训练管线做成“可插拔”伪标签生成模块可以选择性开启其他训练配置完全一致。然后在固定的一组评测任务上分别跑开启和关闭的版本看指标差异。有一个容易踩的坑伪标签会影响模型的收敛速度而不只是影响最终效果。开着伪标签的模型可能前几个 epoch 收敛更快但最终和纯监督模型差别不大。如果只看最终指标你会高估伪标签的作用如果只看训练曲线又会低估它。所以评估至少要记录两个维度收敛速度和最终效果。我通常还会做一组“人工抽检”来兜底。从伪标签库里随机抽几百条样本交给标注人员判断标签是否正确统计一个“伪标签接受率”。这个比率如果低于 80%说明阈值设得太宽松如果高于 95%又说明阈值太严格漏掉了太多可利用样本。80% 到 90% 之间是一个比较健康的区间。5. 半监督部分常见翻车场景与规避手法5.1 伪标签放大模型偏见伪标签策略最大的一个坑是它会放大模型已有的偏见。假设 OpenClaw 的初始标注数据里任务类型 A 占了 80%任务类型 B 只占 20%。模型经过训练后对 A 类样本的置信度天然比 B 类高。于是生成伪标签时被选中的样本绝大多数是 A 类下一轮训练时A 类样本的比例变得更高模型对 B 类的识别能力进一步下降。这个恶性循环一旦形成很难靠后期调阈值救回来。规避手法有两种。第一种是在采样伪标签时按类别做配额哪怕某个类别的置信度阈值达不到全局标准也要保证它在伪标签里的占比不低于一个下限。第二种是单独设置每个类别的置信度阈值类别样本量越少阈值放得越低让模型被迫去尝试学习那些“不太熟”的类别。很多项目翻车都不是因为伪标签本身有问题而是因为伪标签让本就不均衡的数据变得更加不均衡。所以我会在伪标签策略上线之前先做一步数据分布审计看看高置信度样本的类别分布和真实分布差多少。如果差异很大就先做类别配额再谈置信度筛选。5.2 置信度校准失效第二个常见问题是置信度校准失效。一个模型说它有 0.95 的置信度并不代表它真的有 95% 的概率预测正确。如果模型的置信度是虚高的那么基于阈值筛选的伪标签策略就会大量引入错误标签。解决办法是做一次置信度校准在验证集上统计模型预测概率和实际正确率之间的关系得到校准曲线。如果发现模型在 0.9 置信度时的实际正确率只有 0.75那就得把阈值调高或者使用温度缩放等校准方法先把置信度拉回正常范围再用于伪标签筛选。校准这件事看起来很简单但在 OpenClaw 这种多任务、多场景的项目里每个子任务的置信度分布可能都不一样全局校准不够用。我实际踩过这个坑全局校准后整体置信度看起来正常了但在某些低频场景下模型仍然是虚高置信度伪标签照样错误。后来改用“按场景分桶校准”每个场景单独算校准曲线才算解决问题。5.3 类分布偏移第三个常见问题是伪标签策略在训练过程中自身也会导致类分布偏移。随着伪标签不断注入训练集的数据分布会逐渐偏离真实环境的数据分布因为高置信度样本通常集中在模型擅长的那一小块区域而真实环境是均匀分布的。这个问题的隐蔽性在于训练集上模型表现越来越好但到了线上面对没见过的真实分布模型不升反降。规避手法是定期评估“伪标签库的分布和真实环境分布的相似度”如果相似度持续下降就不要再从当前伪标签库里采样了而要做一次重新生成。还有一个更工程化的做法限制伪标签在总训练样本里的最大占比。比如设定伪标签样本量不得超过标真人样本量的两倍。这样即使伪标签分布有偏差也不会把整个训练集的方向带偏。5.4 人工复盘机制说了这么多技术手段最后还是要落到人工复盘。半监督不是“把标注成本降到零”而是“用机器把标注成本降低再把省下来的人力投到最有价值的方向上”。所以伪标签策略一定要配一个人工复盘机制只是复盘的样本量可以少一些。我建议每周从伪标签库里随机抽取一定比例的样本做人工复核记录错误原因大致分为几类标签本身就是错、样本太模糊、类别定义不清、模型在低置信度区间强行预测。每一类对应不同的改进方向而不是笼统地“调高阈值”。复盘还有一个作用它能记录“哪些场景下伪标签特别好用”。比如某个场景下模型置信度和人工判断高度一致那以后类似场景就可以直接用伪标签另一个场景下模型频繁给出误导性标签那就要优先安排人工标注。这种经验积累比单纯调参有意义得多。回到最初的问题OpenClaw 的模型训练是否用了半监督学习、伪标签策略如果它面向的是持续交互的真实场景我倾向于认为它很难避免半监督否则数据标注成本会把项目拖垮。但“用了”和“用得好”是两回事。判断一个训练管线是否真正受益于半监督和伪标签关键不在于听它会前怎么说而在于看它的数据流里有没有无标签信息的注入损失函数里有没有额外的无监督项训练循环里有没有伪标签回填评估时有没有做可插拔的对照实验。如果你正在复现或者魔改这一类项目我建议别急着往训练代码里堆半监督模块先用一个高置信度伪标签的最小闭环跑通再逐步加入类别配额、不确定性过滤、分布审计这些机制。最后你会发现真正让效果提升的往往不是某个精巧的伪标签网络而是一套不断筛选、校验、清洗的工程闭环。