Order Matters: Investigate the Position Bias in Multi-constraint Instruction Following 2025.findings
构建大量多约束指令,改变约束顺序并计算CDDI值,发现大模型在“难到易”顺序下表现最好,并通过注意力可视化解释了原因:**模型在难到易顺序下更关注约束内容**。
Order Matters: Investigate the Position Bias in Multi-constraint Instruction Following 2025.findings-acl
构建大量多约束指令,改变约束顺序并计算CDDI值,发现大模型在“难到易”顺序下表现最好,并通过注意力可视化解释了原因:模型在难到易顺序下更关注约束内容。
方法
第一步:合成带有多个约束的初始指令
1.输入 (输入):
种子指令库 (Seed Instructions): 从多个公开数据集中挑选出的基础任务指令,例如“写一个关于…的故事”、“介绍一下…专辑“等 。
约束库 (Constraint Taxonomy): 一个预先分类好的约束条件库,包含8大类25种具体的约束,比如限制长度、关键词、格式、结尾短语等 。
2.过程(Process):
采样种子指令: 从指令库中随机抽取一个基础任务,作为指令的核心。
采样约束条件: 从约束库中随机抽取N个不同的约束条件(比如7个或9个) 。
组合: 将种子指令和采样的N个约束条件拼接在一起,形成一条完整的、带有多个限制的复杂指令 。
输出 (Output):
成千上万条“基础任务 + 一组约束”的初始指令。
第二步:对约束进行重排序
输入 (输入):
- 第1步生成的所有多约束指令。
过程:
定义“难度”: 他们首先需要判断哪个约束“难”,哪个“简单”。这个难度不是人为设定的,而是通过在整个测试中观察模型遵循某个约束的平均成功率来衡量的。成功率越低的约束,就被定义为越“难” 。
对每个约束类型 Cx,计算其在所有出现该约束的指令中的遵循准确率:
N=1Acc⋅C N = \frac{1}{\text{Acc}} \cdot C N=Acc1⋅C
- Nx:包含约束 Cx的指令数量
- cxi:第 i条指令中是否遵循了约束 Cx(遵循为1,否则为0)
将准确率转换为“难度”:
DffCx=Softmax(1−Accx) DffCx=Softmax(1−Acc x) DffCx=Softmax(1−Accx)
准确率越低,难度越高。
提出CDDI指标: 为了量化顺序,他们提出了一个新指标叫做约束难度分布指数 (Constraint Difficulty Distribution Index, CDDI)
确定“理想顺序”
-
将所有约束按其难度从高到低排列,得到“hard-to-easy”顺序 omax。
-
计算 CDDI 值
-
CDDI=Ncon−NdisNpair=2(Ncon−Ndis)n(n−1) CDDI = \frac{N_{\text{con}} - N_{\text{dis}}} {N_{\text{pair}}}= \frac{2(N_{\text{con}} - N_{\text{dis}})}{n(n - 1)} CDDI=NpairNcon−Ndis=n(n−1)2(Ncon−Ndis)
-
n:约束总数
-
Ncon:在 o 和 omax 中顺序一致的约束对数
-
Ndis:顺序不一致的约束对数
-
Npair=n(n−1)/2:总对数
-
-
CDDI = 1: 代表完全的“从难到易”(难以到容易)顺序 。
-
CDDI = -1: 代表完全的“从易到难”(从易到难)顺序。
-
CDDI在-1到1之间:代表各种混乱的、既不完全从难到易也不完全从易到难的顺序 。
生成不同顺序: 按照不同的CDDI值,他们将每条指令中的约束,进行排列组合,生成多个语义相同但约束顺序不同的版本。
输出 (Output):
- 一个庞大的指令数据集,其中每条指令都有一个对应的CDDI值,精确地描述了其约束的排列顺序。
对于每种约束类型,IFEval都定义了相应的规则检查器:
a.关键词约束 (Include Keywords)
- 约束: "Include keywords [keyword1], [keyword2] in your response."检查: 在模型输出中搜索
keyword1和keyword2,如果都存在 →c_ij = 1
b. 格式约束 (JSON Format)
- 约束: “Entire output should be wrapped in JSON format.”
- 检查:尝试用JSON解析器解析输出如果解析成功 →
c_ij = 1否则 →c_ij = 0
c. 长度约束 (Number Words)
- 约束: “Answer with at least 100 words.”
- 检查:统计输出中的单词数,如果 ≥ 100 →
c_ij = 1,否则 →c_ij = 0
第3步:模型推理与评估 (Inference and Evaluation)
用这些不同排序的指令去测试不同的语言模型,看看模型的表现如何。
-
输入 (输入):
- 第2步生成的、带有不同CDDI值的指令集。
- 多个主流的大语言模型,如 LLaMA3, GPT-4o-mini 等 。
-
过程(Process):
-
模型推理: 将不同顺序的指令喂给大语言模型,并记录它们的回答。这个过程分为两种模式:
单轮推理 (Single-round): 一次性把包含所有约束的完整指令发给模型 。
多轮推理 (Multi-round): 模仿真实对话,先发种子指令,然后一轮一轮地追加约束条件 。
-
评估: 检查模型的每个回答是否满足了指令中的所有约束条件。
-
-
输出 (Output):
- 各个模型在不同CDDI值(即不同约束顺序)下的遵循指令准确率 。
注意力可视化
超参数 L: 10 (论文 5.2 节所述 )
输入指令 (Input): (种子指令) :介绍"Back to Black". (约束 C1, 格式) :用json (约束 C2,长度) :用3个词
模型的回应 (Output Y): { “album” }
输入词元 (N_X = 6): s1: [介绍] ,s2: [Back to Black] ,c_{1,1}: [用] ,c_{1,2}: [json] (来自 C1),c_{2,1}: [用] (来自 C2),c_{2,2}: [3个词]
输出词元(N_Y = 3):y1: [{],y2: ["album"],y3: [}]
原始重要性 (I) 矩阵:
核心逻辑: 在输入中删掉某个 Token t_x,模型输出正确 Token t_y 的概率下降了,则 t_x对 t_y很重要
数学表达: 重要性 I :“包含该 Token t_x 时Token t_y 的预测概率” 减去 “移除该 Token t_x 后的Token t_y 预测概率”
梯度近似计算
矩阵中的每个值 I{tx, ty} : “输出 yt 的概率 f(yt)” 对 “输入 tx 的嵌入 E[tx]” 的一阶梯度,并取其范数
| 输入词元 (tx) | y1 ([{]) | y2 ([“album”]) | y3 ([}]) |
|---|---|---|---|
s_1([介绍]) |
0.05 | 0.08 | 0.02 |
s_2([Back to Black]) |
0.10 | 0.20 | 0.05 |
c_{1,1} ([用]) |
0.02 | 0.01 | 0.01 |
c_{1,2} ([json]) |
0.30 | 0.03 | 0.25 |
c_{2,1} ([用]) |
0.02 | 0.01 | 0.01 |
c_{2,2}([3个词]) |
0.01 | 0.01 | 0.01 |
第2步:归一化重要性 (S) 矩
原始的梯度值可能存在噪声,对其进行了标准化。
Stx,ty=L×Itx,tymax(I) S_{t_x, t_y} = \frac{L \times I_{t_x, t_y}}{\max(I)} Stx,ty=max(I)L×Itx,ty
计算“约束 C_x”对生成“整个回答 Y”的平均贡献权重:
将属于同一个约束 C_x 的所有 Token 的重要性分数累加,并对整个生成的回复 Y 的所有 Token 取平均
举例
①:构建多约束指令
-
种子指令(Seed Instruction):
"写一个关于狗的故事。”
-
采样得到的约束(Constraints):
- C1(格式): “不得少于100字。”
- C2(内容): “故事中必须包含‘骨头’这个词。”
- C3(语言): “必须用英语写。”
-
输出:多约束指令
“写一个关于狗的故事。不得少于100字。故事中必须包含‘骨头’这个词。必须用英语写。"
②预实验计算约束难度
在大型测试集上统计每个约束类型的遵循准确率:
| 约束 | 测试指令数 | 遵循次数 | 准确率 | 标准化难度 |
|---|---|---|---|---|
| C1: 长度要求 | 1000 | 300 | 30% | 0.64 |
| C2: 包含关键词 | 1000 | 700 | 70% | 0.27 |
| C3: 英语输出 | 1000 | 900 | 90% | 0.09 |
难度排序:C1 (最难) > C2 > C3 (最易)
③:计算CDDI值,约束重排序
-
作者提出一个指标叫 CDDI(Constraint Difficulty Distribution Index)
-
它衡量的是:约束顺序是否是从“难到易”排列的
-
取值范围:-1(易到难) 到 1(难到易)
-
对这3个约束进行不同顺序的排列,例如:
顺序 约束排列 类型 CDDI值 A C1 → c2→ C3 难到易 1 B C3 → C2 → C1 易到难 -1 C C2→ C3 → C1 其他顺序 -1~1
计算顺序c的CDDI:
-
总约束对数为:
N_pair = 3*(3-1)/2 = 3对。 -
我们将顺序c
[C2, C3, C1]()与理想顺序A[C1, C2, C3]进行比较: -
约束对 在理想顺序A中的位置关系 在顺序B中的位置关系 是否一致? (C1, C2) C1在C2前 C1在C2后 不一致 (C1, C3) C1在C3前 C1在C3前 一致 (C2, C3) C2在C3前 C2在C3前 一致 -
N_con(一致对数) = 2 -
N_dis(不一致对数) = 1 -
CDDIB=(2−1)/3=1/3 CDDIB=(2−1)/3=1/3 CDDIB=(2−1)/3=1/3
-
④:模型推理
- 输入:不同顺序的指令(A、B、C)
- 输出:模型生成的回复
- 场景:
- 单轮:一次性给模型完整指令
- 多轮:逐步添加约束(先给种子指令,再一条条加约束)
⑤:评估表现
| 指令示例 | C1 (JSON) | C2 (骨头) | C3 (英语) | 说明 |
|---|---|---|---|---|
| 指令1 | 1 | 1 | 1 | 所有约束都遵循 |
| 指令2 | 0 | 1 | 1 | 未遵循JSON格式 |
| 指令3 | 0 | 1 | 0 | 未遵循JSON和英语 |
-
评估指标:
- C-level Acc:每个约束是否被满足
Acccons=(1+1+1+0+1+1+0+1+0)/(3×3)=96≈0.667
模型在所有约束上的平均遵循率为66.7%。
-
I-level Acc:整条指令是否全部满足
-
指令1:
1 * 1 * 1 = 1(全部遵循) -
指令2:
0 * 1 * 1 = 0(未全部遵循) -
指令3:
0 * 1 * 0 = 0(未全部遵循)
Accinst=(1+0+0)/3≈0.333
只有33.3%的指令完全满足了所有约束。
-
结果:
- 当 CDDI = 1(难到易) 时,模型表现最好
- 当 CDDI = -1(易到难) 时,模型表现最差
⑥:可视化解释(注意力分析)
- 作者用梯度归因方法,看模型在不同顺序下关注指令的哪些部分
- 发现:
- 在“难到易”顺序下,模型更关注约束部分
- 在“易到难”顺序下,模型容易忽略后面的难约束
更多推荐



所有评论(0)