Azure Speechのバッチ文字起こしで「Whisper Baseを使いたいのに、Models APIが{"values":[]}しか返さない」という相談が急増しています。本稿では、東海岸リージョン(East US)を前提に、原因の切り分けから有効化依頼、REST/CLI/コード例、マルチリンガル(タミル語 ta‑IN、ヒンディー語 hi‑IN など)の実装上の注意点まで、現場運用で役立つ具体手順を網羅的に解説します。
背景と問題の全体像
Azure Speechの新しいバッチ文字起こしでは、Whisper Baseなどのモデルが「Models API」で公開・選択できる設計です。しかし、East USの既存リソースでAPIを叩くと、{"values":[]}の空配列が返り、モデル選択ができない事象が報告されています。これにはいくつかの典型原因があり、順序立てて対処すればほぼ解消できます。
- リソース種別の誤り(Cognitive Services汎用アカウントで呼び出している)
- APIバージョンの不一致(プレビュー版の指定漏れ・旧APIを参照)
- サブスクリプション/リージョン単位の機能フラグ未付与
- エンドポイントURLやヘッダー(
Ocp-Apim-Subscription-Key等)の取り違え
先に結論(要点の整理)
最短で原因を特定したい方は、以下の順で確認してください。
- リソース種別:対象がSpeech Servicesか(認知サービス(Cognitive Services)では不可)。
- APIバージョン:
2024-05-15-previewを明示指定して呼び出しているか。 - 新規リソース:同リージョン(East US)に新規のSpeech Servicesを作って再テスト。
- サポート依頼:出ない場合はサブスクリプション/リージョンでWhisperが未有効。サポートに有効化依頼。
- 検証:有効化後、Models APIで
id: "whisper-base"が返ることを確認。
用語と前提の整理
- Speech Servicesリソース:音声系(STT/TTS)専用のリソース種別。Whisperはこれに紐づきます。
- Cognitive Services(汎用):複数AI機能をまとめたアカウント。Speechの新機能が表示されない場合があります。
- Models API:バッチ文字起こしで使用可能なモデル一覧を返すAPI。
- East US:本文は東海岸リージョン前提。エンドポイントは通常
https://<リソース名>.cognitiveservices.azure.com/形式です。
原因別チェック表(症状→確認→対処)
| 症状 | 主原因 | 最短の確認 | 対処 |
|---|---|---|---|
Models APIが{"values":[]} | リソース種別がCognitive Services | Azureポータルのリソース「種類」が「Speech Services」か確認 | Speech Servicesリソースを作成し直し、同じAPIを実行 |
| モデルが表示されない | APIバージョン不一致 | リクエストURLにapi-version=2024-05-15-previewが含まれるか | プレビュー版を明示し再実行 |
| 新規でも空配列 | 機能フラグ未付与(サブスクリプション/リージョン) | 同リージョンで別名リソースでも空か | サポートに「Whisper Base有効化」を依頼 |
| 401/403エラー | キーまたはロールの不備 | 正しいキー/エンドポイント/ロールの再確認 | アクセスポリシー調整・キー再発行 |
Azureポータルでの確認手順(リソース種別)
対象リソースの「概要」を開き、「種類」がSpeech Servicesになっていることを確認します。もしCognitive Servicesや「マルチサービス アカウント」等と表示されている場合は、Whisperが一覧に出ないのが正常です。この場合、同じサブスクリプション・同じリージョン(East US)で新しくSpeech Servicesを作成して試してください。
RESTによる即席ヘルスチェック(Models API)
下記のように呼び出し、valuesにwhisper-baseが含まれるか確認します。
GET https://<your-speech-resource>.cognitiveservices.azure.com/speechtotext/models?api-version=2024-05-15-preview
Ocp-Apim-Subscription-Key: <your-key>
レスポンスに次のようなエントリが出れば有効化済みです。
{
"id": "whisper-base",
"kind": "Transcription",
"displayName": "Whisper Base",
"description": "OpenAI Whisper base model for multilingual speech recognition",
"createdDateTime": "2024-06-10T00:00:00Z"
}
空配列({"values":[]})のままであれば、後述の「新規リソース作成」→「サポート依頼」の順で解消が見込めます。
APIバージョンの再確認と推奨バージョン
バッチ文字起こしの最新機能は2024-05-15-preview系で提供されています。URLクエリ文字列にこのバージョンを必ず付けてください。旧v3系のエンドポイント(例:/speechtotext/v3.1/...)へ誤って投げていると、Whisperモデルは列挙されません。
新規Speech Servicesリソースの作成とテスト
既存リソースが古い場合や機能フラグ未付与のケースでは、新規作成が有効です。作成時のポイント:
- リージョン:East USを選択(既存と同一条件で比較しやすい)。
- 名前規約:
会社-環境-地域-用途など、運用で識別しやすい命名。 - 価格レベル:商用用途ならS系を推奨。Free枠は検証向けで制限が多いことがあります。
- ネットワーク:プライベートエンドポイントやファイアウォールを使う場合は、後述のストレージSASも含め外向き通信要件を整理。
作成後、同じModels APIを叩いてwhisper-baseが列挙されるかを確認します。
サポート依頼のベストプラクティス(テンプレート付き)
新規リソースでも表示されない場合、Whisperがサブスクリプション/リージョンに対して未有効の可能性が高いです。以下のテンプレートでサポートチケットを発行します。
件名:Whisper Baseモデルの有効化依頼(East US)
対象サブスクリプションID:
対象リソース名:(種類:Speech Services、リージョン:East US)
現象:Models APIの応答が {"values": []} で、whisper-base が表示されません。
希望:当該サブスクリプション/East US で Whisper Base を有効化してください。
用途:多言語のバッチ文字起こし(例:ta-IN / hi-IN 音声)。
補足:APIバージョン 2024-05-15-preview で呼び出し済み、新規Speechリソースでも再現します。
依頼後は数営業日で機能が有効化され、Models APIにwhisper-baseが現れるようになります。
バッチ文字起こしの実行例(Whisper Base)
Whisper Baseが列挙されるようになったら、実ジョブを作成します。以下はta-IN(タミル語)とhi-IN(ヒンディー語)の自動判別を想定した例です。
POST https://<your-speech-resource>.cognitiveservices.azure.com/speechtotext/batch/transcriptions?api-version=2024-05-15-preview
Ocp-Apim-Subscription-Key: <your-key>
Content-Type: application/json
{
"displayName": "whisper-multilingual-ta-hi",
"description": "Whisper Baseで多言語バッチ文字起こし",
"model": {
"id": "whisper-base",
"kind": "Transcription"
},
"contentUrls": [
"https://.blob.core.windows.net//audio1.wav?",
"https://.blob.core.windows.net//audio2.mp3?"
],
"properties": {
"wordLevelTimestampsEnabled": true,
"diarizationEnabled": true,
"profanityFilterMode": "None",
"punctuationMode": "DictatedAndAutomatic",
"languageIdentification": {
"mode": "Automatic",
"candidateLocales": ["ta-IN", "hi-IN", "en-IN"]
},
"timeToLive": "P1D"
}
}
レスポンスのジョブIDを使ってGETすると、進行状況や出力URLを取得できます。完了後、結果(JSON/テキスト)から文・単語タイムスタンプや話者分離を参照できます。
実装時のポイント(多言語・品質・速度)
- 言語自動判別:誤判定を抑えるため、
candidateLocalesは実際に想定される言語に絞り込むのがおすすめです。 - サンプリングレート:16 kHz以上、モノラルPCMが安定。MP3や電話品質(8 kHz)でも動作しますが、精度は原音質に比例します。
- 話者分離:会議録では
diarizationEnabledを有効化。発話交替の多い会議ほど要件に合致します。 - 同時実行:多数ジョブ投入時は並列度を絞り、ストレージ帯域/SAS有効期限の設計を見直します。
- 結果の再利用:出力JSONから格納スキーマを設計しておくと、後続の要約・翻訳・インデキシングが楽になります。
エンドポイントとヘッダーの確認
| 項目 | 設定例 | 備考 |
|---|---|---|
| エンドポイント | https://<your-speech-resource>.cognitiveservices.azure.com | リソース固有ドメインを推奨(地域汎用ドメインではない) |
| モデル一覧 | /speechtotext/models?api-version=2024-05-15-preview | Whisper Baseが列挙されるか確認 |
| バッチ作成 | /speechtotext/batch/transcriptions?api-version=2024-05-15-preview | ジョブ作成(POST) |
| 認証ヘッダー | Ocp-Apim-Subscription-Key: <key> | キーはSpeech Servicesリソースのもの |
PowerShell/CLI/コードのスニペット
PowerShell(Models API)
$endpoint = "https://<your-speech-resource>.cognitiveservices.azure.com"
$key = "<your-key>"
$uri = "$endpoint/speechtotext/models?api-version=2024-05-15-preview"
$headers = @{ "Ocp-Apim-Subscription-Key" = $key }
Invoke-RestMethod -Uri $uri -Headers $headers -Method GET | ConvertTo-Json -Depth 10
Azure CLI(REST)
az rest --method get `
--headers "Ocp-Apim-Subscription-Key=<your-key>" `
--url "https://<your-speech-resource>.cognitiveservices.azure.com/speechtotext/models?api-version=2024-05-15-preview"
Python(requests)
import requests, json
endpoint = "https://.cognitiveservices.azure.com"
key = ""
# 1) モデル一覧
r = requests.get(
f"{endpoint}/speechtotext/models",
params={"api-version": "2024-05-15-preview"},
headers={"Ocp-Apim-Subscription-Key": key}
)
print("models:", r.status_code, r.text)
# 2) バッチ作成(Whisper Base)
payload = {
"displayName": "whisper-multilingual-ta-hi",
"description": "Whisper Base batch transcription",
"model": {"id": "whisper-base", "kind": "Transcription"},
"contentUrls": [
"https://.blob.core.windows.net//audio1.wav?"
],
"properties": {
"wordLevelTimestampsEnabled": True,
"diarizationEnabled": True,
"languageIdentification": {
"mode": "Automatic",
"candidateLocales": ["ta-IN", "hi-IN"]
}
}
}
r = requests.post(
f"{endpoint}/speechtotext/batch/transcriptions",
params={"api-version": "2024-05-15-preview"},
headers={"Ocp-Apim-Subscription-Key": key, "Content-Type": "application/json"},
data=json.dumps(payload))
print("create:", r.status_code, r.text)
よくある落とし穴(現場メモ)
- 地域コードの取り違え:
East USとEast US 2は別リージョンです。エンドポイントを間違えるとモデルが出ません。 - キーとエンドポイントの組み合わせ:別リソースのキーで呼び出すと403が返ることがあります。
- SAS有効期限切れ:ジョブ作成直後にSASが失効すると取り込みに失敗します。TTLはバッファ長めに。
- 大量一括投入:ストレージのスロットリングで遅延・失敗。コンテナ分割やリトライ間隔を調整。
- プライベート環境:SpeechとStorageの両方にプライベートエンドポイントを張る場合、DNS解決とFW許可をセットで設計。
エラー別トラブルシュート速引き
| HTTP | 状況 | 原因候補 | 対応 |
|---|---|---|---|
| 400 | リクエスト不正 | プロパティ名の不一致/URL誤り | APIバージョンとJSON構造を再確認 |
| 401 | 未認証 | キー欠落/無効 | 正しいキーをヘッダーに設定 |
| 403 | 権限不足 | 別リソースのキー利用/機能未有効 | キー紐付け再確認・有効化依頼 |
| 404 | 見つからない | エンドポイントのリソース名誤り | ドメイン名・リージョンを確認 |
| 429 | スロットリング | 同時実行/レート超過 | 指数バックオフでリトライ・並列数調整 |
品質向上の実践ノウハウ
- 短いクリップに分割:60~120秒程度で分割し並列処理。長音声の一発処理より安定し、再処理もしやすい。
- ノイズ対策:無音/雑音を事前カット。AGCやノイズ抑制を軽く入れると精度が向上します。
- 辞書・表記ゆれ:後処理で専門用語・人名の正規化辞書を当てると読みやすさが大幅に改善します。
- 時刻合わせ:ファイル名やメタに録音時刻を持たせると、議事録のタイムライン生成が容易です。
一時的な代替策(Whisperが使えない間)
有効化前でも、既存の標準モデルでバッチ文字起こしは可能です。ただし多言語の精度・堅牢性はWhisperに見劣りすることが多いため、業務要件が多言語であれば、早めの機能有効化申請を推奨します。暫定運用では以下の工夫で品質を底上げできます。
- 対象言語をできるだけ単一化し、言語設定を固定する(誤検出のリスク低減)。
- 音質の良い入力(16 kHz以上・モノラル・WAV)を優先。
- 短時間クリップ分割+失敗時の自動再投入(リトライ)を仕組み化。
監視と運用(ジョブ状態・メトリクス)
運用では、ジョブ状態の監視と失敗時の自動対応が重要です。
- 状態監視:ジョブIDに対する定期ポーリング(またはWebhook相当の仕組みがあれば活用)。
- 再実行ポリシー:429や一時的なネットワーク障害に対して指数バックオフで自動リトライ。
- ログ保全:APIレスポンス・入力SAS・コンテンツURLを監査目的で一定期間保持。
セキュリティとネットワーク設計
- 最小権限の原則:SASは読み取りに限定し、有効期限を最小に設定。
- プライベートアクセス:Private Link利用時はDNS解決とVNETルートを合わせ込む。ストレージ側のプライベートエンドポイントも忘れずに。
- キー管理:定期ローテーションを行い、Key Vault連携でアプリに安全に供給。
East USでの注意事項
- リージョン表記:ポータルでは「East US」、APIでは
eastus表記が使われますが、エンドポイントはリソース固有ドメインに合わせます。 - 容量とスロットリング:大規模処理は夜間や時間帯分散を検討。キューイングで平準化すると安定します。
検証チェックリスト(貼って使える)
- [ ]リソース種類がSpeech Servicesである
- [ ]
api-version=2024-05-15-previewで呼び出している - [ ]新規Speechリソース(East US)でも
{"values":[]}か再確認 - [ ]サポートに「Whisper Base有効化」を依頼済み(サブスクリプションID/リソース名を明記)
- [ ]Models APIに
id: "whisper-base"が出ている - [ ]ジョブ作成で
model.id="whisper-base"を指定し、成功する
FAQ
Q. 既存のCognitive Services(汎用)から切り替える必要がありますか?
A. はい。WhisperはSpeech Services専用です。新規にSpeechリソースを用意し、そちらのキーとエンドポイントで呼び出してください。
Q. Whisper Base以外(Small/Medium/Largeなど)も使えますか?
A. 提供状況はサブスクリプション/リージョンとAPIバージョンに依存します。まずはModels APIで列挙されるかを確認し、必要に応じてサポートへ可用性を問い合わせてください。
Q. ta‑IN/hi‑INの混在会話でも自動判別できますか?
A. 可能です。languageIdentificationで候補を絞り込むと精度が安定します。品質は音質や話者混在の度合いにも左右されます。
Q. 無料枠でも試せますか?
A. 仕様上は検証可能な場合がありますが、スループット・割当の制限に留意してください。商用運用ではS系ティアを推奨します。
まとめ
Whisper BaseがModels APIに出ない場合、①リソース種別(Speech Services 専用)②APIバージョン(2024-05-15-preview)③新規リソースによる再検証④サポートへの有効化依頼、の順に進めれば、ほとんどのケースは解決します。有効化後はwhisper-baseが列挙され、マルチリンガルのバッチ文字起こし(ta‑IN / hi‑IN など)を高品質に運用できます。最後にもう一度、Models APIでの出力確認をお忘れなく。
付録:コピペ用cURL集
モデル一覧
curl -sS -X GET \
-H "Ocp-Apim-Subscription-Key: <your-key>" \
"https://<your-speech-resource>.cognitiveservices.azure.com/speechtotext/models?api-version=2024-05-15-preview"
ジョブ作成(Whisper Base)
curl -sS -X POST \
-H "Ocp-Apim-Subscription-Key: <your-key>" \
-H "Content-Type: application/json" \
-d '{
"displayName": "whisper-multilingual",
"model": { "id": "whisper-base", "kind": "Transcription" },
"contentUrls": [
"https://<your-storage>.blob.core.windows.net/<container>/sample.wav?<SAS>"
],
"properties": {
"languageIdentification": {
"mode": "Automatic",
"candidateLocales": ["ta-IN", "hi-IN"]
}
}
}' \
"https://<your-speech-resource>.cognitiveservices.azure.com/speechtotext/batch/transcriptions?api-version=2024-05-15-preview"
ジョブ取得
curl -sS -X GET \
-H "Ocp-Apim-Subscription-Key: <your-key>" \
"https://<your-speech-resource>.cognitiveservices.azure.com/speechtotext/batch/transcriptions/<jobId>?api-version=2024-05-15-preview"
付録:プロパティ選択の目安
| プロパティ | 値例 | 効果 |
|---|---|---|
wordLevelTimestampsEnabled | true | 単語ごとの時刻を返す |
diarizationEnabled | true | 話者分離(スピーカーラベル)を付与 |
profanityFilterMode | None / Masked | 不適切語のマスク・抑制 |
punctuationMode | Automatic / DictatedAndAutomatic | 句読点の自動付与 |
languageIdentification | {"mode":"Automatic","candidateLocales":["ta-IN","hi-IN"]} | 候補言語を絞って自動判別 |
付録:サンプル応答の読み方
ジョブ完了時の応答には、結果ファイルへのURLや各種メタデータが含まれます。格納場所(SAS)の期限切れに注意し、ダウンロード後は自前ストレージへ保全してください。二次加工(要約・翻訳・検索インデックス化)を見据え、スキーマ設計を先に決めておくと後工程がスムーズです。
最後に(運用の地雷を避ける)
- スケーリング設計:上限近辺の負荷を長時間かけるとスロットリングが増えます。データ投入をバッチ化し、ピーク平準化を徹底。
- 再現性確保:同一オーディオでパラメータを固定して品質比較。変更点を1つずつ検証して差分を明確化。
- 監査の観点:誰がいつどの音声を処理したかを記録。後追い調査が容易になります。
ポイントまとめ
- WhisperはSpeech Services専用。Cognitive Servicesでは表示されません。
- APIは
2024-05-15-previewを明示。旧エンドポイントでは列挙されません。 - 新規リソースでも出なければ、サブスクリプション/リージョンの有効化をサポートへ依頼。
- 有効化後はModels APIに
id: "whisper-base"が現れるはずです。 - 多言語は
candidateLocalesを絞って精度と安定性を両立。

コメント