一次额外注意力自对比,SCS把PonTE七项均值从42.3提到45.6

Focusing Condition: Inference-Time Self-Contrastive Steering Elicits Better Conditional Text Embeddings in LLMs

Zifeng Cheng, Lingyun Qian, Zhiwei Jiang, Cong Wang, Yafeng Yin, Fei Shen, Ao Zhou, Qing Gu

ACL 2026 (Oral)

cs.CL

2026-09-26

南大提出推理时插件SCS:改注意力掩码得到无条件嵌入,再与有条件嵌入自对比,LLaMA3-8B-Inst上把PonTE七项均值从42.3提到45.6,多出一次MHSA几乎不增耗时。

这篇在解决什么

同一段文本可以按不同条件看。一个男人在弹吉他,另一个男人在吹小号:按性别该近,按乐器该远。通用 embedding 给不出这种切换。

现成的零训练路线是把条件写进 prompt。PonTE 在 PromptEOL 上加「in terms of [CONDITION]」,用最后一个 token 的 hidden state 当条件嵌入。这个向量仍缠着通用语义。TweetEmotion 上,通用嵌入和条件嵌入的平均余弦相似度是 0.763,距离被无关信息拖偏。prompt 改几个词,分数也会跟着晃。

条件文本嵌入要的是「只按某个方面看这段话」。只靠 prompt 里那句条件,给不出干净的那一面。

方法

SCS(Self-Contrastive Steering,自对比引导)是推理时插件:不训练、不加数据,接到现有 prompt 方法上。

两路只在条件片段上有差别,相减能把条件信息衬出来。挡掉条件后,prompt 形态接近无条件的 PromptEOL。掩码会在位置序列里留一个洞,RoPE 的相对距离会断,所以后续位置必须前移。

直接相减是 DE:Δv = v条件 - v无条件。投影再减是 PE:先把条件向量投影到无条件方向上,再减掉这部分。对比后范数会变,α 把范数拉回可用范围。

额外开销是一层 MHSA 的一次前向。激活引导通常要正负样本对,或再跑一整段辅助 prompt;SCS 的引导向量由这条输入自己生成,也不走完整第二遍网络。

结果

主实验用 LLaMA3-8B-Inst,七个数据集覆盖聚类 V-measure、STS 的 Spearman 与 Pearson、三元组对齐准确率。PonTE 无开源代码,表中 PonTE 系均为复现。

方法TweetEmoI.STSB (Sp/Pe)七项均值
PromptEOL31.70/022.7
PonTE39.933.9/29.542.3
PonTE+Att43.433.3/29.142.4
SCS-DE45.539.9/37.745.6
SCS-PE45.938.6/36.045.3
E5-Mistral-7B-Inst41.334.8/34.6未给七项

涨幅最大的是 I.STSB:从 PonTE 的 33.9/29.5 到 DE 的 39.9/37.7,+6.0/+8.2。Toxic 只从 57.7 到 58.0,+0.3,七项里最弱。六项拿下最好或并列最好;AGNews 上 PE 的 85.8 与 PonTE+Att 打平。DE 均值略高于 PE,投影不是必须步骤。

Amazon-C 上 SCS-DE 是 34.2,E5 是 37.4,监督模型仍高 3 分以上。聚类两项互有胜负。V100、相同 batch 下,TweetEmo 每条 70ms 对 69ms,Amazon-R 79ms 对 80ms,多出来的时间落在噪声里。

未指令微调的 LLaMA3-8B 上,三项均值从 17.4 到 28.0,+10.6;指令版从 34.5 到 40.0,+5.5。Qwen2.5-7B 基座 +3.2,指令版 +4.0。指令跟随差的模型,prompt 更脏,对比抠掉的收益更大。六种 prompt、六种条件表述都涨,prompt 之间的方差也下降。最优干预层按数据集分开:TweetEmo 第 3 层,Amazon-R 第 7 层,Amazon-C 第 4 层。α 在 {5, 10, 15} 里按数据集网格搜索。

为什么重要

已经在用 PromptEOL 或 PonTE 从开源 LLM 抽嵌入的人,能改 attention mask 就可以插。不用数据,也不把模型训成专用 embedding 模型,生成能力还在。多付的是一层注意力和两个超参。

这是渐进改进。收益集中在短文本、细粒度 STS 和情绪聚类;三元组对齐几乎不动。落地时要按数据集搜层和 α,并且只能走白盒权重。

局限与存疑

作者写了两条:必须改模型内部计算,黑盒 API 用不了;没有在 70B 这类更大模型上验证。

更大的问题在实验设定。ℓ 在 [2, 20]、α 在 {5, 10, 15} 按数据集网格搜索,三个聚类集的最优层和 α 各不相同。超参做不到跨任务通用。干预位置也不共享:I.STSB 上 FFN 最好,到 40.8/39.1;TweetEmo 上 hidden 最好,到 46.2。Toxic +0.3 说明条件已经在 prompt 里够用时,对比几乎没东西可减。

PonTE 数字来自复现。输出层最优也会被 steering 改掉:PonTE 在第 30、29 层最好,SCS 在第 32、28 层。取哪一层同样要搜。

术语

原文与代码

社区讨论

相关论文

全部论文解读