语言: 英文
数据集:
- librispeech_asr
标签:
- 音频
- 语音
- 自动语音识别
- hf-asr-leaderboard
许可证: apache-2.0
示例:
- 示例标题: Librispeech 样本 1
来源: https://cdn-media.huggingface.co/speech_samples/sample1.flac
- 示例标题: Librispeech 样本 2
来源: https://cdn-media.huggingface.co/speech_samples/sample2.flac
模型索引:
- 名称: sew-d-base-plus-400k-ft-ls100h
结果:
- 任务:
名称: 自动语音识别
类型: automatic-speech-recognition
数据集:
名称: LibriSpeech (clean)
类型: librispeech_asr
配置: clean
分割: test
参数:
语言: en
指标:
- 名称: 测试 WER
类型: wer
值: 4.34
- 任务:
名称: 自动语音识别
类型: automatic-speech-recognition
数据集:
名称: LibriSpeech (other)
类型: librispeech_asr
配置: other
分割: test
参数:
语言: en
指标:
- 名称: 测试 WER
类型: wer
值: 9.45
SEW-D-base+
SEW-D 由 ASAPP Research 开发
该基础模型基于 16kHz 采样的语音音频进行预训练。使用该模型时,请确保输入的语音数据也以 16kHz 采样。需要注意的是,该模型应在下游任务(如自动语音识别、说话人识别、意图分类、情感识别等)上进行微调。
论文: 语音识别无监督预训练中的性能与效率权衡
作者: Felix Wu, Kwangyoun Kim, Jing Pan, Kyu Han, Kilian Q. Weinberger, Yoav Artzi
摘要
本文研究了自动语音识别(ASR)预训练模型中的性能与效率权衡问题。我们聚焦于 wav2vec 2.0,并形式化了几种影响模型性能和效率的架构设计。综合所有观察结果,我们提出了 SEW(Squeezed and Efficient Wav2vec),这是一种在多种训练设置下显著提升性能和效率的预训练模型架构。例如,在 LibriSpeech 的 100h-960h 半监督设置下,SEW 相比 wav2vec 2.0 实现了 1.9 倍的推理加速,同时词错误率相对降低了 13.5%。在相似的推理时间下,SEW 在不同模型规模下将词错误率降低了 25-50%。
原始模型可在 https://github.com/asappresearch/sew#model-checkpoints 找到。
使用方法
要将音频文件转录为文本,可以按以下方式将模型作为独立的声学模型使用:
from transformers import Wav2Vec2Processor, SEWDForCTC
from datasets import load_dataset
import soundfile as sf
import torch
processor = Wav2Vec2Processor.from_pretrained("asapp/sew-d-base-plus-400k-ft-ls100h")
model = SEWDForCTC.from_pretrained("asapp/sew-d-base-plus-400k-ft-ls100h")
ds = load_dataset("patrickvonplaten/librispeech_asr_dummy", "clean", split="validation")
input_values = processor(ds[0]["audio"]["array"], return_tensors="pt").input_values
logits = model(input_values).logits
predicted_ids = torch.argmax(logits, dim=-1)
transcription = processor.batch_decode(predicted_ids)
评估
以下代码片段展示了如何在 LibriSpeech 的 "clean" 和 "other" 测试数据上评估 asapp/sew-d-base-plus-400k-ft-ls100h。
from datasets import load_dataset
from transformers import SEWDForCTC, Wav2Vec2Processor
import torch
from jiwer import wer
librispeech_eval = load_dataset("librispeech_asr", "clean", split="test")
model = SEWDForCTC.from_pretrained("asapp/sew-d-base-plus-400k-ft-ls100h").to("cuda")
processor = Wav2Vec2Processor.from_pretrained("asapp/sew-d-base-plus-400k-ft-ls100h")
def map_to_pred(batch):
input_values = processor(batch["audio"][0]["array"], sampling_rate=16000,
return_tensors="pt", padding="longest").input_values
with torch.no_grad():
logits = model(input_values.to("cuda")).logits
predicted_ids = torch.argmax(logits, dim=-1)
transcription = processor.batch_decode(predicted_ids)
batch["transcription"] = transcription
return batch
result = librispeech_eval.map(map_to_pred, batched=True, batch_size=1, remove_columns=["audio"])
print("WER:", wer(result["text"], result["transcription"]))
结果 (WER):
"clean" |
"other" |
4.34 |
9.45 |