让模型听一段中文驾驶场景语音,能在文本空间检索到对应情感描述。
| 版本 | 时间 | 音频塔 | 文本塔 | 损失 | 结果 |
|---|---|---|---|---|---|
| v0 | 03/31 | HuBERT-base (95M) | mE5-base (278M) | Sigmoid | Loss 卡 1.24,R@1 ≈ 0.4% |
| v2 | 04/01 | Dasheng-base (85M) | Jina-v3 (572M) | Sigmoid | Loss 卡 1.24,R@1 ≈ 0.05% |
踩的坑:
.encode() 内部带 @torch.no_grad(),梯度全断结论:从零训练数据/计算都不够,必须用预训练模型微调。
| 版本 | 时间 | 音频塔 | 文本塔 | 关键改动 | 情感 Acc@1 (test=2161) |
|---|---|---|---|---|---|
| CLAP-LoRA | 04/08 | CLAP HTSAT + LoRA | mE5 + LoRA | 双路 Sigmoid (L_at + λ·L_tt) | (未做情感评估) |
| v3 | 04/09 | Dasheng + LoRA | SONAR + LoRA | 在 GLAP 预训练上微调,硬 ±1 标签 | 59.79%(旧 split 误读 65.85%) |
v3(GLAP-LoRA 基线):基于小米 GLAP 预训练(AISHELL-2 R@1=98.5%),保留预训练对齐,LoRA r=16。可训练参数 16.2M (1.9%)。
| 版本 | 时间 | 文本塔 | L_tt 软标签来源 | 情感 Acc@1 |
|---|---|---|---|---|
| v4a | 04/15 | SONAR + LoRA | Qwen3-Embedding-0.6B 教师对 caption cosine | 57.75% |
| v4b | 04/16 | Qwen3-Embedding-0.6B + LoRA | 硬 ±1(无软标签) | 59.23% |
| v5a | 04/16 | Qwen3-Embedding-0.6B + LoRA | metadata 规则:emotion_soft_label cosine + VAD RBF + gender | 55.02% |
| v3-resplit | 04/17 | SONAR + LoRA | 硬 ±1 | 59.79% |
v4a 结论:Qwen3 教师对模板化 caption 给出的相似度 std≈0.02、跨情绪 gap 仅 0.04,软信号几乎无梯度,L_tt 从 epoch 8 后停滞。
v4b 结论:Qwen3 文本塔替换 SONAR + 硬标签,对照 v3 看是否换文本塔就有提升。结果与 v3-resplit 几乎打平(差 0.6pp,噪声范围内)。
v5a 创新点:放弃用 LM 做教师,直接从 JSON metadata 算软标签:
软标签区分度 gap=0.47(Qwen3 教师的 12 倍),但总体 Acc@1 仍未超过硬标签基线。
v3-resplit:用与 v4 系列同口径的新 split 重训练 v3,作为公平对照——证明之前 v3 的 65.85% 主要是旧 split 的测试集差异造成。
| 版本 | 文本塔 | L_tt 目标 | 情感 Acc@1 | Acc@5 | Acc@10 | 路怒 F1 |
|---|---|---|---|---|---|---|
| GLAP 原模型 | SONAR | — | 11.43% | 52.20% | 75.94% | 0.199 |
| v3-resplit | SONAR+LoRA | 硬 ±1 | 59.79% | 81.17% | 86.26% | 0.676 |
| v4a | SONAR+LoRA | Qwen3 教师软标签 | 57.75% | 76.08% | 81.95% | 0.709 |
| v4b | Qwen3+LoRA | 硬 ±1 | 59.23% | 81.03% | 86.02% | 0.680 |
| v5a | Qwen3+LoRA | metadata 规则软标签 | 55.02% | 75.34% | 81.26% | 0.697 |
| 情感 | N | GLAP | v3-resplit | v4a | v4b | v5a |
|---|---|---|---|---|---|---|
| neutral | 1027 | 8.3% | 71.3% | 65.0% | 68.7% | 52.8% |
| anger | 419 | 16.5% | 67.5% | 68.3% | 73.0% | 74.2% |
| happy | 255 | 11.4% | 47.8% | 54.9% | 51.4% | 69.4% |
| sad | 121 | 29.8% | 60.3% | 64.5% | 50.4% | 64.5% |
| surprise | 166 | 12.7% | 31.9% | 20.5% | 33.1% | 33.1% |
| fear | 85 | 8.2% | 22.4% | 36.5% | 11.8% | 17.6% |
| disgust | 88 | 0.0% | 11.4% | 12.5% | 13.6% | 12.5% |
| 版本 | best epoch | val R@1 峰值 | 收敛特点 |
|---|---|---|---|
| v3-resplit | ~15 | 0.014 | 较慢,10 epoch 后噪声波动 |
| v4a | 20 | 0.011 | 末期仍在抖动 |
| v4b | 5 | 0.010 | 极快收敛,后 15 epoch 过拟合 |
| v5a | 3 | 0.009 | 极快收敛,后 17 epoch 过拟合 |
LoRA 微调路线大幅有效:相对 GLAP 原模型,情感 Acc@1 从 11.4% → 59.8%(+48pp),证明 LoRA 微调可以充分利用 GLAP 预训练对齐。
同口径下 v3 / v4a / v4b 差距很小(55-60% 区间),文本塔和软标签都没带来一致性收益。之前 v3 比 v4 高 6pp 主要是旧 split 把更多 easy case 放到 test。
不同情绪需要不同信号:
v4b/v5a 收敛极快(best epoch=5/3),暗示 LR=2e-4 偏高、warmup=300 偏短;后 15 epoch 是过拟合,更适合早停。
disgust / fear 是全体方案的瓶颈(<37%,N<100),样本量小且语义模糊。
instance R@1 不是好的 best checkpoint 选择标准——captions 模板化导致 R@1 早期就饱和,但情感 Acc 可能还在改进。
AudioText/
├── CLAP/ # 主代码仓库
│ ├── src/laion_clap/training/ # 训练脚本与配置
│ ├── scripts/ # 软标签预计算等离线脚本
│ ├── outputs/ # 各版本 checkpoints 与 train.log
│ ├── 方案总结.md / v3.md / v4.md / v5.md # 各阶段方案文档
│ └── 周报_*.md
├── EmotionTalk/ # 数据集
│ └── Audio/
│ ├── wav/ # 19,250 条音频
│ ├── enriched_json/ # 每条 clip 的 metadata JSON
│ └── emotiontalk_meta_soft_labels_v5a.pt # v5a 软标签矩阵 (741 MB)
└── README.md # 本文档
# v3-resplit
python CLAP/src/laion_clap/training/train_glap_lora.py \
--config CLAP/src/laion_clap/training/configs/emotiontalk_glap_lora_v3_resplit.yaml
# v4b (Qwen3 文本塔)
python CLAP/src/laion_clap/training/train_glap_lora.py \
--config CLAP/src/laion_clap/training/configs/emotiontalk_glap_lora_v4b.yaml
# v5a (Qwen3 + metadata 软标签)
python CLAP/scripts/precompute_metadata_soft_labels.py # 一次性生成 .pt
python CLAP/src/laion_clap/training/train_glap_lora.py \
--config CLAP/src/laion_clap/training/configs/emotiontalk_glap_lora_v5a.yaml
# 评估(任何 checkpoint)
python CLAP/src/laion_clap/training/eval_emotion_retrieval.py \
--config <yaml> --checkpoint <ckpt.pt> --split test
1 commits
Python
98.0%
Shell
2.0%
让模型听一段中文驾驶场景语音,能在文本空间检索到对应情感描述。
| 版本 | 时间 | 音频塔 | 文本塔 | 损失 | 结果 |
|---|---|---|---|---|---|
| v0 | 03/31 | HuBERT-base (95M) | mE5-base (278M) | Sigmoid | Loss 卡 1.24,R@1 ≈ 0.4% |
| v2 | 04/01 | Dasheng-base (85M) | Jina-v3 (572M) | Sigmoid | Loss 卡 1.24,R@1 ≈ 0.05% |
踩的坑:
.encode() 内部带 @torch.no_grad(),梯度全断结论:从零训练数据/计算都不够,必须用预训练模型微调。
| 版本 | 时间 | 音频塔 | 文本塔 | 关键改动 | 情感 Acc@1 (test=2161) |
|---|---|---|---|---|---|
| CLAP-LoRA | 04/08 | CLAP HTSAT + LoRA | mE5 + LoRA | 双路 Sigmoid (L_at + λ·L_tt) | (未做情感评估) |
| v3 | 04/09 | Dasheng + LoRA | SONAR + LoRA | 在 GLAP 预训练上微调,硬 ±1 标签 | 59.79%(旧 split 误读 65.85%) |
v3(GLAP-LoRA 基线):基于小米 GLAP 预训练(AISHELL-2 R@1=98.5%),保留预训练对齐,LoRA r=16。可训练参数 16.2M (1.9%)。
| 版本 | 时间 | 文本塔 | L_tt 软标签来源 | 情感 Acc@1 |
|---|---|---|---|---|
| v4a | 04/15 | SONAR + LoRA | Qwen3-Embedding-0.6B 教师对 caption cosine | 57.75% |
| v4b | 04/16 | Qwen3-Embedding-0.6B + LoRA | 硬 ±1(无软标签) | 59.23% |
| v5a | 04/16 | Qwen3-Embedding-0.6B + LoRA | metadata 规则:emotion_soft_label cosine + VAD RBF + gender | 55.02% |
| v3-resplit | 04/17 | SONAR + LoRA | 硬 ±1 | 59.79% |
v4a 结论:Qwen3 教师对模板化 caption 给出的相似度 std≈0.02、跨情绪 gap 仅 0.04,软信号几乎无梯度,L_tt 从 epoch 8 后停滞。
v4b 结论:Qwen3 文本塔替换 SONAR + 硬标签,对照 v3 看是否换文本塔就有提升。结果与 v3-resplit 几乎打平(差 0.6pp,噪声范围内)。
v5a 创新点:放弃用 LM 做教师,直接从 JSON metadata 算软标签:
软标签区分度 gap=0.47(Qwen3 教师的 12 倍),但总体 Acc@1 仍未超过硬标签基线。
v3-resplit:用与 v4 系列同口径的新 split 重训练 v3,作为公平对照——证明之前 v3 的 65.85% 主要是旧 split 的测试集差异造成。
| 版本 | 文本塔 | L_tt 目标 | 情感 Acc@1 | Acc@5 | Acc@10 | 路怒 F1 |
|---|---|---|---|---|---|---|
| GLAP 原模型 | SONAR | — | 11.43% | 52.20% | 75.94% | 0.199 |
| v3-resplit | SONAR+LoRA | 硬 ±1 | 59.79% | 81.17% | 86.26% | 0.676 |
| v4a | SONAR+LoRA | Qwen3 教师软标签 | 57.75% | 76.08% | 81.95% | 0.709 |
| v4b | Qwen3+LoRA | 硬 ±1 | 59.23% | 81.03% | 86.02% | 0.680 |
| v5a | Qwen3+LoRA | metadata 规则软标签 | 55.02% | 75.34% | 81.26% | 0.697 |
| 情感 | N | GLAP | v3-resplit | v4a | v4b | v5a |
|---|---|---|---|---|---|---|
| neutral | 1027 | 8.3% | 71.3% | 65.0% | 68.7% | 52.8% |
| anger | 419 | 16.5% | 67.5% | 68.3% | 73.0% | 74.2% |
| happy | 255 | 11.4% | 47.8% | 54.9% | 51.4% | 69.4% |
| sad | 121 | 29.8% | 60.3% | 64.5% | 50.4% | 64.5% |
| surprise | 166 | 12.7% | 31.9% | 20.5% | 33.1% | 33.1% |
| fear | 85 | 8.2% | 22.4% | 36.5% | 11.8% | 17.6% |
| disgust | 88 | 0.0% | 11.4% | 12.5% | 13.6% | 12.5% |
| 版本 | best epoch | val R@1 峰值 | 收敛特点 |
|---|---|---|---|
| v3-resplit | ~15 | 0.014 | 较慢,10 epoch 后噪声波动 |
| v4a | 20 | 0.011 | 末期仍在抖动 |
| v4b | 5 | 0.010 | 极快收敛,后 15 epoch 过拟合 |
| v5a | 3 | 0.009 | 极快收敛,后 17 epoch 过拟合 |
LoRA 微调路线大幅有效:相对 GLAP 原模型,情感 Acc@1 从 11.4% → 59.8%(+48pp),证明 LoRA 微调可以充分利用 GLAP 预训练对齐。
同口径下 v3 / v4a / v4b 差距很小(55-60% 区间),文本塔和软标签都没带来一致性收益。之前 v3 比 v4 高 6pp 主要是旧 split 把更多 easy case 放到 test。
不同情绪需要不同信号:
v4b/v5a 收敛极快(best epoch=5/3),暗示 LR=2e-4 偏高、warmup=300 偏短;后 15 epoch 是过拟合,更适合早停。
disgust / fear 是全体方案的瓶颈(<37%,N<100),样本量小且语义模糊。
instance R@1 不是好的 best checkpoint 选择标准——captions 模板化导致 R@1 早期就饱和,但情感 Acc 可能还在改进。
AudioText/
├── CLAP/ # 主代码仓库
│ ├── src/laion_clap/training/ # 训练脚本与配置
│ ├── scripts/ # 软标签预计算等离线脚本
│ ├── outputs/ # 各版本 checkpoints 与 train.log
│ ├── 方案总结.md / v3.md / v4.md / v5.md # 各阶段方案文档
│ └── 周报_*.md
├── EmotionTalk/ # 数据集
│ └── Audio/
│ ├── wav/ # 19,250 条音频
│ ├── enriched_json/ # 每条 clip 的 metadata JSON
│ └── emotiontalk_meta_soft_labels_v5a.pt # v5a 软标签矩阵 (741 MB)
└── README.md # 本文档
# v3-resplit
python CLAP/src/laion_clap/training/train_glap_lora.py \
--config CLAP/src/laion_clap/training/configs/emotiontalk_glap_lora_v3_resplit.yaml
# v4b (Qwen3 文本塔)
python CLAP/src/laion_clap/training/train_glap_lora.py \
--config CLAP/src/laion_clap/training/configs/emotiontalk_glap_lora_v4b.yaml
# v5a (Qwen3 + metadata 软标签)
python CLAP/scripts/precompute_metadata_soft_labels.py # 一次性生成 .pt
python CLAP/src/laion_clap/training/train_glap_lora.py \
--config CLAP/src/laion_clap/training/configs/emotiontalk_glap_lora_v5a.yaml
# 评估(任何 checkpoint)
python CLAP/src/laion_clap/training/eval_emotion_retrieval.py \
--config <yaml> --checkpoint <ckpt.pt> --split test
1 commits
Python
98.0%
Shell
2.0%