Speech サービス API 向けの Docker コンテナーをインストールし、実行する

コンテナーを使用することにより、独自の環境で "一部の" Azure Cognitive Services Speech Servie API を実行できます。 コンテナーは、特定のセキュリティ要件とデータ ガバナンス要件に適しています。 この記事では、Speech コンテナーをダウンロード、インストール、実行する方法について説明します。

Speech コンテナーを使用すると、堅牢なクラウド機能とエッジの局所性の両方を実現するために最適化された音声認識アプリケーション アーキテクチャを構築できます。 利用できるコンテナーはいくつかあり、クラウドベースの Azure Speech Services と同じ価格が使用されます。

重要

標準音声合成の音声とテキスト読み上げコンテナーは、2021 年 8 月 31 日に廃止されました。 代わりにニューラル テキスト読み上げコンテナーを使用するようにアプリケーションを移行することを検討してください。 アプリケーションの更新の詳細については、標準音声から事前構築済みニューラル音声への移行に関するページを参照してください。

コンテナー 特徴 最新 リリースの状態
音声テキスト変換 中間結果を使用して、センチメントを分析し、リアルタイムの音声録音またはバッチ音声録音を文字起こしします。 3.6.0 一般公開
カスタム音声テキスト変換 Custom Speech ポータルのカスタム モデルを利用し、連続するリアルタイムの音声またはバッチ音声録音を、中間結果を含むテキストに文字起こしします。 3.6.0 一般公開
音声言語識別 オーディオ ファイルで話されている言語を検出します。 1.5.0 プレビュー
ニューラル テキスト読み上げ ディープ ニューラル ネットワーク テクノロジを使用してテキストを自然な響きの音声に変換することで、合成音声がより自然なものになります。 2.5.0 一般公開

前提条件

重要

  • Speech コンテナーを使用するには、オンライン要求を送信し、承認を受ける必要があります。 詳細については、「コンテナーを実行するための承認を要求する」セクションを参照してください。
  • "一般提供" されているコンテナーは、Microsoft の安定性とサポートの要件を満たしています。 "プレビュー" 段階のコンテナーはまだ開発中です。

Speech サービス コンテナーを使用する前に、次の前提条件を満たす必要があります。 Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。 必要なもの:

  • ホスト コンピューターに Docker がインストールされていること。 コンテナーが Azure に接続して課金データを送信できるように、Docker を構成する必要があります。
    • Windows では、Linux コンテナーをサポートするように Docker を構成することも必要です。
    • Docker の概念に関する基本的な知識が必要です。
  • 価格レベルが Free (F0) または Standard (S) の Speech サービス リソース

必須パラメーターの収集

すべての Cognitive Services のコンテナーに対して 3 つの主要なパラメーターが必須です。 Microsoft ソフトウェア ライセンス条項について、値 accept が示される必要があります。 エンドポイント URI と API キーも必要です。

エンドポイント URL

{ENDPOINT_URI} の値は、Azure portal の対応する Cognitive Service リソースの [概要] ページで入手できます。 [概要] ページに移動し、エンドポイントの上にマウスを合わせると、[クリップボードにコピー] アイコンが表示されます。 必要に応じて、エンドポイントをコピーして使用します。

後で使用するためのエンドポイント URI の収集を示すスクリーンショット。

キー

{API_KEY} の値はコンテナーを起動するために使用され、Azure portal で、対応する Cognitive Service リソースの [キー] ページで入手できます。 [キー] ページに移動し、[クリップボードにコピー] アイコンを選択します。

後で使用するための 2 つのキーのいずれかの取得を示すスクリーンショット。

重要

これらのサブスクリプション キーは、Cognitive Service API にアクセスするために使用されます。 キーを共有しないでください。 安全に保管してください。 たとえば、Azure Key Vault を使用します。 また、これらのキーを定期的に再生成することをお勧めします。 API 呼び出しを行うために必要なキーは 1 つだけです。 最初のキーを再生成するときに、2 番目のキーを使用してサービスに継続的にアクセスすることができます。

ホスト コンピューターの要件と推奨事項

ホストとは、Docker コンテナーを実行する x64 ベースのコンピューターのことです。 お客様のオンプレミス上のコンピューターを使用できるほか、次のような Azure 内の Docker ホスティング サービスを使用することもできます。

コンテナーの要件と推奨事項

次の表に、各 Speech コンテナーに割り当てるリソースの最小値と推奨値を示します。

コンテナー 最小値 推奨
音声テキスト変換 4 コア、4 GB メモリ 8 コア、6 GB のメモリ
カスタム音声テキスト変換 4 コア、4 GB メモリ 8 コア、6 GB のメモリ
音声言語識別 1 コア、1 GB のメモリ 1 コア、1 GB のメモリ
ニューラル テキスト読み上げ 6 コア、12 GB のメモリ 8 コア、16 GB のメモリ

各コアは少なくとも 2.6 ギガヘルツ (GHz) 以上にする必要があります。

コアとメモリは、docker run コマンドの一部として使用される --cpus--memory の設定に対応します。

注意

最小と推奨の割り当ては、Docker の制限に基づくもので、ホスト マシンのリソースに基づくものでは "ありません"。 たとえば、大規模な言語モデルの音声テキスト変換コンテナーのメモリ マップ部分です。 ファイル全体をメモリに収めることをお勧めします。その場合は、4 - 6 GB の追加になります。 また、モデルはメモリにページングされるため、いずれかのコンテナーの最初の実行にはより長い時間がかかる可能性があります。

Advanced Vector Extension のサポート

"ホスト" とは、Docker コンテナーを実行するコンピューターのことです。 ホストは、高度なベクター拡張機能 (AVX2) を サポートしている必要があります。 次のコマンドを使用して、Linux ホストでの AVX2 サポートを確認できます。

grep -q avx2 /proc/cpuinfo && echo AVX2 supported || echo No AVX2 support detected

警告

AVX2 をサポートするにはホスト コンピューターが必須です。 AVX2 サポートがないと、コンテナーは正しく機能しません

コンテナーを実行するための承認を要求する

コンテナーへのアクセスを要求するには、要求フォームに記入して送信します。

このフォームでは、ユーザー、会社、コンテナーを使用するユーザー シナリオに関する情報が要求されます。 フォームを送信すると、Azure Cognitive Services チームがそれを確認して、10 営業日以内に決定事項を含むメールを返信します。

重要

  • このフォームでは、Azure サブスクリプション ID に関連付けられているメール アドレスを使用する必要があります。
  • コンテナーの実行に使用する Azure リソースは、承認された Azure サブスクリプション ID で作成されている必要があります。
  • Microsoft からのアプリケーションの状態に関する更新については、電子メール (受信トレイと迷惑フォルダーの両方) を確認してください。

承認されると、Microsoft Container Registry (MCR) からコンテナーをダウンロードしてから、そのコンテナーを実行できるようになります。これについては、記事の後半で説明します。

お使いの Azure サブスクリプションが承認されていない場合は、コンテナーを実行することができません。

docker pull でコンテナー イメージを取得する

Speech のコンテナー イメージは、次のコンテナー レジストリで入手できます。

コンテナー リポジトリ
音声テキスト変換 mcr.microsoft.com/azure-cognitive-services/speechservices/speech-to-text:latest

ヒント

docker images コマンドを使用して、ダウンロードしたコンテナー イメージを一覧表示できます。 たとえば、次のコマンドは、ダウンロードした各コンテナー イメージの ID、リポジトリ、およびタグが表として書式設定されて表示されます。

docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}"

IMAGE ID         REPOSITORY                TAG
<image-id>       <repository-path/name>    <tag-name>

Speech コンテナー用の docker pull

音声テキスト変換コンテナー用の docker pull

Microsoft Container Registry からコンテナー イメージをダウンロードするには、docker pull コマンドを使用します。

docker pull mcr.microsoft.com/azure-cognitive-services/speechservices/speech-to-text:latest

重要

latest タグにより、en-US ロケールがプルされます。 追加のロケールについては、「音声テキスト変換ロケール」を参照してください。

音声テキスト変換ロケール

latest を除くすべてのタグは次の形式であり、大文字と小文字が区別されます。

<major>.<minor>.<patch>-<platform>-<locale>-<prerelease>

次のタグは、この形式の例です。

2.6.0-amd64-en-us

音声テキスト変換コンテナーのサポートされている全ロケールについては、「音声テキスト変換イメージ タグ」を参照してください。

コンテナーを使用する

コンテナーをホスト コンピューター上に用意できたら、次の手順を使用してコンテナーを操作します。

  1. 必要な課金設定を使用してコンテナーを実行します。 docker run コマンドの他のもご覧いただけます。
  2. コンテナーの予測エンドポイントに対するクエリを実行します

docker run でコンテナーを実行する

コンテナーを実行するには、docker run コマンドを使用します。 {Endpoint_URI}{API_Key} の値を取得する方法の詳細については、「必須パラメーターの収集」を参照してください。 docker run コマンドのその他のもご覧いただけます。

切断された環境でコンテナーを実行する

コンテナー バージョン 3.0.0 以降、一部のお客様は、インターネットにアクセスできない環境で音声テキスト変換コンテナーを実行できます。 詳細については、切断された環境での Cognitive Services コンテナーの実行に関するページを参照してください。

コンテナー バージョン 2.0.0 以降、一部のお客様は、インターネットにアクセスできない環境でニューラル テキスト 読み上げコンテナーを実行できます。 詳細については、切断された環境での Cognitive Services コンテナーの実行に関するページを参照してください。

標準音声テキスト変換コンテナーを実行するには、次の docker run コマンドを実行します。

docker run --rm -it -p 5000:5000 --memory 4g --cpus 4 \
mcr.microsoft.com/azure-cognitive-services/speechservices/speech-to-text \
Eula=accept \
Billing={ENDPOINT_URI} \
ApiKey={API_KEY}

このコマンドは、次の操作を行います。

  • コンテナー イメージから "音声テキスト変換" コンテナーを実行します。
  • 4 つの CPU コアと 4 GB のメモリを割り当てます。
  • TCP ポート 5000 を公開し、コンテナーに pseudo-TTY を割り当てます。
  • コンテナーの終了後にそれを自動的に削除します。 ホスト コンピューター上のコンテナー イメージは引き続き利用できます。

注意

コンテナーでは、GStreamer を使用した Speech SDK への圧縮オーディオ入力がサポートされます。 コンテナーに GStreamer をインストールするには、「Speech SDK でコーデック圧縮オーディオを使用する」での GStreamer に関する Linux の手順に従ってください。

音声テキスト変換出力でのダイアライゼーション

ダイアライゼーションは、既定で有効です。 応答でダイアライゼーションを取得するには、diarize_speech_config.set_service_property を使用します。

  1. 語句の出力形式を Detailed に設定します。

  2. ダイアライゼーションのモードを設定します。 サポートされているモードは IdentityAnonymous です。

    diarize_speech_config.set_service_property(
        name='speechcontext-PhraseOutput.Format',
        value='Detailed',
        channel=speechsdk.ServicePropertyChannel.UriQueryParameter
    )
    
    diarize_speech_config.set_service_property(
        name='speechcontext-phraseDetection.speakerDiarization.mode',
        value='Identity',
        channel=speechsdk.ServicePropertyChannel.UriQueryParameter
    )
    

    注意

    "Identity" モードでは "SpeakerId": "Customer" または "SpeakerId": "Agent" が返されます。 "Anonymous" モードでは "SpeakerId": "Speaker 1" または "SpeakerId": "Speaker 2" が返されます。

音声テキスト変換の出力のセンチメントを分析する

v2.6.0 以降の音声テキスト変換コンテナーでは、プレビュー版ではなく、言語サービス 3.0 API エンドポイントを使用する必要があります。 次に例を示します。

  • https://westus2.api.cognitive.microsoft.com/text/analytics/v3.0/sentiment
  • https://localhost:5000/text/analytics/v3.0/sentiment

Note

言語サービス v3.0 API は v3.0-preview.1 と下位互換性がありません。 最新のセンチメント機能のサポートを取得するには、v2.6.0 の音声テキスト変換コンテナー イメージと言語サービス v3.0 を使用します。

音声テキスト変換コンテナーの v2.2.0 から、出力に対してセンチメント分析 v3 API を呼び出すことができるようになりました。 感情分析を呼び出すには、言語サービス API リソース エンドポイントが必要です。 例:

  • https://westus2.api.cognitive.microsoft.com/text/analytics/v3.0-preview.1/sentiment
  • https://localhost:5000/text/analytics/v3.0-preview.1/sentiment

クラウド内の言語サービス エンドポイントにアクセスする場合は、キーが必要です。 言語サービス機能をローカルで実行している場合は、これを指定する必要がない可能性があります。

キーとエンドポイントは、次の例のように、引数として Speech コンテナーに渡されます。

docker run -it --rm -p 5000:5000 \
mcr.microsoft.com/azure-cognitive-services/speechservices/speech-to-text:latest \
Eula=accept \
Billing={ENDPOINT_URI} \
ApiKey={API_KEY} \
CloudAI:SentimentAnalysisSettings:TextAnalyticsHost={TEXT_ANALYTICS_HOST} \
CloudAI:SentimentAnalysisSettings:SentimentAnalysisApiKey={SENTIMENT_APIKEY}

このコマンドは、次の操作を行います。

  • 前のコマンドと同じ手順を実行します。
  • 感情分析の要求を送信するための言語サービス API エンドポイントとキーが格納されています。

音声テキスト変換の出力における Phraselist v2

v2.6.0 以降の音声テキスト変換コンテナーでは、独自のフレーズ (文全体または中間の語句) を使用して出力を取得できます。 たとえば、次の文の the tall man です。

  • "This is a sentence the tall man this is another sentence."

語句の一覧は、呼び出しを行うときに自分独自のフレーズを追加して構成できます。 次に例を示します。

    phrase="the tall man"
    recognizer = speechsdk.SpeechRecognizer(
        speech_config=dict_speech_config,
        audio_config=audio_config)
    phrase_list_grammer = speechsdk.PhraseListGrammar.from_recognizer(recognizer)
    phrase_list_grammer.addPhrase(phrase)
    
    dict_speech_config.set_service_property(
        name='setflight',
        value='xonlineinterp',
        channel=speechsdk.ServicePropertyChannel.UriQueryParameter
    )

追加する語句が複数ある場合は、句ごとに .addPhrase() を呼び出して、語句の一覧に追加します。

重要

このコンテナーを実行するには、EulaBilling、および ApiKey オプションを指定する必要があります。 そうでない場合、コンテナーは起動しません。 詳細については、「課金」を参照してください。

コンテナーの予測エンドポイントに対するクエリの実行

注意

複数のコンテナーを実行している場合は、一意のポート番号を使用します。

Containers SDK ホスト URL Protocol
標準音声テキスト変換とカスタム音声テキスト変換 ws://localhost:5000 WS
ニューラル テキスト読み上げ、音声言語の識別 http://localhost:5000 HTTP

WSS と HTTPS プロトコルの使用の詳細については、コンテナー セキュリティに関する記事を参照してください。

音声テキスト変換 (標準およびカスタム)

このコンテナーには、Speech SDK を介してアクセスされる websocket ベースのクエリ エンドポイント API が用意されています。 既定では、Speech SDK は、オンラインの音声サービスを使用します。 コンテナーを使用するには、初期化方法を変更する必要があります。

ヒント

コンテナーで Speech SDK を使用する場合は、Azure Speech リソースのサブスクリプション キーまたは認証ベアラー トークンを指定する必要はありません。

次の例を参照してください。

この Azure クラウド初期化呼び出しを使用する方法を

var config = SpeechConfig.FromSubscription("YourSubscriptionKey", "YourServiceRegion");

コンテナー ホストでこの呼び出しを使用する方法に変更します。

var config = SpeechConfig.FromHost(
    new Uri("ws://localhost:5000"));

感情を分析する

言語サービス API 資格情報をコンテナーに指定した場合は、Speech SDK を使用して、感情分析で音声認識要求を送信できます。 シンプルな形式または詳細な形式のいずれかを使用するよう、API 応答を構成できます。

注意

Speech サービス Python SDK の v1.13 では、感情分析の問題が特定されています。 Speech サービス Python SDK で感情分析を使用している場合は、v1.12.x 以前のバージョンを使用してください。

音声クライアントでシンプルな形式を使用するように構成するには、Simple.Extensions の値として "Sentiment" を追加します。 特定の言語サービス モデルのバージョンを選択する場合は、speechcontext-phraseDetection.sentimentAnalysis.modelversion プロパティの構成で 'latest' を置き換えます。

speech_config.set_service_property(
    name='speechcontext-PhraseOutput.Simple.Extensions',
    value='["Sentiment"]',
    channel=speechsdk.ServicePropertyChannel.UriQueryParameter
)
speech_config.set_service_property(
    name='speechcontext-phraseDetection.sentimentAnalysis.modelversion',
    value='latest',
    channel=speechsdk.ServicePropertyChannel.UriQueryParameter
)

Simple.Extensions は、応答のルート レイヤーでセンチメントの結果を返します。

{
   "DisplayText":"What's the weather like?",
   "Duration":13000000,
   "Id":"6098574b79434bd4849fee7e0a50f22e",
   "Offset":4700000,
   "RecognitionStatus":"Success",
   "Sentiment":{
      "Negative":0.03,
      "Neutral":0.79,
      "Positive":0.18
   }
}

センチメント分析を完全に無効にする場合は、sentimentanalysis.enabledfalse 値を追加します。

speech_config.set_service_property(
    name='speechcontext-phraseDetection.sentimentanalysis.enabled',
    value='false',
    channel=speechsdk.ServicePropertyChannel.UriQueryParameter
)

ニューラル テキスト読み上げ

コンテナーには、REST ベースのエンドポイント API が用意されています。 各種プラットフォーム、フレームワーク、言語向けに多数のサンプル ソース コード プロジェクトが用意されています。

ニューラル テキスト読み上げコンテナーでは、ダウンロードしたイメージ タグのロケールと音声を使用します。 たとえば、latest タグをダウンロードした場合、既定のロケールは en-US で、音声は AriaNeural になります。 そのうえで、{VOICE_NAME} 引数は en-US-AriaNeural となります。 次の SSML 例を参照してください。

<speak version="1.0" xml:lang="en-US">
    <voice name="en-US-AriaNeural">
        This text will get converted into synthesized speech.
    </voice>
</speak>

同じホスト上で複数のコンテナーを実行する

公開されているポートを使って複数のコンテナーを実行する予定の場合、必ず各コンテナーを別の公開されているポートで実行してください。 たとえば、最初のコンテナーをポート 5000 上で、2 番目のコンテナーを 5001 上で実行します。

このコンテナーと、別の Cognitive Services コンテナーをホスト上で一緒に実行できます。 同じ Cognitive Services コンテナーの複数のコンテナーを実行することもできます。

コンテナーが実行されていることを検証する

コンテナーが実行されていることを検証する方法は複数あります。 問題になっているコンテナーの "外部 IP" アドレスと公開ポートを特定し、任意の Web ブラウザーを開きます。 次の各種の要求 URL を使用して、コンテナーが実行中であることを確認します。 ここに示す要求例の URL は http://localhost:5000 ですが、実際のコンテナーは異なる可能性があります。 使用するコンテナーの外部 IP アドレスと公開ポートを基にしてください。

要求 URL 目的
http://localhost:5000/ コンテナーには、ホーム ページが用意されています。
http://localhost:5000/ready GET で要求することで、この URL により、コンテナーがモデルに対するクエリを受け取る準備ができていることを確認できます。 この要求は Kubernetes の liveness probe と readiness probe に対して使用できます。
http://localhost:5000/status これも GET で要求することで、この URL により、コンテナーを起動するために使用された API キーが有効であるかどうかを、エンドポイント クエリを発生させずに確認できます。 この要求は Kubernetes の liveness probe と readiness probe に対して使用できます。
http://localhost:5000/swagger コンテナーには、エンドポイントの完全なドキュメント一式と、 [Try it out](試してみる) の機能が用意されています。 この機能を使用すると、コードを一切記述することなく、お客様の設定を Web ベースの HTML フォームに入力したりクエリを実行したりできます。 クエリから戻った後、HTTP ヘッダーと HTTP 本文の必要な形式を示すサンプル CURL コマンドが得られます。

コンテナーのホーム ページ

コンテナーの停止

コンテナーをシャットダウンするには、コンテナーが実行されているコマンドライン環境で、Ctrl + C キーを押します。

トラブルシューティング

コンテナーを起動または実行したときに問題が発生することがあります。 出力マウントを使用し、ログ記録を有効にします。 こうすることにより、問題をトラブルシューティングするときに役立つログ ファイルをコンテナーで生成できます。

ヒント

トラブルシューティング情報とガイダンスの詳細については、「Cognitive Services コンテナーについてよくあるご質問 (FAQ)」を参照してください。

Cognitive Services コンテナーの実行で問題が発生している場合は、Microsoft 診断コンテナーを使用してみることができます。 このコンテナーを使用して、Cognitive Services コンテナーが想定どおりに機能しなくなる可能性がある、展開環境での一般的なエラーを診断します。

コンテナーを取得するには、次の docker pull コマンドを使用します。

docker pull mcr.microsoft.com/azure-cognitive-services/diagnostic

その後で、コンテナーを実行します。 {ENDPOINT_URI} をエンドポイントに置き換え、{API_KEY} をリソースへのキーに置き換えます。

docker run --rm mcr.microsoft.com/azure-cognitive-services/diagnostic \
Eula=accept \
Billing={ENDPOINT_URI} \
ApiKey={API_KEY}

コンテナーは、課金エンドポイントへのネットワーク接続をテストします。

課金

Speech コンテナーは、Azure アカウントの Speech リソースを使用して、Azure に課金情報を送信します。

コンテナーへのクエリは、 ApiKeyパラメーターに使用される Azure リソースの価格レベルで課金 されます。

Azure Cognitive Services コンテナーは、計測または課金エンドポイントに接続していないと、実行のライセンスが許可されません。 お客様は、コンテナーが常に課金エンドポイントに課金情報を伝えられるようにする必要があります。 Cognitive Services コンテナーによって、お客様のデータ (解析対象の画像やテキストなど) が Microsoft に送信されることはありません。

Azure に接続する

コンテナーには、実行する課金引数の値が必要です。 これらの値により、コンテナーは課金エンドポイントに接続することができます。 コンテナーから、約 10 ~ 15 分ごとに使用状況が報告されます。 許可された時間枠内でコンテナーが Azure に接続しなかった場合、コンテナーは引き続き実行されますが、課金エンドポイントが復元されるまでクエリには対応しません。 接続は、10 ~15 分の同じ時間間隔で、10 回試行されます。 10 回以内に課金エンドポイントに接続できなかった場合、コンテナーによる要求の処理は停止されます。 課金のために Microsoft に送信される情報の例については、Cognitive Services コンテナーについてよく寄せられる質問を参照してください。

課金引数

docker run コマンドは、次の 3 つのオプションのすべてに有効な値が指定された場合にコンテナーを起動します。

オプション 説明
ApiKey 課金情報を追跡するために使用される Cognitive Services リソースの API キー。
このオプションの値には、Billing に指定されたプロビジョニング済みのリソースの API キーが設定されている必要があります。
Billing 課金情報を追跡するために使用される Cognitive Services リソースのエンドポイント。
このオプションの値には、プロビジョニング済みの Azure リソースのエンドポイント URI が設定されている必要があります。
Eula お客様がコンテナーのライセンスに同意したことを示します。
このオプションの値は accept に設定する必要があります。

これらのオプションの詳細については、「コンテナーの構成」を参照してください。

まとめ

この記事では、Speech コンテナーの概念と、それらをダウンロード、インストール、および実行するためのワークフローについて説明しました。 要約すると:

  • Speech には、さまざまな機能を持つ、Docker 用の 4 つの Linux コンテナーが用意されています。
    • 音声テキスト変換
    • カスタム音声テキスト変換
    • ニューラル テキスト読み上げ
    • 音声言語識別
  • コンテナー イメージは、Azure のコンテナー レジストリからダウンロードされます。
  • コンテナー イメージを Docker で実行します。
  • REST API (テキスト読み上げのみ) と SDK (音声テキスト変換またはテキスト読み上げ) のどちらを使用するかにかかわらず、コンテナーのホスト URI を指定します。
  • コンテナーをインスタンス化するときは、課金情報を指定する必要があります。

重要

Cognitive Services コンテナーは、計測のために Azure に接続されていないと、実行のライセンスが許可されません。 お客様は、コンテナーが常に計測サービスに課金情報を伝えられるようにする必要があります。 Cognitive Services コンテナーによってお客様のデータ (解析対象の画像やテキストなど) が Microsoft に送信されることはありません。

次のステップ