# AWDE Has0 低的原因分析

日期：2026-06-16  
范围：只读分析 `/root/AWDE/AWDE_EXPERIMENT_SUMMARY.md`、`/root/AWDE/0605-6`、`/root/AWDE/0615`、本地 TEXT 复现报告与结果文件。未改动现有实验目录。

## 1. 先纠正一个关键概念

`Has0_acc_2` 不是“0 标签预测准确率”，也不是“模型是否预测 0”的指标。

AWDE 和 TEXT 的源码口径一致：

```python
binary_truth = truth >= 0
binary_pred = pred >= 0
Has0_acc_2 = accuracy_score(binary_pred, binary_truth)

non_zero = truth != 0
Non0_acc_2 = accuracy_score(pred[non_zero] > 0, truth[non_zero] > 0)
```

所以：

- `Has0` 是负类 vs 非负类二分类，真实 0 被放进“非负”类。
- `Non0` 是去掉 exact 0 后的负/正二分类。
- 真正看“预测为 0”的指标是 AWDE 额外记录的 `Zero_recall / Zero_precision / Zero_F1 / Zero_pred_rate`，其中 `pred_zero = round(pred) == 0`。

因此，“Has0 低”不能直接解释为“模型不会预测 0”。必须看 `Zero_pred_rate` 和 `Zero_recall`。

## 2. 数据集里的 0 标签比例

0602-6 AWDE pkl 和 TEXT raw512 pkl 的 label split 是一致的。test split：

| 统计 | 数值 |
| --- | ---: |
| test 样本数 | 4659 |
| exact zero 比例，`truth == 0` | 0.2200 |
| rounded zero 比例，`round(truth) == 0` | 0.4136 |
| negative 比例，`truth < 0` | 0.2898 |
| positive 比例，`truth > 0` | 0.4902 |

这说明 MOSEI test 里 round 到 0 的样本很多，约 41.36%；exact 0 也有 22.00%。如果模型完全不预测 0，`Zero_pred_rate` 应接近 0，`Zero_recall` 也应接近 0。

## 3. AWDE 并不是“不预测 0”

0605-6 和 0615 的正式 checkpoint 都有明显的 0 预测：

| 实验 | Has0 | Non0 | Zero recall | Zero precision | Zero F1 | Zero pred rate |
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
| 0605-6 Full 4-seed mean | 0.8393 | 0.8695 | 0.7238 | 0.6301 | 0.6734 | 0.4753 |
| 0605-6 best seed 20261100 | 0.8410 | 0.8690 | 0.7177 | 0.6409 | 0.6771 | 0.4632 |
| 0615 encoder 4-run mean | 0.8372 | 0.8780 | 0.7145 | 0.6357 | 0.6727 | 0.4649 |
| 0615 h160 test-best | 0.8465 | 0.8861 | 0.7094 | 0.6391 | 0.6724 | 0.4591 |

结论：不是“AWDE 不会预测 0”。相反，AWDE selected checkpoint 的 `Zero_pred_rate` 约 0.46-0.48，高于真实 rounded-zero 比例 0.4136；`Zero_recall` 约 0.71-0.72，也不低。  
更准确的说法是：AWDE 会把大量样本回归到 rounded-zero 区间，但 exact 0 样本在 `Has0` 的负/非负符号边界上仍有错判。

## 4. Has0 低主要来自 exact 0 样本的符号处理，不是 Non0

因为 `Has0` 包含 exact 0，而 `Non0` 去掉 exact 0，可以用同一 test split 反推出 exact 0 样本被判为非负的准确率：

```text
Has0 * N = Non0 * N_nonzero + ZeroSignAcc * N_exact_zero
```

反推结果：

| 方法 | Has0 | Non0 | exact 0 判为非负的近似准确率 |
| --- | ---: | ---: | ---: |
| TEXT paper | 0.8502 | 0.8657 | 0.7952 |
| TEXT local run2 | 0.8452 | 0.8696 | 0.7587 |
| TEXT local mean | 0.8395 | 0.8663 | 0.7445 |
| AWDE 0605-6 mean | 0.8393 | 0.8695 | 0.7322 |
| AWDE 0605-6 seed 20261100 | 0.8410 | 0.8690 | 0.7417 |
| AWDE 0615 mean | 0.8372 | 0.8780 | 0.6925 |
| AWDE 0615 h160 | 0.8465 | 0.8861 | 0.7061 |
| AWDE 0615 composite winner | 0.8324 | 0.8795 | 0.6654 |

这个表解释了为什么看起来“AWDE Non0 更强，但 Has0 没有同步更强”：

- 0615 h160 的 `Non0=0.8861` 明显高于 TEXT paper/local run2。
- 但 exact 0 样本被判为非负的比例只有约 0.7061，低于 TEXT run2 的 0.7587，也低于 TEXT paper 的 0.7952。
- 所以 Has0 差距主要不是来自非 0 正负判别，而是来自 exact 0 样本落在预测值负侧的问题。

这和“模型不预测 0”是两回事：一个样本可以被 round 到 0，但预测值是 -0.2；它在 `Zero_*` 中算预测 0，却在 `Has0` 中被算成负类，从而错掉 exact 0 的非负判别。

## 5. 0615 为什么 Non0/MAE/Corr 更强，但 mean Has0 反而不高

0615 换成 encoder-FRA 特征后，主要提升的是连续强度回归和非 0 正负判别：

| 方法 | Has0 | Non0 | Acc-5 | Acc-7 | MAE | Corr |
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
| 0605-6 Full mean | 0.8393 | 0.8695 | 0.5775 | 0.5591 | 0.5064 | 0.7951 |
| 0615 encoder mean | 0.8372 | 0.8780 | 0.5837 | 0.5641 | 0.4876 | 0.8125 |
| 0615 h160 | 0.8465 | 0.8861 | 0.5888 | 0.5692 | 0.4812 | 0.8184 |

0615 mean 的 `Non0`、`MAE`、`Corr` 都明显更好，但 `Has0` 没有同步提升，原因是：

- `Has0` 对 exact 0 样本的符号很敏感。
- 0615 的 continuous regression 更强，但 selected checkpoint 并没有专门优化 exact 0 的 `pred >= 0` 边界。
- 0615 composite winner `h128 b12` 的 test Has0 低，是选择准则偏向 `Corr - 0.5 * MAE + 0.2 * Acc-5` 后的结果；它不是 0 预测崩溃，而是回归/Non0 更强时牺牲了 exact 0 符号边界。

## 6. TEXT 为什么 Has0 比 AWDE 高

目前可确认的原因有三类。

第一，TEXT 的正式选择口径就是 validation Has0 Acc-2。  
本地 TEXT 报告写明 run1/run2/run3 基本按 valid Has0 选择，而 AWDE 0605-6/0615 正式口径是 EMA validation composite：

```text
valid Corr - 0.50 * valid MAE + 0.20 * valid Acc-5
```

所以 TEXT 更容易选到 Has0 边界更好的 checkpoint；AWDE 更容易选到 MAE/Corr/Acc-5 更均衡的 checkpoint。

第二，TEXT 对 exact 0 的非负边界更友好。  
从 Has0/Non0 拆解看，TEXT run2 的 exact 0 判非负约 0.7587，TEXT paper 约 0.7952；而 AWDE 0605-6 mean 约 0.7322，0615 mean 约 0.6925。TEXT 的优势主要就体现在这里。

第三，TEXT 的 BERT 是 fine-tune，AWDE 0602-6/0605-6 主线是 frozen BERT；0615 则用高维 encoder 特征替换三模态输入。  
AWDE 0615 的 Non0、MAE、Corr 已经更强，说明特征表达不是整体弱；但 exact 0 的符号校准没有被当前 loss/selection 单独约束。

## 7. 选择 checkpoint 的证据

如果只看 AWDE 训练日志里的 test 观察点，Has0 和回归指标不是完全矛盾，但“best Has0 点”和“正式 composite 点”不总一致：

| 实验 | 观察 | Test Has0 | MAE | Corr | Zero F1 |
| --- | --- | ---: | ---: | ---: | ---: |
| 0605-6 official seed 20261100 | composite epoch 5 | 0.8410 | 0.5038 | 0.7967 | 0.6771 |
| 0605-6 best valid Has0 seed 20261100 | epoch 4 | 0.8352 | 0.5048 | 0.7928 | 0.6835 |
| 0605-6 best observed test Has0 | seed 20261202 epoch 6 | 0.8433 | 0.5040 | 0.7972 | 0.6738 |
| 0615 official h160 | composite epoch 4 | 0.8465 | 0.4812 | 0.8184 | 0.6724 |
| 0615 best observed test Has0 | h128 lr5e-5 epoch 3 | 0.8521 | 0.5087 | 0.7997 | 0.6536 |
| 0615 best observed Zero F1 | h128 b12 epoch 4 | 0.8375 | 0.4796 | 0.8168 | 0.6893 |

这说明 AWDE 训练过程中能到达更高 Has0，例如 0615 有 test Has0 0.8521 的观察点；但那个点的 MAE/Corr 明显不如 h160 official。这是指标权衡，不是模型完全没有 0 类能力。

## 8. 总结判断

结论：

1. 不是 AWDE “不会预测 0”。AWDE 的 `Zero_pred_rate` 约 0.46-0.48，真实 rounded-zero 比例是 0.4136；`Zero_recall` 约 0.71-0.72。
2. AWDE 的 Has0 相对 TEXT 低，主要来自 exact 0 样本的符号边界：exact 0 应按 `truth >= 0` 归为非负，但 AWDE 有更多 exact 0 样本预测值落在 0 以下。
3. 0615 encoder-FRA 的主要收益在 Non0、MAE、Corr；它改善了强度回归和非 0 正负判别，但没有同步改善 exact 0 的非负边界。
4. TEXT Has0 高，一部分来自 valid Has0 selection，一部分来自它对 exact 0 样本更偏非负的校准；不是因为 AWDE 完全缺少 0 预测。

## 9. 后续如果要补 Has0，建议优先做的事

不建议简单强行“多预测 0”，因为 AWDE 已经预测了不少 rounded-zero。更合理的是校准 exact 0 的符号边界：

- 增加一个 validation selection 候选：`composite + lambda * valid Has0`，而不是只用 Corr/MAE/Acc-5。
- 单独记录 `ExactZero_nonneg_acc = mean(pred[truth == 0] >= 0)`，把它和 `Zero_F1` 分开看。
- 对 0615 h160 做 4-seed 复验时，同时报告 composite winner、best valid Has0、best valid Zero-F1 三个 checkpoint。
- 若训练侧要改，优先试轻量 calibration：对 exact-zero/near-zero 样本加小权重的 sign BCE 或后处理阈值偏置，不要直接提高 `Zero_pred_rate`。

