语言:
- 意大利语
数据集:
- 通用语音
标签:
- 音频
- 自动语音识别
UniSpeech-Large-plus 意大利语版
微软的UniSpeech
该大模型基于16kHz采样的语音音频及音素标签进行预训练,并在1小时意大利语音素数据上微调。使用时请确保输入语音同样以16kHz采样,且文本已转换为音素序列。
论文:UniSpeech:统一语音表征学习——结合标注与无标注数据
作者:王成毅、吴宇、钱尧、Kenichi Kumatani、刘树杰、韦福如、曾迈克尔、黄学东
摘要
本文提出名为UniSpeech的统一预训练方法,通过多任务学习同时进行监督式音素CTC学习和音素感知对比自监督学习,生成的表征能更好捕捉与音素结构相关的信息,提升跨语言和跨领域的泛化能力。我们在公开CommonVoice语料库上评估了UniSpeech的跨语言表征学习效果,结果显示其相比自监督预训练和监督迁移学习,分别最高可降低13.4%和17.8%的相对音素错误率(所有测试语言平均值)。在领域迁移语音识别任务中,UniSpeech的迁移性同样得到验证,相较之前方法实现了6%的相对词错误率下降。
原始模型参见:https://github.com/microsoft/UniSpeech/tree/main/UniSpeech
使用说明
这是一个针对音素分类任务微调的语音模型。
推理示例
import torch
from datasets import load_dataset
from transformers import AutoModelForCTC, AutoProcessor
import torchaudio.functional as F
model_id = "microsoft/unispeech-1350-en-90-it-ft-1h"
sample = next(iter(load_dataset("common_voice", "it", split="test", streaming=True)))
resampled_audio = F.resample(torch.tensor(sample["audio"]["array"]), 48_000, 16_000).numpy()
model = AutoModelForCTC.from_pretrained(model_id)
processor = AutoProcessor.from_pretrained(model_id)
input_values = processor(resampled_audio, return_tensors="pt").input_values
with torch.no_grad():
logits = model(input_values).logits
prediction_ids = torch.argmax(logits, dim=-1)
transcription = processor.batch_decode(prediction_ids)
评估方法
from datasets import load_dataset, load_metric
import datasets
import torch
from transformers import AutoModelForCTC, AutoProcessor
model_id = "microsoft/unispeech-1350-en-90-it-ft-1h"
ds = load_dataset("mozilla-foundation/common_voice_3_0", "it", split="train+validation+test+other")
wer = load_metric("wer")
model = AutoModelForCTC.from_pretrained(model_id)
processor = AutoProcessor.from_pretrained(model_id)
with open("./testSeqs_uniform_new_version.text", "r") as f:
lines = f.readlines()
ids = [x.split("\t")[0] for x in lines]
ds = ds.filter(lambda p: p.split("/")[-1].split(".")[0] in ids, input_columns=["path"])
ds = ds.cast_column("audio", datasets.Audio(sampling_rate=16_000))
def decode(batch):
input_values = processor(batch["audio"]["array"], return_tensors="pt", sampling_rate=16_000)
logits = model(input_values).logits
pred_ids = torch.argmax(logits, axis=-1)
batch["prediction"] = processor.batch_decode(pred_ids)
batch["target"] = processor.tokenizer.phonemize(batch["sentence"])
return batch
out = ds.map(decode, remove_columns=ds.column_names)
per = wer.compute(predictions=out["prediction"], references=out["target"])
print("音素错误率", per)
贡献者
模型由cywang和patrickvonplaten贡献。
许可证
官方许可证参见此处
官方结果
参见UniSpeeech-L^{+} - it部分:
