🚀 NVIDIA FastConformer-Hybrid Large (fa)
このモデルは、ペルシャ語の音声を文字起こしします。FastConformer Transducer-CTCの「ラージ」バージョン(約1億1500万のパラメータ)で、Transducer(デフォルト)とCTCの2つの損失関数で学習されたハイブリッドモデルです。完全なアーキテクチャの詳細については、モデルアーキテクチャセクションとNeMoドキュメントを参照してください。
|
|
| 
🚀 クイックスタート
このモデルを使用するには、まずNVIDIA NeMoをインストールする必要があります。最新バージョンのPytorchをインストールした後、以下のコマンドを実行します。
pip install nemo_toolkit['all']
✨ 主な機能
- ペルシャ語の音声を文字起こしすることができます。
- FastConformer Transducer-CTCの「ラージ」バージョンで、約1億1500万のパラメータを持ちます。
- Transducer(デフォルト)とCTCの2つの損失関数で学習されたハイブリッドモデルです。
📦 インストール
NVIDIA NeMoのインストール
pip install nemo_toolkit['all']
💻 使用例
基本的な使用法
import nemo.collections.asr as nemo_asr
asr_model = nemo_asr.models.EncDecHybridRNNTCTCBPEModel.from_pretrained(model_name="nvidia/stt_fa_fastconformer_hybrid_large")
音声ファイルの文字起こし
output = asr_model.transcribe(['sample.wav'])
print(output[0].text)
複数の音声ファイルの文字起こし
Transducerモードでの推論
python [NEMO_GIT_FOLDER]/examples/asr/transcribe_speech.py
pretrained_name="nvidia/stt_fa_fastconformer_hybrid_large"
audio_dir="<DIRECTORY CONTAINING AUDIO FILES>"
CTCモードでの推論
python [NEMO_GIT_FOLDER]/examples/asr/transcribe_speech.py
pretrained_name="nvidia/stt_fa_fastconformer_hybrid_large"
audio_dir="<DIRECTORY CONTAINING AUDIO FILES>"
decoder_type="ctc"
📚 ドキュメント
入力
このモデルは、16000 Hzのモノラルチャンネルの音声ファイル(wav形式)を入力として受け付けます。
出力
このモデルは、与えられた音声サンプルに対して文字起こしされた文字列を出力します。
🔧 技術詳細
モデルアーキテクチャ
FastConformer [1] は、Conformerモデルの最適化バージョンで、8倍の深さ方向分離畳み込みダウンサンプリングを備えています。このモデルは、TransducerとCTCのデコーダ損失を同時に使用するマルチタスク設定で学習されています。FastConformerの詳細については、Fast-Conformer Model を、Hybrid Transducer-CTCの学習については、Hybrid Transducer-CTC を参照してください。
学習
NeMoツールキット [3] を使用して、数百エポック以上の学習を行いました。これらのモデルは、このサンプルスクリプト と このベースコンフィグ を使用して学習されました。
これらのモデルのトークナイザーは、学習セットのテキストトランスクリプトを使用して、このスクリプト で構築されました。
このモデルは、英語のFastConformer Hybrid (Transducer and CTC) Large P&Cモデル の重みで初期化され、ペルシャ語のデータでファインチューニングされました。
データセット
このモデルは、Mozilla CommonVoice Persian Corpus 15.0で学習されました。
検証済みのデータ全体を活用するために、標準の学習/検証/テスト分割は破棄され、カスタム分割に置き換えられました。カスタム分割は、以下の手順で再現できます。
- 同一のトランスクリプトを持つ発話をグループ化し、(トランスクリプトの占有率、トランスクリプト)のペアで発話を(昇順に)ソートする。
- 最初の10540個の発話をテストセットに選択する(元のサイズを維持するため)。
- 2番目の10540個の発話を検証セットに選択する。
- 残りのデータを学習セットに選択する。
トランスクリプトは、以下のスクリプトに従ってさらに正規化されました(空の結果は破棄されました)。
import unicodedata
import string
SKIP = set(
list(string.ascii_letters)
+ [
"=",
"ā",
"š",
"ة",
]
)
DISCARD = [
"(خنده)",
"!",
'"',
"#",
"&",
"'",
"(",
")",
",",
"-",
".",
":",
";",
"–",
"“",
"”",
"…",
"؟",
"،",
"؛",
"ـ",
"ً",
"ٌ",
"َ",
"ُ",
"ِ",
"ّ",
"ْ",
"ٔ",
"«",
"»",
]
REPLACEMENTS = {
"أ": "ا",
"ۀ": "ە",
"ك": "ک",
"ي": "ی",
"ى": "ی",
"ﯽ": "ی",
"ﻮ": "و",
"ے": "ی",
"ﺒ": "ب",
"ﻢ": "ﻡ",
"٬": " ",
"ە": "ه",
}
def maybe_normalize(text: str) -> str | None:
if set(text) & SKIP:
return None
text = " ".join(w for w in text.split() if not w.startswith("#"))
for lhs, rhs in REPLACEMENTS.items():
text = text.replace(lhs, rhs)
for tok in DISCARD:
text = text.replace(tok, "")
text = unicodedata.normalize("NFKC", text)
text = text.replace("ء", "")
return " ".join(t for t in text.split() if t)
パフォーマンス
自動音声認識モデルのパフォーマンスは、文字誤り率(CER)と単語誤り率(WER)を使用して測定されます。
このモデルは、Mozilla CommonVoice Persian 15.0のカスタム検証およびテスト分割で、以下のスコアを達成しています。
モデル |
%WER/CER 検証 |
%WER/CER テスト |
RNNTヘッド |
15.44 / 3.89 |
15.48 / 4.63 |
CTCヘッド |
13.18 / 3.38 |
13.16 / 3.85 |
制限事項
このモデルは公開されている音声データセットで学習されているため、モデルが学習していない専門用語や方言を含む音声に対しては、パフォーマンスが低下する可能性があります。また、アクセントのある音声に対しても、パフォーマンスが低下する可能性があります。
NVIDIA Riva: デプロイメント
NVIDIA Riva は、オンプレミス、すべてのクラウド、マルチクラウド、ハイブリッド、エッジ、および組み込み環境でデプロイ可能な高速化された音声AI SDKです。
さらに、Rivaは以下の機能を提供します。
- 独自のデータで数十万時間のGPUコンピューティング時間をかけて学習されたモデルチェックポイントを使用した、最も一般的な言語に対する世界クラスの即時精度
- ランタイムの単語ブースト(例:ブランドや製品名)および音響モデル、言語モデル、逆テキスト正規化のカスタマイズによる最高クラスの精度
- ストリーミング音声認識、Kubernetes互換のスケーリング、およびエンタープライズグレードのサポート
このモデルはまだRivaでサポートされていませんが、サポートされているモデルのリストはこちら です。
Rivaのライブデモ もチェックしてみてください。
📄 ライセンス
このモデルを使用するためのライセンスは、CC-BY-4.0 に準拠しています。モデルの公開およびリリースバージョンをダウンロードすることで、CC-BY-4.0 ライセンスの条件に同意したことになります。
参考文献
[1] Fast Conformer with Linearly Scalable Attention for Efficient Speech Recognition
[2] Google Sentencepiece Tokenizer
[3] NVIDIA NeMo Toolkit