- Authors

- Name
- Youngju Kim
- @fjvbn20031
- 音声は要件がモデルより先に決まります
- STT: 多言語が必要な場合
- STT: 英語で速度と長さが必要な場合
- リアルタイムという語を正確に分解する
- 話者分離は別のモデルです
- TTS: 声をどこから持ってくるか
- 音声モデルの警告は飾りではありません
- コード例
- 選ぶ順序
- 自分で試す
- シリーズ案内
- 参考資料
モデル情報は2026-08-12にHugging Faceのページで直接確認しました。モデルカードとライセンスは変わりうるので、使用前に原本を再確認してください。
音声は要件がモデルより先に決まります
テキストモデルはとりあえず繋いで品質を比べられますが、音声はそうなりません。どの言語が入るか、音声がどれだけ長いか、結果が何秒で必要か、話者を分ける必要があるかが決まると、候補の大半は自然に絞られます。
そのためこの記事は、モデルを並べる前にその4つの軸を整理します。カードが提供する値の大半がこの軸に直接対応するからです。
STT: 多言語が必要な場合
| リポジトリ | license | サイズ | 言語 | カード記載の制約 |
|---|---|---|---|---|
openai/whisper-large-v3 | apache-2.0 | 1550M | 99言語 | 30秒の受容野、長い音声には逐次またはチャンクのアルゴリズムが必要 |
openai/whisper-large-v3-turbo | mit | 809M | 99言語 | デコード層が32から4へ減少、既定の状態でリアルタイム転写向けではない |
nvidia/canary-1b-flash | cc-by-4.0 | 883M | 英語、ドイツ語、フランス語、スペイン語 | 40秒未満の音声を想定して設計、タイムスタンプは実験的機能 |
2つのWhisper派生のライセンス表記が違う点は見落とされがちです。openai/whisper-large-v3 は apache-2.0、openai/whisper-large-v3-turbo は mit と表記されます。同じ系列でも同じ条件ではありません。
openai/whisper-large-v3-turbo のカードは、はるかに速い代わりに品質がわずかに落ちるとはっきり述べます。どちらを選ぶかは、聞き違い1語がどんな費用を生むかで決まります。字幕の下書きなら速度、医療記録や法的根拠なら正確さが優先です。
nvidia/canary-1b-flash は英語とドイツ語・フランス語・スペイン語の間の翻訳を双方向で支えると記します。ただしカードは、40秒未満の音声を想定して設計されていること、特殊文字を扱わないこと、逆正規化が必要になりうることも述べています。
STT: 英語で速度と長さが必要な場合
nvidia/parakeet-tdt-0.6b-v2 は cc-by-4.0 で6億パラメータ、FastConformerエンコーダとTDTデコーダの構成と記されています。実務上の強みはカードが挙げる2点です。一度に最大24分の音声区間を転写できること、そして文字・単語・区間単位のタイムスタンプに対応することです。
代わりに言語は英語のみです。そしてカードはNVIDIA NeMoの導入が必要だと述べます。パイプラインがtransformersだけで組まれているなら、ランタイムをもうひとつ抱える判断になります。カードは、転写が100パーセント正確とは限らず、言語と入力音声の特性で精度が変わるとも述べています。
リアルタイムという語を正確に分解する
リアルタイムが必要という要求は、たいてい3つのどれかです。発話が終わる前に途中結果が見えること、発話が終わって1秒以内に最終結果が出ること、会議が終わって数分以内に全体の結果が出ればよいこと。
Whisper系は3つめに最もよく合います。openai/whisper-large-v3 のカードは30秒の受容野を明記し、長い音声には逐次またはチャンクのアルゴリズムが必要だと述べ、openai/whisper-large-v3-turbo のカードは既定の状態でリアルタイム転写のために設計されたものではないと直接書きます。1つめの要求が本物なら、モデル選定よりストリーミング構成の設計が先です。
配布形式も遅延に効きます。Systran/faster-whisper-large-v3 は openai/whisper-large-v3 を ct2-transformers-converter でCTranslate2形式に変換したリポジトリで、重みはFP16で保存され、CTranslate2の compute_type オプションで変更できると記されています。同じモデルでもランタイムが違えば遅延特性が変わるということです。
話者分離は別のモデルです
議事録を作るなら、書き起こしだけでは半分です。誰が話したかを分けるのは別のモデルの仕事です。
pyannote/speaker-diarization-3.1 は mit と表記され、16kHzモノラルを前提とし、ステレオや多チャンネルはチャンネルを平均して自動的にモノラルへ落とし、異なるサンプリングレートは自動的に16kHzへ再変換すると記されています。話者数は num_speakers、min_speakers、max_speakers のオプションで調整できます。
このリポジトリはアクセス条件への同意と連絡先の共有を経ないとファイルを取得できません。自動配備パイプラインを書く前に確認すべき項目です。
TTS: 声をどこから持ってくるか
| リポジトリ | license | サイズ | 言語 | カード記載の特徴 |
|---|---|---|---|---|
hexgrad/Kokoro-82M | apache-2.0 | 82M | 8言語、54音声 | StyleTTS 2構成にISTFTNetボコーダ、デコーダのみ公開 |
coqui/XTTS-v2 | coqui-public-model-license | 明記なし | 17言語、韓国語を含む | 6秒の音声で音声複製、言語をまたぐ複製 |
SWivid/F5-TTS | cc-by-nc-4.0 | 明記なし | ページに明記なし | 学習データとしてEmiliaデータセットを表示 |
microsoft/speecht5_tts | mit | 明記なし | ページに明記なし | 話者x-vector埋め込みと別のボコーダが必要 |
TTSを選ぶときの最初の問いは、声をどこから持ってくるかです。hexgrad/Kokoro-82M のように用意された音声一覧から選ぶ方式なら判断は単純です。coqui/XTTS-v2 のように6秒の参照音声から複製する方式なら、その6秒をどう入手し、その話者が同意したかが技術的な問いより先に立ちはだかります。
microsoft/speecht5_tts は構成自体が組み立て式です。カードは話者x-vector埋め込みを入れる必要があり、microsoft/speecht5_hifigan ボコーダを一緒に読み込む必要があると述べます。リポジトリをひとつ繋げば終わりという形ではなく、対応言語を含めバイアス・リスク・限界・評価データの項目がカード上でMore Information Neededのまま残っています。
SWivid/F5-TTS のページには対応言語と機能の説明が明記されていません。この記事はその空欄を記憶で埋めていません。実際に使うには、リンクされたコードリポジトリと論文を自分で確認する必要があります。
音声モデルの警告は飾りではありません
音声は、カードの警告がそのまま設計制約になる度合いが他のどのモダリティより高い領域です。
openai/whisper-large-v3 のカードは、予測に実際には話されていない文が含まれうると明記し、反復的なテキストを生成する傾向と言語ごとに性能が一様でない点も併記します。同じカードは同意なく録音された音声を書き起こさないよう述べ、意思決定のような高リスク領域への配置を避けるよう書きます。openai/whisper-large-v3-turbo のカードは、訛りや方言によって性能が変わる点も付け加えます。
これらの文はそのまま要件になります。幻覚の可能性が明記されたモデルの出力を人の確認なしに確定記録にしてはならず、録音同意の手続きがないサービスはモデル選定以前に設計が誤っています。hexgrad/Kokoro-82M のカードが許諾された非著作権音声のみで学習したと述べ、このモデルを騙る偽サイトを警告しているのも同じ文脈です。
コード例
# 例: 長い音声をチャンク方式で転写します
from transformers import pipeline
asr = pipeline(
"automatic-speech-recognition",
model="openai/whisper-large-v3-turbo",
chunk_length_s=30,
return_timestamps=True,
)
result = asr("meeting.wav", generate_kwargs={"language": "korean"})
for chunk in result["chunks"][:3]:
print(chunk["timestamp"], chunk["text"])
話者分離は別のパイプラインとして付け、結果を時間軸で突き合わせます。
# 例: 話者区間を得て転写結果と時間軸で合わせます
from pyannote.audio import Pipeline
diarizer = Pipeline.from_pretrained(
"pyannote/speaker-diarization-3.1",
use_auth_token="hf_...",
)
for turn, _, speaker in diarizer("meeting.wav").itertracks(yield_label=True):
print(f"{turn.start:.1f}-{turn.end:.1f}", speaker)
選ぶ順序
- 対象言語を確定します。英語のみなら候補が大きく変わります。
- 音声長の分布を見て、カードの受容野と推奨長を超えるか確認します。
- リアルタイム要求を3つの具体的な場合のどれかに書き直します。
- 話者分離が必要なら、別モデルとゲート条件を一緒に計画します。
- 音声複製を使うなら、同意と権利の確認を技術判断より前に置きます。
- カードの幻覚・バイアス警告を、そのまま人の確認手順の要件に書き写します。
自分で試す
- ブラウザAIラボ — 小さな音声モデルをブラウザで動かし遅延を体感します。
- AIベンチマーク集 — 音声認識の評価指標が何を測るのか確認します。
- LLM GPUメモリ(VRAM)計算機 — 音声モデルと言語モデルを同じ機材に載せるときの容量を計算します。
シリーズ案内
- 前の記事: 韓国語に対応するオープンモデルとトークナイザのコスト
- 次の記事: ビジョンとマルチモーダル: 画像理解、OCR、VLM
参考資料
- 表のすべての値は2026-08-12に該当モデルのHugging Faceページから直接読みました。ページになかった項目は明記なしと書いています。
SWivid/F5-TTSの対応言語と機能はページに明記されていないため、この記事には書いていません。- ライセンス全文を自分で読み、商用利用は法務レビューを通してください。