做时间序列项目的朋友应该都有过这种经历:模型在训练集上效果漂亮,一换到新设备、新工况、新场景,准确率就像坐滑梯一样往下掉。更头疼的是,以前做域适配还能把源域数据拉过来一起对齐,现在出于数据隐私、合规或者传输成本的原因,原始数据根本带不出来,手头只有一个训练好的源模型。这就是无源域适配(Source-Free Domain Adaptation)要解决的问题,而多变量时间序列在这个设定下难度还要再翻一翻。KDD 2025 上有一篇名为 TERSE 的工作,专门针对这个场景做文章,核心思路是同时建模时间依赖和空间(变量间)依赖。这篇博文我就从问题本身出发,把无源域适配为什么难、TERSE 怎么拆解时空依赖、以及这类方法落地时要注意哪些坑,一次说清楚。
这篇内容适合三类读者:正在做故障诊断、行为识别、交通预测等时序任务并且被数据漂移困扰的工程师;想快速跟踪 KDD 2025 投稿趋势的研究生;还有那些已经试过 TENT、SHOT 等无源适配方法、但发现直接套到自己数据上效果不佳的实践者。看完你至少能回答一个问题:TERSE 这类"时空双分支 + 无源适配"的设计,到底比"把图像上的适配方法硬搬到时间序列"强在哪里。
1. 无源域适配到底在解决什么:一场只有模型、没有数据的迁移
先把这个场景描述清楚,因为它和大部分人熟悉的"迁移学习"还不完全一样。传统迁移学习或者说传统域适配,默认源域数据是可用的,做特征对齐的时候可以同时看源域和目标域的分布,然后找到共享的特征空间。但无源域适配把源域数据这条通路直接切断——你手里只有源域训练好的模型,目标域数据是拿到了,可没有任何标签。
1.1 传统域适配的"源数据依赖"痛点
我在实际项目里遇到最多的典型情况是这样的:给某风场的机组做故障预警,历史数据全部来自 A 风场,模型训练得非常漂亮,误报率很低。现在要部署到 B 风场,B 风场的机型略有不同、传感器安装位置不同、环境温度湿度范围也不一样,模型直接过去,第一天就开始误报。按老思路,最稳妥的做法是把 A 和 B 的数据放在一起做域适配,重新对齐分布。但问题来了,A 风场的数据可能属于另一个业务部门甚至另一家公司,合规上根本不允许拷出来。这时候传统域适配就卡住了。
更普遍的场景在医疗和物联网设备上。医院 A 的心电数据训练出的疾病筛查模型,要部署到医院 B,但医院 A 的数据涉及患者隐私,只能把训练好的模型参数或者推理服务封装好带过来。类似的情况在工业界也越来越多。这就让一个很实际的需求浮出水面:我能不能只用"目标域的无标签数据 + 一个冻结的源域模型",完成模型的自我纠偏?
1.2 为什么只给模型不给数据是更真实的部署场景
可能有人会问,既然模型都能带过去,为什么数据不能带?这就要说到现实约束了,不是技术上的约束,而是业务和合规上的。数据中包含的敏感信息、数据所有权归属、甚至单纯的数据体量,都会让"物理搬运数据"变得不现实。一个中等规模的风场数据集,原始传感波形动辄几个 TB,传输和存储成本都不低。而模型经过压缩之后,可能只有几百 MB,分发起来非常方便。
从模型分发的角度看,无源域适配的设定天然贴合"模型即产品"的趋势:你可以在私有数据上训练模型,只发布模型,不发布数据。目标域设备的厂商拿到模型之后,用自己采集的无标签数据做适配,既保护了源域数据方的商业利益,也提升了模型在本地的表现。TERSE 这类工作瞄准的就是这个缝隙,在"源模型可用、源数据不可用"的约束下,把模型的性能重新拉回来。
1.3 无源域适配的完整问题定义
这里我把术语收敛一下,方便后面展开。给定一个在源域数据上预训练好的模型 F_s,它通常包含特征提取器 G 和分类器 H。无源域适配的目标是:在无法访问源域数据 X_s 的情况下,仅仅利用目标域的无标签数据 X_t,通过某种自适应策略更新模型参数,使模型在目标域上的预测性能尽量接近"理想情况下用目标域标签微调"的水平。
这个设定下最常见的三条技术路线是:熵最小化、伪标签自训练、一致性正则。熵最小化是让模型对目标域样本的预测越来越自信;伪标签自训练是用模型自己的预测当监督信号;一致性正则是对输入做扰动后要求输出保持稳定。TERSE 本质上也是在这个大框架下做文章,只不过它重点处理了"多变量时间序列"这种特殊结构带来的额外困难。
2. 多变量时间序列为什么让无源适配格外棘手
如果你之前接触过无源域适配,大概率见到的实验都是图像分类:Office-Home、VisDA、DomainNet,输入是一张张独立的图片。这些任务里,模型可以把每个样本当作独立同分布的个体来处理,适配算法也基本都是围绕"单样本预测"设计的。但多变量时间序列完全不是这么回事。
2.1 图像上顺手的SFDA套路,为什么搬到时序就失灵
图像领域的无源域适配方法,比如 TENT 通过更新 BatchNorm 统计量来适配目标域,SHOT 通过信息熵最小化和伪标签来对齐特征空间,它们在图像上很有效。但把 TENT 直接搬到多变量时间序列上,我见过不少翻车案例。原因也很直接:时间序列的分布漂移并不主要体现在单个时间点上,而是体现在时间维度的动态模式和变量之间的联动关系上。
举一个我调试过的问题。一段人体活动识别的三轴加速度数据,源域是腰部佩戴传感器采集的,目标域是手腕佩戴采集的。单纯看某个时间点的加速度数值,两个域的分布差异并不大,但加速度信号的周期性、幅值波动模式、以及三轴之间的相关结构完全不同。TENT 这类方法只调整归一化统计量,本质上是在修特征分布的"均值方差",根本没有能力修动态模式的偏移。这就是为什么图像上的无源适配方法在时序上表现平平,不是它们不优秀,而是它们的假设不匹配数据的结构。
2.2 时间依赖:漂移藏在动态里,不在静态特征上
多变量时间序列的每个变量本身是一条随时间变化的轨迹,它的特征往往要放在时间上下文里才有意义。同样是传感器读数的波形,它的趋势、周期、突变频率才是故障识别的关键。无源适配如果只考虑"样本点",就会丢掉这些信息。
具体来说,时间依赖可以从几个层次去理解。首先是短期依赖,当前时刻的值和前几个时刻的值高度相关,比如工业过程中的温度惯性;其次是长期依赖,比如交通流量每天呈现出早晚高峰的周期性规律,这种周期结构可能在目标域里发生了相位偏移或者幅度缩放。域漂移可以发生在任意一个层次上。TERSE 这类工作的价值在于:适配的时候不是拿"孤立的时间步"去对齐,而是拿"一段时序的完整动态模式"去对齐,同时再用空间维度补充变量间的交互信息。
2.3 空间依赖:变量间的联动关系同样会"说变就变"
多变量时间序列的"多变量"三个字有时候会被低估。很多实践者会把 P 个变量当成 P 条独立的时间序列分开处理,每一条单独提取特征,最后拼起来。但这个处理方式忽略了一个关键点:变量之间往往存在依赖关系,而且这个依赖关系本身就可能发生域偏移。
我用一个工业场景来说明。监测一个压缩机系统,传感器同时记录温度、压力、振动、电流。正常情况下,压力升高时温度也会跟着升高,振动频率和电流负载之间有强相关。当设备老化或者更换了某个部件之后,变量与变量之间的这种联动强度、滞后时间、甚至方向都可能变化。换句话说,源域里学到的"变量 A 与变量 B 强相关"这个知识,在目标域里可能不再成立。如果模型不能动态地重新建模变量间依赖,适配就无从谈起。
这就是标题里说的"空间依赖"在多变量时间序列语境下的含义。这里的"空间"并不一定指物理空间位置,更多是指变量维度上的依赖结构,你可以把它理解成一张以变量为节点、以相关性为边的图。TERSE 在这张图上做适配,本质上就是希望在无源场景下,把这种变量间关系也重新对齐到目标域的分布上。
3. TERSE 怎么同时建模时间和空间依赖
理解了问题,再看 TERSE 的方法设计就比较清晰了。从 KDD 2025 公开的信息和标题传递的核心来看,TERSE 想解决的问题一目了然:已有的无源域适配方法没有充分挖掘多变量时间序列的时空结构,模型既要知道"过去的趋势如何延续"(时间依赖),也要知道"变量之间如何相互影响"(空间依赖),并且这两者需要在一个统一的框架里被同时优化。
3.1 从标题拆解方法的最小出发点
TERSE 这个名字本身就很讲究,terse 有"简洁、精炼"的含义。但放在这里我更愿意把它理解成"Temporal-Spatial"的组合词,暗示这套方法的时间与空间双分支设计。标题里"同时建模"这四个字是关键,它意味着 TERSE 并不是简单地把时间编码器和图编码器串联起来,也不是把空间特征作为时间特征的辅助输入,而是让两种依赖在模型内部相互支撑。
时间依赖的建模很好理解,需要捕捉长期周期、短期趋势、以及局部突变。空间依赖的建模则要回答一个问题:在目标域没有标签的情况下,怎么知道变量之间应该建立什么样的连接?如果直接源域里变量之间的固定关联结构,肯定不行,因为域漂移恰恰可能发生在关联结构上。
3.2 时间分支与空间分支是怎么分工的
按照这类时空建模工作的通用设计,TERSE 大概率会把模型拆成一个时间分支和一个空间分支,相当于一个双通道编码器。时间分支处理的是每个变量的时间切片,也就是从 T 个时间步、P 个变量构成的时间窗口里,沿着时间轴提取动态特征。它要回答的问题是:这个序列在过去一段窗口内的变化规律是什么样的?是上升趋势、周期性波动、还是突发脉冲?
空间分支则沿着变量维度做特征提取,把 P 个变量在当前窗口内的表征集中起来,通过变量之间的注意力机制或者图卷积,更新每个变量被其他变量影响后的特征。它要回答的问题是:当压力上升的时候,温度、振动、电流各自应该发生什么变化?它们之间的这种联动关系在当前目标域里是否还成立?
举个具体例子帮助理解。假设输入是一个 32 时间步、8 个变量的窗口。时间分支会对每个变量独立处理,比如对第 1 个变量的 32 个时间步做自注意力,得到它的时序特征;空间分支会把这 8 个变量在某个时间位置的特征放在一起,通过注意力机制计算变量之间的互相影响,更新每个变量的表征。两个分支最后输出的特征会被融合,进入分类器。
3.3 融合设计:时间与空间不是两条平行线
这个部分是我最感兴趣的地方。如果时间分支和空间分支只是各自提取特征然后拼接,那这件事的价值就大打折扣了。因为时序数据的特性决定了,变量之间的依赖关系可能随着时间变化而变化——某些工况下 A 和 B 强相关,另一些工况下又变弱了。如果空间分支用的是"窗口级"的静态变量关系,就捕捉不到这种演化。
TERSE 的"同时建模"应该体现在时空交互上。一种常见的设计是交叉注意力:时间分支的输出作为 query,空间分支的输出作为 key 和 value,让时间信息去动态选择"当前时刻哪些变量更重要";反过来,空间分支的输出也可以去调制时间分支的编码,让模型知道"当前这种变量关系下,时序演化应该是什么样的"。两个分支通过这种交互机制互相校准,而不是各干各的。这个交互过程相当于给模型加了一条规则:你在目标域上适配的时候,不仅要让每个变量的动态模式对齐,还要让变量之间的联动模式也对齐,两条约束互相验证。
另外一个容易忽略的细节是窗口长度。适配阶段和训练阶段的窗口长度要保持一致,而且如果源模型是在固定长度窗口上训练出来的,适配时最好也用相同长度切窗,否则时间分支的归一化和位置编码都会出问题。这个问题我后面讲工程坑的时候还会提。
3.4 适配阶段怎么把时空依赖变成可优化的损失
无源域适配的最终落脚点还是损失函数。TERSE 的优化目标从高层面看,依然遵循无源适配的经典思路,但在损失设计上会额外引入时空一致的约束。具体拆开大致是三块:
第一块是熵最小化损失。模型对目标域样本的预测分布的熵要被压低,让预测结果变得"斩钉截铁"。这个约束是很多无源适配方法都在用的,相当于告诉模型:目标域样本总该属于某个类别,不要含糊。
第二块是伪标签自训练损失。用源模型在目标域上跑一遍预测,挑出置信度高的样本,把它们的预测当作伪标签,然后用这些伪标签去监督模型更新。这块会被设计成分类交叉熵,让新模型沿着源模型已经学会的判别方向继续收敛。
第三块是时空一致性损失。这是 TERSE 这种时空结构方法比较有特色的地方。具体做法可以这样理解:对同一个时间窗口做两种不同的扰动,比如对时间分支做时间切片、对空间分支做变量掩蔽,然后要求两次扰动后得到的特征表示尽量一致。这个策略用在无源适配里很妙,它并不需要任何外部标签,本质上是在告诉模型:时空依赖结构不应该因为这种局部扰动而发生剧烈变化,你学到的表示要足够鲁棒。这个损失能在没有监督信息的情况下,把时间依赖和空间依赖的联合结构"钉"在目标域上。
我补充一句,分布式对齐这类策略在无源设定下并不好做,因为缺少源域数据来估计源分布。TERSE 走的路子很务实,不强行去拟合源域的完整分布,而是通过伪标签和一致性约束,让目标域自身的结构被充分挖掘。从这个意义上说,它更像是一个"自适应学习"框架,而不是传统意义上的"分布对齐"框架。
4. 无源适配的训练闭环:伪标签、一致性、熵最小化
有了模型结构之后,整个训练流程也需要仔细设计。无源域适配最危险的陷阱就是"越训越糟":早期伪标签错误多,错误被模型当成正确信号学进去,然后形成恶性循环。TERSE 这类方法能稳住效果,很大程度上靠的是流程上的纪律性。
4.1 第一步:用冻结的源模型生成目标域伪标签
整个适配过程的第一步不是马上更新模型,而是先用源域的冻结模型在目标域上做一次完整的推理,拿到每个样本的预测概率。这一步的关键是:先不要动任何参数,只做前向传播。这样可以得到一个相对稳定的"初始状态",后续的适配效果都是从这个状态出发的。
伪标签的生成方式直接决定后续训练质量。常见的做法是保留概率最大值和对应的类别,当最大概率超过某个阈值(比如 0.7 或者 0.9)时,这个样本才有资格进入自训练集合。阈值太低会把大量噪声样本放进来,阈值太高又会剩下太少样本,导致模型可学习的信息不足。TERSE 的处理思路通常还会结合时序特点:相邻时间窗口的伪标签应该平滑,如果一个样本被预测成 A 类、它前后几个窗口都被预测成 B 类,那这个样本的伪标签可信度就要打问号。这种"时序平滑约束"是纯图像方法不太具备的。
4.2 第二步:时空增强与多视图一致性
伪标签提供了粗粒度的监督信号,但模型还需要一个更细的约束来学习目标域的结构。这就是一致性正则发挥作用的环节。对目标域窗口做增强,生成两个或者多个视角,分别输入模型,要求它们的输出分布彼此接近。
我来说说增强策略的选择。时间维度上,可以做窗口内的随机裁剪或缩放,要求模型对这种时间尺度变化不敏感;可以做时间反转或时间片段洗牌,但这种增强要小心,如果任务本身对时间顺序敏感,反转就相当于制造了错误样本。空间维度上,可以做变量掩蔽,随机把部分变量的值替换成零或者噪声,要求模型在缺少若干传感器信息的情况下依然保持一致的判断。这些策略在图像里对应的就是随机裁剪、翻转、颜色抖动,在时序里需要重新设计。
TERSE 对时空增强还有一个细化的考量:时间增强和空间增强应该尽量解耦。时间增强主要考验动态建模能力,空间增强主要考验变量依赖建模能力。如果两者混在一起做,模型出了问题你根本不知道是哪个分支没学好。把两种增强分开构造多视图,在做消融实验的时候也能更清晰地定位每个分支的贡献。
4.3 第三步:置信度筛选与逐步更新的节奏
整个训练过程的另一个重点是更新节奏。无源适配最好不要一开始就把所有目标域样本全部丢进去做自训练,因为初始阶段模型对目标域的犯错率很高,这时候强行使模型去拟合错误的伪标签,后面很难纠正回来。比较好的做法是分阶段推进:先用高置信度样本做预热,让模型在目标域上站稳脚跟,然后逐步降低伪标签筛选的阈值,把更多样本纳入训练。
这个"由易到难"的策略其实很像课程学习。我在实际调参时发现,预热阶段的迭代次数不需要太多,但如果跳过预热直接进入全量伪标签训练,模型的性能衰减是非常明显的。另外一个很容易被忽略的细节是学习率:适配阶段的学习率应该比预训练阶段小一个到两个数量级,因为源模型已经具备不错的表征能力,微调幅度太大反而会破坏原有知识,这在无源场景下尤其致命,毕竟没有源数据可以让你"补课"。
4.4 为什么这三步缺一不可
把熵最小化、伪标签、一致性正则放在一起,它们其实是互补的。熵最小化让预测变得自信,但如果自信的方向是错的,反而有害;伪标签自训练提供了一个来自源模型的"初始方向感",但单靠它容易固化错误;一致性正则不关心预测的具体类别,只关心表示是否稳定,它能从根本上缓解错误累积。TERSE 的做法是把这三股力量绑在时空框架里,让它们在相同的特征空间里互相约束。
有一个要点容易被忽视,就是时空一致性损失和伪标签损失之间的权重平衡。如果一致性约束过强,模型会让所有目标域样本的表示趋同,造成特征坍缩,导致分类性能大幅下降。这种情况我在调试类似方法时踩过,特征分布可视化之后发现所有类别都挤在一个点上,非常恐怖。正确的做法是让一致性约束保持在"语义保持"层面,同时用伪标签分类损失来保证类别可分。
5. 读懂KDD文章里的实验:数据集、对比方法和指标
看学术论文不能只盯着方法的名字,实验设计才是判断方法是不是"真有用"的试金石。TERSE 作为一篇 KDD 2025 入榜的论文,实验设计大概率会覆盖多个多变量时间序列基准数据集,并和现有的无源域适配方法做对比。这个环节我就从论文读者的角度聊聊怎么看这类实验,避免你把"论文效果好"误当成"我也能复现同样效果"。
5.1 多变量时序SFDA的常用基准数据集
多变量时间序列领域有几个公开数据集是这类论文的常客。人体活动识别数据集(如 UCI-HAR、HHAR、WISDM)经常被用来做跨用户、跨设备、跨位置的域迁移,传感器是加速度计和陀螺仪,变量维度不高,但时间结构很清楚。工业传感器的数据集(如轴承故障、电机电流)可以构造跨工况的适配任务,比如源域是正常负载,目标域是不同转速。还有一些公开的电力负荷和交通流量数据集,适合做回归类任务的域适配,这些状态空间平滑,变量间相关性强,非常适合验证空间依赖建模能力。
对这类实验,我的一个观察是:数据集的选择本身就在给方法出"定向考题"。如果论文声称空间依赖建模有帮助,那么实验里多少应该有一个任务,它的域漂移主要发生在变量相关结构上,比如跨传感器的迁移,源域用一个传感器布点,目标域用另一个位置的传感器。如果所有数据集都是同一个传感器在同一个位置上切换用户,那空间依赖的贡献就不容易体现出来。
5.2 对比方法和消融实验怎么看
无源域适配领域的基线方法其实不算多,常见的包括:直接使用源模型不做任何适配(Source-Only),这是性能下界;TENT 这类调整归一化层的方法;SHOT 这类基于信息熵和伪标签的方法;以及几个新的针对时间序列设计的无源适配方法。一篇好论文的对比表通常会出现这三类方法,而且应该报告多次运行的平均值和标准差,因为无源适配本身带有随机性,单次结果说明不了问题。
消融实验是判断各组件贡献的关键。对 TERSE 来说,我期待的消融至少有这四组:去掉时间分支,退化成纯空间建模;去掉空间分支,退化成纯时间建模;把两个分支的融合方式改成简单拼接(验证交叉注意力是否真的有增益);把时空一致性损失去掉(验证这个损失是否真的在无源适配中起效)。如果一个组件被删掉后性能没有明显下降,那它存在的必要性就存疑。看论文的时候不妨带着这个态度去审查。
5.3 比数字更重要的是适配效率曲线
这里我想多说一句。表格里的最终准确率当然重要,但无源适配场景还有一个更关键的指标:目标域适配步数-性能曲线。也就是说,模型在目标域上每迭代一定数量的步数,性能提升到多少。这个问题在真实工程里非常现实,因为目标域的适配预算往往有限,你不能让模型跑几百轮迭代才收敛,部署环境的算力资源是有限的。
TERSE 如果在论文里展示了这个曲线,而且显示出"只需少量迭代步数就能越过 Source-Only 并接近源模型在上限微调的效果",那它的实际价值就比单纯的高分还要大。读者在看这篇论文时,建议特别留意实验部分的图表有没有这类分析,它比一个孤立的精度数字更有说服力。
6. 把TERSE这类方法搬进自己项目前,我建议先想清楚几件事
最后聊点落地视角的东西。我不主张看到一个 KDD 论文就盲目往自己项目里套,那样大概率会碰一鼻子灰。先把前提条件和工作习惯理清楚,再决定要不要用 TERSE 这种路线。
6.1 适配值得做的前提:源模型要够好,域间差异要有规律
第一个前提是你的源模型真的够好。如果源模型在源域测试集上的准确率就只有 70%,在目标域上直接掉到 50%,那无论用什么无源适配方法都很难把它救回 70% 以上。算法能做到的适配是"在已有知识的基础上校准",而不是"凭空创造知识"。我见过一个团队拿着效果极差的基座模型强行做无源适配,折腾了一个月,最后结论居然是方法没用——其实是基座模型本身就积累了大量错误先验。
第二个前提是域间差异要有结构化的规律。无源适配能够奏效的理论基础是存在一个共享的表征空间,源域和目标域在这个空间里是有交集的。如果目标域和源域的数据根本是不同的东西,比如源域是心电图,目标域是股票价格,那就算了,神仙来了也白搭。换句话说,适配不是万能药,它解决的是"同一类数据、但分布有所偏移"的问题,不是"完全不同的数据"的问题。
6.2 工程落地的三个隐蔽坑
第一个坑是伪标签置信度阈值调不好。阈值设太高,参与训练的样本太少,模型几乎没有更新;阈值设太低,模型被大量错误标签带偏。我建议的做法是先在验证集(如果有少量标注)上扫一遍阈值,如果没有标注,就观察每个阈值下伪标签类别的分布,如果某一类占据了异常高的比例,大概率是阈值太宽松,把其他类别的样本都错误标记成了这一类。
第二个坑是增强策略的强度。时间增强里的随机缩放和裁剪,如果尺度变化太剧烈,模型会把"时间拉伸后依然属于原类别"当成重要规则,但实际上这种不变性不一定是任务需要的。比如在故障诊断中,故障脉冲的持续时间本身就是判别的关键特征,如果增强把时间轴随意拉伸,模型学到的东西就会失真。增强策略必须和你的任务语义对齐,不能直接抄论文里的超参。
第三个坑是空间建模的计算开销。P 个变量做两两注意力,复杂度是 O(P^2),当变量数量达到几百个时,这个开销在训练阶段还可以忍受,适配阶段如果设备资源紧张就会非常吃力。如果遇到高维变量场景,建议先把变量分组,或者用聚类的方式将相关变量聚合,降低计算压力,而不是直接套完整空间分支。
6.3 小规模验证的建议流程
如果你想在自己的数据集上试一试 TERSE 的思路,我建议按下面这个流程走。先用你的数据直接跑一遍 Source-Only,记录一个基线数字,这是所有对比的基础。接着用一个已经开源的图像域无源适配方法(比如 TENT)作为第二组基线,看看简单归一化调整在你的时序数据上是什么效果。然后再实现一个"只有时间分支 + 伪标签 + 一致性"的简化版本,做一个中等复杂度的基线。最后再在完整模型上加入空间分支和时空一致性损失,对比前几步的结果。
这个流程最有价值的地方在于:你能清楚地定位每个组件在自己任务上的增益到底有多大。我见过不少项目,做完之后发现空间分支的收益其实微乎其微,时间分支和伪标签才是主力。这不是说空间建模没用,而是具体数据的具体特性决定的。用这样的方式验证,才能真正把 TERSE 的思想吸收到自己的工程里,而不是停留在"复现了论文结果"的层面。
我自己的体会是,无源域适配这个方向正在变得非常务实,因为它解决的问题太贴近真实部署了。TERSE 把"时间依赖 + 空间依赖"这两个在时序任务里永远绕不开的因素放到无源适配的约束下统一建模,方向上是对的。最后再分享一个小经验:无论你最终用的是完整方法还是一个简化版,适配之后一定要用少量人工标注的样本做一次盲测,不是为了微调,而是为了确认适配后的模型没有在目标域上形成一种"自信但系统性地错误"的状态。这一步在无源场景下相当于你的安全网,千万别省。