-
Notifications
You must be signed in to change notification settings - Fork 26
中文 video_clip 阶段的 ASR/句段生成过碎,导致下游难以构造 对话 样本 #10
Description
问题描述
我在使用中文数据流水线时发现,video_clip 产出的 clip 粒度过细。
当前现象是:只要 ASR 把一段连续说话拆成多个 sentence,Stage 2 就会直接按这些 sentence 的 start/end 切成多个 clip。这样会导致:
- 单句被过度切碎
- 连续对白无法保留在同一个片段中
- 双人/多人对话难以形成完整样本
- 下游
speaker_diarization、CoT 校正、build_datasets.py得到的样本上下文不足
我的理解
根据代码阅读,我理解当前流程大致是:
- Stage 1 生成
sentence_info total.srt和sentences都直接来自这份sentence_info- Stage 2 按
sentences逐条切片 - 下游按单个 clip / RTTM 构造样本,不会再把多个小 clip 合并回一个对话窗口
也就是说,当前基本是:
一个 sentence = 一个 clip
因此只要上游句段偏细,最终对话数据就会被切碎。
相关代码
video_clip/videoclipper.py
for sentence in sentences:
start_time = sentence['start'] / 1000.0
end_time = sentence['end'] / 1000.0
speaker_id = sentence.get('spk', 'unknown')
ts.append([start_time, end_time, speaker_id])观察到的结果
我检查了如下文件:
datasets/clean/zh/my_movie/03/total.srt
datasets/clean/zh/my_movie/03/sentences
datasets/clean/zh/my_movie/03/clipped/*
datasets/clean/train.jsonl
目前看到的问题是:
total.srt 已经比较碎
连续对白被拆成多个很短 clip
最终样本大多变成 独白 / 旁白
很难形成稳定的 type="对话" 样本
我想请教
当前中文路径下,一个 sentence = 一个 clip 是否是有意设计?
如果目标是构建影视对话数据,是否更推荐在 Stage 2 前增加“句段合并 / 对话窗口构建”?
对这个问题,更推荐的修复方式是:
调整 ASR/VAD/标点参数
修改 FunASR timestamp_tools
还是在仓库里增加 merged segment 逻辑?
期望改进方向
相比直接按 sentence 切片,我更希望增加一层可配置的 segment builder,例如支持:
同 speaker 的短间隔句子自动合并
短时间内的多 speaker 来回对白合并成一个 dialogue clip
约束最短/最长片段时长
约束最少句子数、最少 speaker 数
这样会更适合影视对话数据构建。
复现命令
bash video_clip/run.sh \
--stage 1 \
--stop_stage 2 \
--input /home/jcan/project/FunCineForge/datasets/raw_zh \
--output /home/jcan/project/FunCineForge/datasets/clean/zh \
--lang zh \
--device gpu
后续:
bash speaker_diarization/run.sh \
--stage 1 \
--stop_stage 4 \
--hf_access_token <HF_TOKEN> \
--root /home/jcan/project/FunCineForge/datasets/clean/zh \
--gpus "3 4"
感谢解答。
video: https://github.com/user-attachments/assets/5544901b-3310-46f0-82b1-dd30ea533050
total.srt: total.srt.txt