语言:
- 英语
- 中文
- 德语
- 西班牙语
- 俄语
- 韩语
- 法语
- 日语
- 葡萄牙语
- 土耳其语
- 波兰语
- 加泰罗尼亚语
- 荷兰语
- 阿拉伯语
- 瑞典语
- 意大利语
- 印尼语
- 印地语
- 芬兰语
- 越南语
- 希伯来语
- 乌克兰语
- 希腊语
- 马来语
- 捷克语
- 罗马尼亚语
- 丹麦语
- 匈牙利语
- 泰米尔语
- 挪威语
- 泰语
- 乌尔都语
- 克罗地亚语
- 保加利亚语
- 立陶宛语
- 拉丁语
- 毛利语
- 马拉雅拉姆语
- 威尔士语
- 斯洛伐克语
- 泰卢固语
- 波斯语
- 拉脱维亚语
- 孟加拉语
- 塞尔维亚语
- 阿塞拜疆语
- 斯洛文尼亚语
- 卡纳达语
- 爱沙尼亚语
- 马其顿语
- 布列塔尼语
- 巴斯克语
- 冰岛语
- 亚美尼亚语
- 尼泊尔语
- 蒙古语
- 波斯尼亚语
- 哈萨克语
- 阿尔巴尼亚语
- 斯瓦希里语
- 加利西亚语
- 马拉地语
- 旁遮普语
- 僧伽罗语
- 高棉语
- 绍纳语
- 约鲁巴语
- 索马里语
- 南非荷兰语
- 奥克语
- 格鲁吉亚语
- 白俄罗斯语
- 塔吉克语
- 信德语
- 古吉拉特语
- 阿姆哈拉语
- 意第绪语
- 老挝语
- 乌兹别克语
- 法罗语
- 海地克里奥尔语
- 普什图语
- 土库曼语
- 新挪威语
- 马耳他语
- 梵语
- 卢森堡语
- 缅甸语
- 藏语
- 他加禄语
- 马尔加什语
- 阿萨姆语
- 鞑靼语
- 夏威夷语
- 林加拉语
- 豪萨语
- 巴什基尔语
- 爪哇语
- 巽他语
标签:
- 音频
- 自动语音识别
- 国际音标
- 语音学
小部件:
- 示例标题: Librispeech 样本1
来源: https://cdn-media.huggingface.co/speech_samples/sample1.flac
- 示例标题: Librispeech 样本2
来源: https://cdn-media.huggingface.co/speech_samples/sample2.flac
模型索引:
- 名称: ipa-whisper-base
结果:
- 任务:
名称: 自动语音识别
类型: automatic-speech-recognition
数据集:
名称: LibriSpeech (clean)
类型: librispeech_asr
配置: clean
分割: test
参数:
语言: en
指标:
- 名称: 测试WER
类型: wer
值: 99999999999999
- 任务:
名称: 自动语音识别
类型: automatic-speech-recognition
数据集:
名称: LibriSpeech (other)
类型: librispeech_asr
配置: other
分割: test
参数:
语言: en
指标:
- 名称: 测试WER
类型: wer
值: 99999999999999
- 任务:
名称: 自动语音识别
类型: automatic-speech-recognition
数据集:
名称: Common Voice 11.0
类型: mozilla-foundation/common_voice_11_0
配置: hi
分割: test
参数:
语言: hi
指标:
- 名称: 测试WER
类型: wer
值: 99999999999999
管道标签: automatic-speech-recognition
许可证: apache-2.0
基础模型:
- openai/whisper-base
Whisper IPA
Whisper 是一个预训练的自动语音识别(ASR)和语音翻译模型。基于15000个标记合成国际音标(IPA)数据的音频(使用goruut 0.6.2音素生成器生成)进行微调后,Whisper模型展现出强大的泛化能力,能够适应多种语言、数据集和领域,无需额外微调。
Whisper由OpenAI的Alec Radford等人在论文《通过大规模弱监督实现鲁棒语音识别》中提出。原始代码仓库可在此处找到。
免责声明:本模型卡部分内容由Hugging Face团队撰写,部分内容复制自原始模型卡。
微调详情
- 微调耗时20小时44分钟16秒
- 训练数据为15000个音频样本
- 使用NVIDIA 3090ti GPU(24GB显存)
- 基于Common Voice 21中70多种语言的15000个随机音频样本进行微调
模型详情
Whisper是基于Transformer的编码器-解码器模型,也称为序列到序列模型。它使用大规模弱监督标注的68万小时语音数据进行训练。
模型分为仅英语数据和多语言数据训练版本。仅英语模型专注于语音识别任务,多语言模型则同时训练语音识别和语音翻译。语音识别任务中,模型预测与音频相同语言的文本;语音翻译任务中,模型预测与音频不同语言的文本。
Whisper提供五种不同规模的预训练配置。前四种规模提供仅英语和多语言版本,最大规模仅提供多语言版本。所有十种预训练模型均可在Hugging Face Hub获取。模型配置如下表所示:
规模 |
参数量 |
仅英语版本 |
多语言版本 |
tiny |
39 M |
✓ |
✓ |
base |
74 M |
✓ |
✓ |
small |
244 M |
✓ |
✓ |
medium |
769 M |
✓ |
✓ |
large |
1550 M |
x |
✓ |
large-v2 |
1550 M |
x |
✓ |
使用方法
转录音频样本时,需配合WhisperProcessor
使用。
WhisperProcessor
功能包括:
- 预处理音频输入(转换为对数梅尔频谱供模型使用)
- 后处理模型输出(将标记转换为文本)
模型通过传递适当的"上下文标记"来执行特定任务(转录或翻译)。这些标记在解码过程开始时提供给解码器,顺序如下:
- 转录始终以
<|startoftranscript|>
标记开始
- 第二个标记是语言标记(如英语为
<|en|>
)
- 第三个标记是"任务标记":
<|transcribe|>
表示语音识别,<|translate|>
表示语音翻译
- 若不需时间戳预测,则添加
<|notimestamps|>
标记
典型上下文标记序列示例:
<|startoftranscript|> <|en|> <|transcribe|> <|notimestamps|>
这指示模型以英语进行语音识别解码,且不预测时间戳。
这些标记可强制或非强制使用。强制使用时,模型必须在每个位置预测特定标记,从而控制输出语言和任务;非强制使用时,模型自动预测输出语言和任务。
设置上下文标记示例:
model.config.forced_decoder_ids = WhisperProcessor.get_decoder_prompt_ids(language="english", task="transcribe")
这将强制模型以英语执行语音识别。
转录
语音转国际音标
此例中上下文标记为非强制,模型自动预测输出语言(英语)和任务(转录)。
>>> from transformers import WhisperProcessor, WhisperForConditionalGeneration
>>> from datasets import load_dataset
>>>
>>> processor = WhisperProcessor.from_pretrained("neurlang/ipa-whisper-base")
>>> model = WhisperForConditionalGeneration.from_pretrained("neurlang/ipa-whisper-base")
>>> model.config.forced_decoder_ids = None
>>> model.config.suppress_tokens = []
>>> model.generation_config.forced_decoder_ids = None
>>> model.generation_config._from_model_config = True
>>>
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> sample = ds[0]["audio"]
>>> input_features = processor(sample["array"], sampling_rate=sample["sampling_rate"], return_tensors="pt").input_features
>>>
>>> predicted_ids = model.generate(input_features)
>>>
>>> transcription = processor.batch_decode(predicted_ids, skip_special_tokens=False)
['mˈɪstɚ kwˈɪltɚ ˈɪz ðə ˈeɪ pˈɑsəl ˈʌv ðə ˈmɪdəl klˈæsɪz ˈænd wˈɪɹ glæd tˈu ˈælkəm ˈhɪz gˈʌsbəl']
>>> transcription = processor.batch_decode(predicted_ids, skip_special_tokens=True)
['mˈɪstɚ kwˈɪltɚ ˈɪz ðə ˈeɪ pˈɑsəl ˈʌv ðə ˈmɪdəl klˈæsɪz ˈænd wˈɪɹ glæd tˈu ˈælkəm ˈhɪz gˈʌsbəl']
通过设置skip_special_tokens=True
可去除转录开头的上下文标记。
长音频转录
Whisper模型设计上最多处理30秒音频。但通过分块算法,可转录任意长度音频。这通过Transformers的pipeline
方法实现。实例化管道时设置chunk_length_s=30
启用分块。启用分块后,管道可进行批量推理。还可通过传递return_timestamps=True
预测序列级时间戳:
>>> import torch
>>> from transformers import pipeline
>>> from datasets import load_dataset
>>> device = "cuda:0" if torch.cuda.is_available() else "cpu"
>>> pipe = pipeline(
>>> "automatic-speech-recognition",
>>> model="neurlang/ipa-whisper-base",
>>> chunk_length_s=30,
>>> device=device,
>>> )
>>> ds = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> sample = ds[0]["audio"]
>>> prediction = pipe(sample.copy(), batch_size=8)["text"]
"mˈɪstɚ kwˈɪltɚ ˈɪz ðə ˈeɪ pˈɑsəl ˈʌv ðə ˈmɪdəl klˈæsɪz ˈænd wˈɪɹ glæd tˈu ˈælkəm ˈhɪz gˈʌsbəl"
>>>
>>> prediction = pipe(sample.copy(), batch_size=8, return_timestamps=True)["chunks"]
Whisper未预测结束时间戳,这可能发生在音频在单词中间被截断时。同时确保生成过程中使用了WhisperTimeStampLogitsProcessor。
更多分块算法细节请参考博客文章ASR分块。
微调
预训练的Whisper模型展现出强大的跨数据集和领域泛化能力。但通过对特定语言和任务进行微调,可进一步提升预测能力。博客文章[使用🤗 Transformers微调Whisper](https://huggingface.co/blog/fine-tune-