🚀 ruT5-ASR
このモデルは、ASRの出力(特にWav2Vec2-Large-Ru-Golosの出力)の誤りを修正するために、bond005によって訓練されました。モデルはruT5-baseに基づいています。
🚀 クイックスタート
✨ 主な機能
このモデルは、ASR出力の誤りを修正するために使用されます。具体的には、Wav2Vec2-Large-Ru-Golosの出力の誤りを修正することができます。
📦 インストール
このモデルを使用するには、transformers
とtorch
ライブラリが必要です。以下のコマンドでインストールできます。
pip install transformers torch
💻 使用例
基本的な使用法
ASR出力を修正するために、このモデルを以下のように独立したシーケンス-to-シーケンスモデルとして使用できます。
from transformers import T5ForConditionalGeneration, T5Tokenizer
import torch
def rescore(text: str, tokenizer: T5Tokenizer,
model: T5ForConditionalGeneration) -> str:
if len(text) == 0:
return ''
ru_letters = set('аоуыэяеёюибвгдйжзклмнпрстфхцчшщьъ')
punct = set('.,:/\\?!()[]{};"\'-')
x = tokenizer(text, return_tensors='pt', padding=True).to(model.device)
max_size = int(x.input_ids.shape[1] * 1.5 + 10)
min_size = 3
if x.input_ids.shape[1] <= min_size:
return text
out = model.generate(**x, do_sample=False, num_beams=5,
max_length=max_size, min_length=min_size)
res = tokenizer.decode(out[0], skip_special_tokens=True).lower().strip()
res = ' '.join(res.split())
postprocessed = ''
for cur in res:
if cur.isspace() or (cur in punct):
postprocessed += ' '
elif cur in ru_letters:
postprocessed += cur
return (' '.join(postprocessed.strip().split())).replace('ё', 'е')
tokenizer_for_rescoring = T5Tokenizer.from_pretrained('bond005/ruT5-ASR')
model_for_rescoring = T5ForConditionalGeneration.from_pretrained('bond005/ruT5-ASR')
if torch.cuda.is_available():
model_for_rescoring = model_for_rescoring.cuda()
input_examples = [
'уласны в москве интерне только в большом году что лепровели',
'мороз и солнце день чудесный',
'нейро сети эта харошо',
'да'
]
for src in input_examples:
rescored = rescore(src, tokenizer_for_rescoring, model_for_rescoring)
print(f'{src} -> {rescored}')
出力例
уласны в москве интерне только в большом году что лепровели -> у нас в москве интернет только в прошлом году что ли провели
мороз и солнце день чудесный -> мороз и солнце день чудесный
нейро сети эта харошо -> нейросети это хорошо
да -> да
🔧 技術詳細
このモデルは、SberDevices Golos、Common Voice 6.0(ロシア語部分)、およびRussian Librispeechのテストサブセットで評価されましたが、訓練はSberDevices Golosの訓練サブセットのみで行われました。他のデータセット(Russian LibrispeechやSOVA RuDevicesを含む)の評価スクリプトは、私のKaggleページhttps://www.kaggle.com/code/bond005/wav2vec2-t5-ru-eval で見ることができます。
📚 ドキュメント
評価結果
「純粋な」Wav2Vec2-Large-Ru-Golosとの比較(WER, %):
データセット名 |
純粋なASR |
リスコアリング付きASR |
Voxforge Ru |
27.08 |
40.48 |
Russian LibriSpeech |
21.87 |
23.77 |
Sova RuDevices |
25.41 |
20.13 |
Golos Crowd |
10.14 |
9.42 |
Golos Farfield |
20.35 |
17.99 |
CommonVoice Ru |
18.55 |
11.60 |
📄 ライセンス
このモデルは、Apache 2.0ライセンスの下で提供されています。