vad-macbert

中文 VAD(valence/arousal/dominance)回归模型,基于 chinese-macbert-base。

HF Model Task Backbone

输出 3 个连续值,目标对齐到教师模型 `RobroKools/vad-bert` 的 VAD 空间。 ## 快速上手 ```python from transformers import AutoTokenizer, AutoModelForSequenceClassification import torch model_path = "Pectics/vad-macbert" tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoModelForSequenceClassification.from_pretrained(model_path) model.eval() text = "这部电影让我很感动。" inputs = tokenizer(text, return_tensors="pt", padding=True, truncation=True, max_length=128) with torch.no_grad(): outputs = model(**inputs) vad = outputs.logits.squeeze().tolist() print("VAD:", vad) ``` ## 模型信息 - 基座模型:`hfl/chinese-macbert-base` - 任务:VAD 回归(3 维输出:valence, arousal, dominance) - 头部:`AutoModelForSequenceClassification`,`num_labels=3`,`problem_type=regression` ## 数据来源与标注方式 ### en-zh_cn_vad_clean.csv - 来源:OpenSubtitles 英中平行语料。 - 标注:将英文句子输入 `RobroKools/vad-bert` 获取 VAD,再把该 VAD 赋给对应中文句子。 ### en-zh_cn_vad_long.csv - 由 `en-zh_cn_vad_clean.csv` 过滤长句得到(原始阈值未记录)。 - 根据长度统计推断最小长度为 32 字符,推测当时过滤条件为 `len >= 32`。 ### en-zh_cn_vad_long_clean.csv - 从 `en-zh_cn_vad_long.csv` 清洗得到,去掉字幕样式噪声: - ASS/SSA 标签块(如 `{\\fs..\\pos(..)}`,含不完整 `{`) - HTML 类标签(如 `...`) - 转义标记(`\\N`、`\\n`、`\\h`、`\\t`) - 多余空白归一化 - 非 CJK 内容已过滤。 ### en-zh_cn_vad_mix.csv - 回放混合数据: - `en-zh_cn_vad_clean.csv` 抽样 200k - `en-zh_cn_vad_long_clean.csv` 抽样 200k - 合并后再随机打乱 ## 训练过程 最终模型 `vad-macbert-mix/best` 由三阶段训练获得: 1. **基础训练**:`en-zh_cn_vad_clean.csv` 2. **长句适配**:`en-zh_cn_vad_long_clean.csv` 3. **回放混合**:`en-zh_cn_vad_mix.csv`(从阶段 2 继续训练) ### 最终阶段命令(回放混合) ``` --model_name hfl/chinese-macbert-base --output_dir train/vad-macbert-mix --data_path train/en-zh_cn_vad_mix.csv --epochs 4 --batch_size 32 --grad_accum_steps 4 --learning_rate 0.00001 --weight_decay 0.01 --warmup_ratio 0.1 --warmup_steps 0 --max_length 512 --eval_ratio 0.01 --eval_every 100 --eval_batches 200 --loss huber --huber_delta 1.0 --shuffle_buffer 4096 --min_chars 2 --save_every 100 --log_every 1 --max_steps 5000 --seed 42 --dtype fp16 --num_rows 400000 --resume_from train/vad-macbert-long/best --encoding utf-8 ``` 训练环境(conda `llm`): - Python 3.10.19 - torch 2.9.1+cu130 - transformers 4.57.6 ## 评测 基准脚本:`train/vad_benchmark.py` - 使用 `eval_ratio=0.01`(约 1/100 抽样)。 - 长度分桶(字符数):0–20、20–40、40–80、80–120、120–200、200–400、400+ ### 结果(vad-macbert-mix/best) **en-zh_cn_vad_clean.csv** - mse_mean=0.043734 - mae_mean=0.149322 - pearson_mean=0.7335 **en-zh_cn_vad_long_clean.csv** - mse_mean=0.031895 - mae_mean=0.131320 - pearson_mean=0.7565 备注: - `400+` 分桶样本量很少,Pearson 不稳定,仅供参考。 ## 限制与注意事项 - VAD 标签来自英文教师模型并通过平行语料对齐,可能带有教师偏差,不等同于人工中文标注。 - 字幕语料存在翻译误差和格式噪声,清洗后仍可能残留。 - 超长句样本较少,`400+` 的表现不稳定。 ## 目录文件 - `config.json` - `model.safetensors` - `tokenizer.json`, `tokenizer_config.json`, `special_tokens_map.json`, `vocab.txt` - `training_args.json`