W
Wav2vec2 Large Xlsr Open Brazilian Portuguese
由 lgris 开发
这是一个针对巴西葡萄牙语微调的 Wav2vec 2.0 模型,使用了多个开放巴西葡萄牙语数据集进行训练,包括 Common Voice、MLS、CETUC 等。
下载量 395
发布时间 : 3/2/2022
模型介绍
内容详情
替代品
模型简介
该模型是一个自动语音识别(ASR)模型,专门针对巴西葡萄牙语进行了优化,能够将葡萄牙语语音转换为文本。
模型特点
多数据集训练
结合了多个巴西葡萄牙语数据集(CETUC、MLS、VoxForge、Common Voice 和 Lapsbm)进行训练,提高了模型的泛化能力。
高性能
在 Common Voice 测试集上取得了 12.9% 的词错误率(WER),表现出色。
开放数据
完全基于开放数据集训练,确保了模型的透明性和可重复性。
模型能力
巴西葡萄牙语语音识别
长音频处理
多种口音适应
使用案例
语音转文字
语音转录
将巴西葡萄牙语语音内容转换为文字记录
在标准测试集上达到12.9%的词错误率
辅助技术
语音控制应用
为巴西葡萄牙语用户提供语音控制界面
语言: 葡萄牙语
数据集:
- common_voice
- mls
- cetuc
- lapsbm
- voxforge
评估指标: - wer
标签: - 音频
- 语音
- wav2vec2
- pt
- 葡萄牙语语音语料库
- 自动语音识别
- 语音
- PyTorch
- hf-asr-leaderboard
许可证: apache-2.0
模型索引: - 名称: Lucas Gris XLSR Wav2Vec2 Large 53 巴西葡萄牙语
结果:- 任务:
名称: 语音识别
类型: 自动语音识别
指标:- 名称: 测试 WER
类型: wer
值: 12.905054857823264%
- 名称: 测试 WER
- 任务:
使用开放巴西葡萄牙语数据集的 Wav2vec 2.0
这是一个针对巴西葡萄牙语微调的 Wav2vec 模型演示,使用了以下数据集:
- CETUC: 包含约 145 小时的巴西葡萄牙语语音,由 50 名男性和 50 名女性发音者录制,每人朗读约 1,000 个从 CETEN-Folha 语料库中选出的语音平衡句子。
- Multilingual Librispeech (MLS): 一个多语言的大规模数据集。MLS 基于公共领域的 LibriVox 有声书录音。该数据集包含总计 6,000 小时的多语言转录数据。本工作使用的葡萄牙语数据集(主要为巴西变体)链接在此,包含约 284 小时的语音,来自 62 名发音者朗读的 55 本有声书。
- VoxForge: 一个旨在构建开放声学模型数据集的项目。该语料库包含约 100 名发音者和 4,130 条巴西葡萄牙语语音,采样率从 16kHz 到 44.1kHz 不等。
- Common Voice 6.1(仅训练集): 由 Mozilla 基金会提出的项目,旨在创建多种语言的开放数据集以训练 ASR 模型。志愿者通过官方网站捐赠和验证语音。本工作使用的葡萄牙语数据集(主要为巴西变体)为 6.1 版本(pt_63h_2020-12-11),包含约 50 小时的已验证语音和 1,120 名独特发音者。
- Lapsbm: “Falabrasil - UFPA” 是 Fala Brasil 小组用于基准测试巴西葡萄牙语 ASR 系统的数据集。包含 35 名发音者(10 名女性),每人朗读 20 个独特句子,总计 700 条巴西葡萄牙语语音。音频以 22.05 kHz 采样率录制,无环境控制。
这些数据集被合并以构建一个更大的巴西葡萄牙语数据集。除 Common Voice 的开发集和测试集分别用于验证和测试外,所有数据均用于训练。
原始模型使用 fairseq 进行微调。本笔记本使用的是原始模型的转换版本。原始 fairseq 模型的链接在此。
该模型训练了 80,000 次更新。
数据集的实例数量和帧数
下图展示了数据集的总体分布:
转录示例
文本 | 转录 |
---|---|
É comum os usuários confundirem software livre com software livre | É comum os usuares confunder em softwerlivr com softwerlivre |
Ele fez tanto ghostwriting que ele começa a se sentir como um fantasma também | Ele fez tanto golstraitn que ele começou a se sentir como um fantasma também |
Arnold apresentou um gráfico mostrando quantas cegonhas ele havia contado nos últimos dez anos | Arnold apresentou um gráfico mostrando quantas segonhas ele havia contado nos últimos dez anos |
Mais cedo ou mais tarde eles descobrirão como ler esses hieróglifos | Mais sedo ou mais tarde eles descobriram como de esses ierogrôficos |
Viver juntos compartilhar objetivos e ter um bom relacionamento | E ver juntos signafica viver juntos ou fartlhar objetivos ter um bom relacionamentoo |
Da mesma forma uma patente pode impedir que concorrentes desenvolvam produtos similares | Da mesma forma uma patente pode impedir que concorrentes desenvolva produtos similares |
Duas mulheres e uma menina levantam com troféus | Duas mulheres e uma menina levantam com trofés |
Esse acrobata de circo deve ter um sistema vestibular bem treinado pensou o espectador | Esse acrobata de cirko deve ter um sistema vestibular bemtreinado pensou o espectador |
Durante a exposição o tribunal pode fazer quaisquer perguntas ou esclarecimentos que considere apropriados | Durante a exposição o tribunal pode fazer quaisquer perguntas ou esclarecimentos que considere apropriado |
导入和依赖
%%capture
!pip install datasets
!pip install jiwer
!pip install torchaudio
!pip install transformers
!pip install soundfile
import torchaudio
from datasets import load_dataset, load_metric
from transformers import (
Wav2Vec2ForCTC,
Wav2Vec2Processor,
)
import torch
import re
import sys
准备
chars_to_ignore_regex = '[\,\?\.\!\;\:\"]' # noqa: W605
wer = load_metric("wer")
device = "cuda"
model_name = 'lgris/wav2vec2-large-xlsr-open-brazilian-portuguese'
model = Wav2Vec2ForCTC.from_pretrained(model_name).to(device)
processor = Wav2Vec2Processor.from_pretrained(model_name)
def map_to_pred(batch):
features = processor(batch["speech"], sampling_rate=batch["sampling_rate"][0], padding=True, return_tensors="pt")
input_values = features.input_values.to(device)
attention_mask = features.attention_mask.to(device)
with torch.no_grad():
logits = model(input_values, attention_mask=attention_mask).logits
pred_ids = torch.argmax(logits, dim=-1)
batch["predicted"] = processor.batch_decode(pred_ids)
batch["predicted"] = [pred.lower() for pred in batch["predicted"]]
batch["target"] = batch["sentence"]
return batch
测试
针对 Common Voice(域内)的测试
dataset = load_dataset("common_voice", "pt", split="test", data_dir="./cv-corpus-6.1-2020-12-11")
resampler = torchaudio.transforms.Resample(orig_freq=48_000, new_freq=16_000)
def map_to_array(batch):
speech, _ = torchaudio.load(batch["path"])
batch["speech"] = resampler.forward(speech.squeeze(0)).numpy()
batch["sampling_rate"] = resampler.new_freq
batch["sentence"] = re.sub(chars_to_ignore_regex, '', batch["sentence"]).lower().replace("’", "'")
return batch
ds = dataset.map(map_to_array)
result = ds.map(map_to_pred, batched=True, batch_size=1, remove_columns=list(ds.features.keys()))
print(wer.compute(predictions=result["predicted"], references=result["target"]))
for pred, target in zip(result["predicted"][:10], result["target"][:10]):
print(pred, "|", target)
0.12905054857823264
nem o varanin os altros influmindo os de teterno um bombederster | nem o radar nem os outros instrumentos detectaram o bombardeiro stealth
pedir dinheiro é emprestado das pessoas do aldeia | pedir dinheiro emprestado às pessoas da aldeia
oito | oito
teno calcos | trancá-los
realizaram a investigação para resolver o problema | realizar uma investigação para resolver o problema
iotube ainda é a melhor plataforma de vídeos | o youtube ainda é a melhor plataforma de vídeos
menina e menino beijando nas sombras | menina e menino beijando nas sombras
eu sou o senhor | eu sou o senhor
duas metcas sentam-se para baixo randes jornais | duas mulheres que sentam-se para baixo lendo jornais
eu originalmente esperava | eu originalmente esperava
结果: 12.90%
针对 TEDx(域外)的测试
!gdown --id 1HJEnvthaGYwcV_whHEywgH2daIN4bQna
!tar -xf tedx.tar.gz
dataset = load_dataset('csv', data_files={'test': 'tedx/test.csv'})['test']
def map_to_array(batch):
speech, _ = torchaudio.load(batch["path"])
batch["speech"] = speech.squeeze(0).numpy()
batch["sampling_rate"] = resampler.new_freq
batch["sentence"] = re.sub(chars_to_ignore_regex, '', batch["sentence"]).lower().replace("’", "'")
return batch
ds = dataset.map(map_to_array)
result = ds.map(map_to_pred, batched=True, batch_size=1, remove_columns=list(ds.features.keys()))
print(wer.compute(predictions=result["predicted"], references=result["target"]))
for pred, target in zip(result["predicted"][:10], result["target"][:10]):
print(pred, "|", target)
0.35215851987208774
com isso a gente vê que essa rede de pactuação de de deparcerias nos remete a um raciocínio lógico que ao que a gente crê que é a prevenção | com isso a gente vê que essa rede de pactuação de parcerias nos remete a um raciocínio lógico que é o que a gente crê que é a prevenção
ente vai para o resultado | e aí a gente vai pro resultado
curiosidade hé o que eu descobri desde que comecei a fazer pesquisa lá no ensino médio | e a curiosidade é algo que descobri desde que comecei a fazer pesquisa lá no ensino médio
val des quemesho | há vários caminhos
que é uma opcissão por comer soldado | que é uma obsessão por comer saudável
isso é tão é forte algoltão universal que existem dados que mostram que setenta e cinco por cento das reuniões são dominadas pela voz masculina | e isso é tão forte é algo tão universal que existem dados que mostram que das reuniões são dominadas pela voz masculina
não era exatamente isso não estávamos deveto | e não era exatamente isso que nós estávamos a ver
durante meci do médio ofiz pesquisa estudei numa escola que chamam a fundação liberate ficava relativamente próximo daqui | durante o ensino médio eu fiz pesquisa estudei numa escola que se chama fundação liberato que fica relativamente próxima daqui
oito anos atrás eu fui apresentado por uma doença que até então eu não conhecia e que é bem provável que a maior parte de nós todos aqui não conheçamos | oito anos atrás fui apresentado para uma doença que até então eu não conhecia e que é bem provável que a maior parte de nós todos aqui não conheçamos
o terceiro é o museu do ripiopeco |
Voice Activity Detection
MIT
基于pyannote.audio 2.1版本的语音活动检测模型,用于识别音频中的语音活动时间段
语音识别
V
pyannote
7.7M
181
Wav2vec2 Large Xlsr 53 Portuguese
Apache-2.0
这是一个针对葡萄牙语语音识别任务微调的XLSR-53大模型,基于Common Voice 6.1数据集训练,支持葡萄牙语语音转文本。
语音识别
其他
W
jonatasgrosman
4.9M
32
Whisper Large V3
Apache-2.0
Whisper是由OpenAI提出的先进自动语音识别(ASR)和语音翻译模型,在超过500万小时的标注数据上训练,具有强大的跨数据集和跨领域泛化能力。
语音识别
支持多种语言
W
openai
4.6M
4,321
Whisper Large V3 Turbo
MIT
Whisper是由OpenAI开发的最先进的自动语音识别(ASR)和语音翻译模型,经过超过500万小时标记数据的训练,在零样本设置下展现出强大的泛化能力。
语音识别
Transformers

支持多种语言
W
openai
4.0M
2,317
Wav2vec2 Large Xlsr 53 Russian
Apache-2.0
基于facebook/wav2vec2-large-xlsr-53模型微调的俄语语音识别模型,支持16kHz采样率的语音输入
语音识别
其他
W
jonatasgrosman
3.9M
54
Wav2vec2 Large Xlsr 53 Chinese Zh Cn
Apache-2.0
基于facebook/wav2vec2-large-xlsr-53模型微调的中文语音识别模型,支持16kHz采样率的语音输入。
语音识别
中文
W
jonatasgrosman
3.8M
110
Wav2vec2 Large Xlsr 53 Dutch
Apache-2.0
基于facebook/wav2vec2-large-xlsr-53微调的荷兰语语音识别模型,在Common Voice和CSS10数据集上训练,支持16kHz音频输入。
语音识别
其他
W
jonatasgrosman
3.0M
12
Wav2vec2 Large Xlsr 53 Japanese
Apache-2.0
基于facebook/wav2vec2-large-xlsr-53模型微调的日语语音识别模型,支持16kHz采样率的语音输入
语音识别
日语
W
jonatasgrosman
2.9M
33
Mms 300m 1130 Forced Aligner
基于Hugging Face预训练模型的文本与音频强制对齐工具,支持多种语言,内存效率高
语音识别
Transformers

支持多种语言
M
MahmoudAshraf
2.5M
50
Wav2vec2 Large Xlsr 53 Arabic
Apache-2.0
基于facebook/wav2vec2-large-xlsr-53微调的阿拉伯语语音识别模型,在Common Voice和阿拉伯语语音语料库上训练
语音识别
阿拉伯语
W
jonatasgrosman
2.3M
37
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers

支持多种语言
L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers

英语
C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统
中文
R
uer
2,694
98
AIbase是一个专注于MCP服务的平台,为AI开发者提供高质量的模型上下文协议服务,助力AI应用开发。
简体中文