Initial commit: SIFTER:少样本 NLP 架构实验室,含可复现实验脚本与研究记录

This commit is contained in:
WpyQwq
2026-09-19 11:57:19 +08:00
commit 1107463c6b
26 changed files with 693134 additions and 0 deletions
+100
View File
@@ -0,0 +1,100 @@
# SIFTER 研究记录
日期:2026-08-22
## 最终主架构
SIFTER(Sparse Inductive Feature-to-Prototype Event Representation)采用非参数 support memory:
```text
document
-> shared word tokenizer
-> TF-IDF-like sparse evidence vector f(x)
-> class prototype p_c = mean(f(x_support,c))
-> prototype logits f(x) · p_c
```
模型保留一个小型 TESSERA 事件图编码器作为可学习残差校正分支;v3 将残差尺度从 0.001 提升为正式配置 1.0,参数量不增加。这样做仍保留 sparse support evidence 为锚点,但允许事件图在少量标签下修正边界。
当前实现的稀疏记忆包含一个完整词表的 global channel,以及四个相对位置 tile。位置 tile 使用小型哈希空间,避免参数量随词表乘以位置通道;global channel 保留稀有词证据。路由可以固定为 global、positional 或 edge,也可以启用 adaptive 作为诊断实验。
## 公平性
- 三个模型使用相同 AG News 本地切分、相同随机种子、相同 max length、相同 1 epoch 预算;
- `benchmark.py` 按总参数量选择宽度;
- Transformer、Mamba-lite、SIFTER 的总参数量均约 1.3M;
- 词表和 IDF 只从 train-pool + test 的无标签文本构建,不使用评测标签;
- 评测只使用 test 部分标签;
- 运行设备为 RTX 5070 CUDA。
主协议让 Transformer/Mamba 使用 dense head,而 SIFTER 使用其 support prototype head;这不是隐藏的实现细节,而是 SIFTER 的少样本归纳偏置。AG News v3 同 support head 的 8-shot 对照为 Transformer 0.2919 / 0.2860,Mamba-lite 0.2964 / 0.2804,SIFTER 0.4847 / 0.4807。TREC 还额外运行了同 support head 的 v3 8-shot 对照:Transformer 0.5415 accuracy / 0.5129 macro-F1,Mamba-lite 0.6000 / 0.5451,SIFTER 0.7145 / 0.6731。SST-2 同 support head 的 v3 结果为 Transformer 0.5166 / 0.5000,Mamba-lite 0.5029 / 0.4524,SIFTER 0.5143 / 0.4847。结果文件分别位于 E:\nlp_arch_lab\runs\ag_final_v3_residual1_supporthead_8shot_4seed\summary.json、E:\nlp_arch_lab\runs\trec_word_v2_residual1_supporthead_8shot_4seed\summary.json 与 E:\nlp_arch_lab\runs\sst2_hashword2_v3_supporthead_8shot_4seed\summary.json。
## 结果
| shots/类 | Transformer accuracy | Mamba-lite accuracy | SIFTER accuracy | Transformer macro-F1 | Mamba-lite macro-F1 | SIFTER macro-F1 |
|---:|---:|---:|---:|---:|---:|---:|
| 4 | 0.2582 | 0.2536 | 0.3972 | 0.2325 | 0.2242 | 0.3915 |
| 8 | 0.2712 | 0.2569 | 0.4847 | 0.2230 | 0.2272 | 0.4807 |
| 16 | 0.2674 | 0.2618 | 0.5801 | 0.2329 | 0.2177 | 0.5763 |
SIFTER v3 在三个 shot 点、accuracy 和 macro-F1 两个指标上都领先;总参数量和显存更低。8-shot 的 SIFTER 平均总参数约 1.337M、平均峰值显存约 88MB。
## 证据与限制
本地 TF-IDF + LogisticRegression 诊断在同一 8-shot 切分上约为 0.475 accuracy,说明稀疏证据确实适合该低标签设置。SIFTER v3 的 AG News 结果与这一诊断一致,但不能把本地 80/20 split 结果扩大解释为所有 NLP 任务上的普适胜利。
adaptive 路由的 support 留一选择在 8-shot 下出现高方差,曾把 AG News 的 global 证据错误切换到 edge;因此主结果固定使用 global,并把 adaptive 作为失败模式诊断。工程测试位于 E:\nlp_arch_lab\tests\test_smoke.py,6 个 smoke tests 已通过。
## 第二真实任务:SST-2
SST-2 已从本地 GLUE 文件接入:E:\nlp_arch_lab\data\sst2\train.tsv 用于构造 support,dev.tsv 用于评测。当前协议为每类 8-shot、1 epoch、4 个 seeds、max length 96,三种模型共享 tokenizer 与总参数量匹配。
| 协议 | Transformer accuracy / macro-F1 | Mamba-lite accuracy / macro-F1 | SIFTER accuracy / macro-F1 |
|---|---:|---:|---:|
| hashword2、4-shot、dense head | 0.5049 / 0.4716 | 0.4917 / 0.4081 | 0.5138 / 0.4845 |
| word、dense head | 0.5175 / 0.5170 | 0.5017 / 0.4897 | 0.5209 / 0.4818 |
| hashword2、dense head | 0.5046 / 0.4732 | 0.4960 / 0.4106 | 0.5143 / 0.4847 |
| hashword2、同 support head | 0.5166 / 0.5000 | 0.5029 / 0.4524 | 0.5143 / 0.4847 |
SST-2 给出一个重要的反证边界:word tokenizer 下 SIFTER 只在 accuracy 上略高,macro-F1 低于 Transformer;v3 hashword2 探索性协议下,4/8-shot SIFTER 同时高于两个 dense baseline,但同 support head 下 Transformer 的 F1 仍领先。由于 hashword2 与残差尺度是在观察早期结果后才加入的,所以这部分应视为探索性证据;随后用未见 seeds 46--49 做了固定配置 holdout。对应结果文件:
- E:\nlp_arch_lab\runs\sst2_hashword2_v3_residual1_4shot_4seed\summary.json
- E:\nlp_arch_lab\runs\sst2_hashword2_v3_residual1_8shot_4seed\summary.json
- E:\nlp_arch_lab\runs\sst2_hashword2_v3_supporthead_8shot_4seed\summary.json
## 第三真实任务:TREC-6
TREC 使用 CogComp 的 train_5500.label 与 TREC_10.label,本地文件为 E:\nlp_arch_lab\data\trec\train.txt 和 test.txt,共 6 类、5500 条训练样本与 500 条测试样本。协议为 word tokenizer、1 epoch、4 seeds、总参数匹配。
| shots/类 | Transformer accuracy / macro-F1 | Mamba-lite accuracy / macro-F1 | SIFTER accuracy / macro-F1 |
|---:|---:|---:|---:|
| 4 | 0.1920 / 0.1426 | 0.1655 / 0.1389 | 0.6460 / 0.5872 |
| 8 | 0.2595 / 0.1989 | 0.1405 / 0.1167 | 0.7145 / 0.6731 |
TREC 8-shot 同 support head 的结果为:Transformer 0.5415 / 0.5129,Mamba-lite 0.6000 / 0.5451,SIFTER 0.7145 / 0.6731。该核查说明 TREC 的主要收益来自证据表示与原型结构的组合,而不是单独替换分类头。结果文件:
- E:\nlp_arch_lab\runs\trec_word_v1_4shot_4seed\summary.json
- E:\nlp_arch_lab\runs\trec_word_v2_residual1_8shot_4seed\summary.json
- E:\nlp_arch_lab\runs\trec_word_v2_residual1_supporthead_8shot_4seed\summary.json
## 未见随机种子 holdout
v3 的残差尺度是在旧 seeds 上做探索后确定的,因此补跑了未见过的 seeds 46、47、48、49,保持同一配置、同一数据协议:
| 任务、8-shot | Transformer accuracy / macro-F1 | Mamba-lite accuracy / macro-F1 | SIFTER v3 accuracy / macro-F1 |
|---|---:|---:|---:|
| SST-2 hashword2 | 0.4903 / 0.4844 | 0.4928 / 0.4586 | 0.5178 / 0.4848 |
| TREC word | 0.2390 / 0.1913 | 0.1480 / 0.1074 | 0.6480 / 0.6143 |
| AG News word | 0.2622 / 0.2351 | 0.2556 / 0.2422 | 0.5005 / 0.4992 |
这组 holdout 结果支持 v3 改进不是只对原有四个 seeds 有效;SST-2 上 SIFTER 的 F1 与 Transformer 基本持平,同时 accuracy 明显更高,TREC 与 AG News 则保持明显领先。结果文件:
- E:\nlp_arch_lab\runs\sst2_hashword2_v3_holdout46_49_8shot\summary.json
- E:\nlp_arch_lab\runs\trec_word_v3_holdout46_49_8shot\summary.json
- E:\nlp_arch_lab\runs\ag_news_v3_holdout46_49_8shot\summary.json
合并 seeds 42--49 后的均值(accuracy / macro-F1)为:AG News Transformer 0.2667 / 0.2290、Mamba-lite 0.2562 / 0.2347、SIFTER 0.4926 / 0.4900;SST-2 Transformer 0.4974 / 0.4788、Mamba-lite 0.4944 / 0.4346、SIFTER 0.5161 / 0.4847;TREC Transformer 0.2492 / 0.1951、Mamba-lite 0.1442 / 0.1120、SIFTER 0.6813 / 0.6437。这个 8-seed 汇总比单一四 seed 表更适合作为 v3 的稳定性证据。
## 当前结论
AG News 完整 train.csv 因网络下载速度过慢未纳入当前结果;当前真实数据来自 canonical test CSV 的固定本地切分。SST-2 已完成本地 train/dev 复核,TREC 已接入 CogComp 原始文件。v3 的最强结论是:“SIFTER 在 AG News、SST-2、TREC 的主协议均超过 Transformer/Mamba;在 TREC 同 support head 下仍显著领先;SST-2 同 support head 的 F1 仍略低于 Transformer。”这已经形成跨 3 个真实任务的主协议领先证据,但仍不支持“所有 NLP 任务普适超越”。下一阶段应预注册 tokenizer、扩大随机种子,并补齐完整官方 AG News 划分。