音声文字起こし API と Whisper Large V3 / V3 Turbo を追加しました
音声文字起こし API /v1/audio/transcriptions の提供を開始し、最初のモデルとして whisper-large-v3 と whisper-large-v3-turbo を追加しました。音声ファイルをテキストに変換する API で、会議の議事録、動画の字幕、音声メモの検索インデックス作成などに使えます。単価は音声の長さに対して whisper-large-v3 が ¥0.03 / 秒(¥1.8 / 分)、whisper-large-v3-turbo が ¥0.025 / 秒(¥1.5 / 分)です(いずれも税込表示)。
文字起こしはトークンではなく音声の長さで課金します。1 秒未満は切り上げ、最低 1 秒として計算し、レスポンスの usage.seconds に課金した秒数をそのまま返します。1 時間の会議録音なら whisper-large-v3 で ¥108、whisper-large-v3-turbo で ¥90 です。
特徴
99 言語に対応した多言語の文字起こし
Whisper は OpenAI が公開した音声認識モデルで、重みは Hugging Face で MIT ライセンスのもと公開されています。日本語を含む 99 言語に対応し、language を省略すると音声から言語を自動判定します。言語が分かっているときは language: "ja" のように指定した方が安定します。
V3 と V3 Turbo の使い分け
whisper-large-v3 は 15.5 億パラメータのフルモデルで、精度を優先する用途向けです。whisper-large-v3-turbo は V3 のデコーダを 32 層から 4 層に刈り込んだ 8.1 億パラメータの派生モデルで、わずかな精度の低下と引き換えに処理が速くなります。長い録音を大量に処理するときや、応答の速さが重要なときは Turbo が向いています。
タイムスタンプ付きの出力
response_format に verbose_json を指定すると、区間ごとの開始・終了秒が入った segments が返ります。timestamp_granularities[]=word を足すと単語単位のタイムスタンプも words に入ります。字幕ファイルの生成や、文字起こし結果から該当箇所の音声へジャンプする UI に使えます。
ベンチマーク(Open ASR Leaderboard)
Hugging Face の Open ASR Leaderboard は、英語の公開データセット 8 種で音声認識モデルの単語誤り率(WER、低いほど良い)を揃った条件で測定しています。下記は各モデルカードに記録されたスコア(V3・V3 Turbo)です。
| データセット | Large V3 | V3 Turbo |
|---|---|---|
| 平均 WER | 7.44 | 7.83 |
| LibriSpeech clean | 2.01 | 2.10 |
| LibriSpeech other | 3.91 | 4.24 |
| TED-LIUM | 3.86 | 3.57 |
| SPGISpeech | 2.94 | 2.97 |
| GigaSpeech | 10.02 | 10.14 |
| Earnings-22 | 11.29 | 11.63 |
| VoxPopuli | 9.54 | 11.87 |
| AMI | 15.95 | 16.13 |
平均 WER は V3 が 7.44、V3 Turbo が 7.83 で、差は 0.4 ポイントです。TED-LIUM では Turbo が V3 を上回る一方、VoxPopuli では 2.3 ポイント、LibriSpeech other では 0.3 ポイント V3 に届いていません。雑音の多い会議音声(AMI)はどちらも 16% 前後で、クリーンな読み上げ音声(LibriSpeech clean)の 2% とは条件によって大きな差があります。
スコアはいずれも英語データセットの測定で、日本語の精度を示すものではありません。Open ASR Leaderboard は Hugging Face が運営する第三者のベンチマークで、OpenAI 自身の公表値ではありません。
使い方
model に whisper-large-v3 または whisper-large-v3-turbo を指定し、multipart/form-data で音声ファイルを送ります。
curl https://api.router.supa.ai/v1/audio/transcriptions \
-H "Authorization: Bearer supa_..." \
-F file="@meeting.mp3" \
-F model="whisper-large-v3" \
-F language="ja"
OpenAI SDK の audio.transcriptions.create がそのまま使えます。
from openai import OpenAI
client = OpenAI(
base_url="https://api.router.supa.ai/v1",
api_key="supa_...",
)
with open("meeting.mp3", "rb") as f:
resp = client.audio.transcriptions.create(
model="whisper-large-v3-turbo",
file=f,
language="ja",
)
print(resp.text)
レスポンスは既定で { "text": "...", "usage": { "type": "duration", "seconds": 3 } } の形です。response_format に text を指定すると本文だけがプレーンテキストで返ります。
注意点
- ファイルの上限は 25 MB です。 128 kbps の MP3 で約 25 分が目安です。長い録音は分割して送ってください。非圧縮の WAV は同じ長さでも大きくなるため、MP3 や Opus などの圧縮形式を推奨します
- テキスト生成の
GET /v1/modelsには含まれません。 文字起こしは別サーフェスのため、対応モデルはGET /v1/audio/modelsで確認してください。/v1/chat/completionsにwhisper-large-v3を指定するとエラーになります - 定額プラン(HAI Go / HAI Go Plus / HAI Go Max / HAI Go Uncensored)の対象外です。 クレジットからの従量課金でご利用いただけます
response_formatはjson(既定)/verbose_json/textのいずれかです。srtとvttには対応していません。字幕ファイルはverbose_jsonのsegmentsから組み立ててください- ストリーミングには対応していません。1 ファイルの処理は同期で返り、長い音声ほど待ち時間が伸びます
- 対応形式は mp3 / mp4 / m4a / wav / flac / ogg / webm です。音声として読めないファイルは 400 エラーになり、課金されません
- 音声ファイルと文字起こし結果はゼロデータ保持(ZDR)の対象で、処理後に保存しません。利用履歴に残るのは課金した秒数と料金だけです