如何在transformers.js结合Whisper实现字符/单词级时间戳粒度?
解决transformers.js + Whisper字符/单词级时间戳问题
要实现细粒度的字符/单词级时间戳,核心要解决两个关键问题:模型支持性和参数配置,具体如下:
1. 必须使用带对齐头的Whisper模型
你当前使用的默认Whisper模型(比如base、small版本)没有训练对齐头,所以即便设置了return_timestamps: "char",也只能生成大段落级的chunk——因为模型没有输出字符/单词与音频帧的对齐数据,无法拆分到细粒度。
你可以直接使用transformers.js生态中预导出的带对齐头模型,比如Xenova/whisper-base.en-aligned(英文支持)这类,或者用Python的transformers库自行导出带对齐头的ONNX模型(导出时需确保包含对齐头的输出)。
2. 完善生成参数配置
除了设置return_timestamps: "char",还需要在生成配置里启用对齐输出,否则模型不会返回用于细粒度拆分的对齐数据。修改你的script.js代码,补充如下配置:
data.generation.return_timestamps = "char"; data.generation.output_alignment = true; // 关键:启用对齐输出开关
3. 验证输出效果
使用正确的模型和参数后,返回的结果会包含字符/单词级的细粒度chunks,同时还会附带alignment字段,里面是每个token对应的时间戳映射,你可以根据需求进一步处理。
不需要更新或重建transformers.js本身,仅需替换模型、调整参数即可实现需求。
内容的提问来源于stack exchange,提问作者Yoz
相关产品推荐
相关产品推荐

