?
サポート

クラウドベースのウェイクワード検証のストリーミング要件



概要

クラウドベースのウェイクワード検証は、ウェイクワードに似た音を持つ単語による誤起動を減らすことにより、Alexa対応製品のウェイクワードの精度を高めるための機能です。たとえば、「Alexa」の誤起動を引き起こす可能性がある単語には、次のようなものがあります。「Alex」、「election」、「Alexis」。クラウドベースのウェイクワード検証では、メディアによりウェイクワードが使われた場合も検出されます。たとえば、AmazonのCMで「Alexa」が使われた場合などです。

音声起動の製品は、製品のウェイクワードエンジンによりウェイクワードが検出されると、ユーザー音声のAVSへのストリーミングを開始します。ユーザーが話すのを止めるか、ユーザーのインテントが識別されてサービスがStopCaptureディレクティブを返すと、ストリームはクローズされます。クラウドベースのウェイクワード検証を機能させるには、AVSにストリーミングされるオーディオに正確に500ミリ秒のプリロールと、StopCaptureディレクティブが受信されるまでにキャプチャされたすべてのユーザー音声が含まれる必要があります。これにより、AVSがストリームに含まれるウェイクワードを検証できるようになり、誤起動による誤った応答の数を減らすことができます。

  • プリロール、つまり検出されたウェイクワードの開始の前にキャプチャされたオーディオは、録音の環境ノイズレベルを調整するために使用され、音声認識を強化します。
  • ストリームにウェイクワードを含めることで、AVSはクラウドベースのウェイクワード検証を実行できるようになり、誤起動(ウェイクワードを誤って認識する回数)を減らすことができます。
  • ウェイクワードがクラウドベースのウェイクワード検証中に検出されない場合、そのオーディオサンプルは破棄されます。

このドキュメントでは、オーディオサンプルを読み書きするための共有メモリリングバッファを実装する際の推奨事項、SpeechRecognizer.Recognizeメッセージ構造への、ウェイクワードの開始インデックスと終了インデックスおよびAVSにAlexaとの対話がどのように開始されたかを伝える新規のinitiatorパラメーターの追加に関する更新情報について説明しています。あくまで推奨事項であり、500ミリ秒のプリロールとウェイクワードの開始/終了インデックスの識別、ユーザーリクエスト全体のストリーミングという機能要件を提供できるのであれば、別の方法での実装も可能です。

ウェイクワードインデックス

RecognizeイベントはAVSにユーザー音声をストリーミングし、その音声を1つ以上のディレクティブに変換するのに使用されます。JSON形式のオブジェクトとバイナリオーディオ添付ファイルを含むマルチパートのメッセージです。上記で推奨したとおり、ストリームにはプリロール、ウェイクワード、ユーザー発話が含まれる必要があります。レイテンシーを低減するためにチャンキングすることをお勧めします。ストリームには、チャンクごとに10ミリ秒のキャプチャしたオーディオ(320バイト)を含めるようにしてください。

ウェイクワードを使用してユーザーのリクエストを開始した場合、Recognizeイベントに出現したウェイクワードの開始と終了のインデックスを含める必要があります。タイムスタンプはオーディオストリームの開始からの相対値で、単位はサンプル数です。

たとえば、500ミリ秒マークに開始して500ミリ秒かかるウェイクワードには、16 kHzサンプルレートで以下のインデックスが含まれます。

  • startIndexInSamples - 8000
  • endIndexInSamples - 16000

サンプルメッセージ

{
  "context": [
    {{Alerts.AlertsState}},
    {{AudioPlayer.PlaybackState}},        
    {{Speaker.VolumeState}},
    {{SpeechSynthesizer.SpeechState}},  
    {{SpeechRecognizer.RecognizerState}}
  ],
  "event": {
    "header": {
      "namespace": "SpeechRecognizer",
      "name": "Recognize",
      "messageId": "{{STRING}}",
      "dialogRequestId": "{{STRING}}"
    },
    "payload": {
      "profile": "{{STRING}}",
      "format": "{{STRING}}",
      "initiator": {
        "type": "{{STRING}}",
        "payload": {
          "wakeWordIndices": {
            "startIndexInSamples": {{LONG}},
            "endIndexInSamples": {{LONG}}
          }   
        }
      }
    }
  }
}

ペイロードのパラメーター

パラメーター 説明
profile 製品に関連付けられたAutomatic Speech Recognition(ASR)プロファイルを示します。AVSでは、さまざまな距離からのユーザー音声に最適化された3つのASRプロファイルをサポートします。
有効な値は以下のとおりです。"CLOSE_TALK""NEAR_FIELD""FAR_FIELD"
string
format キャプチャされたオーディオの形式を示します。
有効な値は以下のとおりです。"AUDIO_L16_RATE_16000_CHANNELS_1"
string
initiator AVSとの対話がどのように開始されたかについての情報を含みます。
重要: initiator は次の場合に必要です。i) クラウドベースのウェイクワード検証を使用するウェイクワード対応の製品の場合。ii) ExpectSpeechディレクティブ内に含まれている場合。
object
initiator.type AVSへのオーディオのストリーミングを開始するためにユーザーによって実施されるアクションを表します。
有効な値は以下のとおりです。"PRESS_AND_HOLD""TAP"、および"WAKEWORD"
string
initiator.payload 種類、開始と終了のインデックスなどのinitiatorに関する情報を含みます。 object
initiator.payload.wakeWordIndices このオブジェクトは、クラウドベースのウェイクワード検証を使用するウェイクワード対応の製品にのみ必要です。
wakeWordIndices には、startIndexInSamplesendIndexInSamplesが含まれます。
object
initiator.payload.wakeWordIndices.startIndexInSamples ウェイクワードが開始するオーディオストリーム内のインデックスを(サンプル数で)表します。開始インデックスと検出されたウェイクワードとの誤差は、50ミリ秒以内である必要があります。 long
initiator.payload.wakeWordIndices.endIndexInSamples ウェイクワードが終了するオーディオストリームのインデックスを(サンプル数で)表します。終了インデックスと検出されたウェイクワードの終了との誤差は、150ミリ秒以内である必要があります。 long

その他の情報については、クラウドベースのウェイクワード検証を有効にするを参照してください。

共有メモリリングバッファ

共有メモリリングバッファは、500ミリ秒のプリロール、ウェイクワード、クラウドベースのウェイクワード検証のためのユーザーリクエストといった、AVSに連続する発話をストリーミングするための要件を満たす実装の1つです。これによりレイテンシーと、オーディオサンプルをコピーする必要のある回数を低減できます。

以下の図はそのアプローチの1つであり、機能要件が満たされていれば別の実装方法も可能です。

Ring Buffer
  1. オーディオサブシステム - 通常は、録音デバイスからのストリームをオープンし、オーディオサンプルストリームを受信するAPIを提供するAdvanced Linux Sound Architecture(ALSA)などのミドルウェアです。
  2. オーディオキャプチャ - 録音デバイスをオープンし、共有メモリリングバッファにオーディオサンプルを書き込むプロセス。
  3. 共有メモリリングバッファ - スレッドセーフで、複数のプロセスからアクセス可能な共有メモリリングバッファオブジェクト。このメモリブロックへのアクセスは、少なくとも1つのライターと2つのリーダーを同時にサポートする必要があります。これらの実行ファイルは共有ライブラリとして実装することができます。
    • 書き込みAPI - 録音プロセスがオーディオサンプルを共有メモリリングバッファに書き込む際に使用します。サンプルを書き込む際は、最も古いオーディオサンプルから上書きしていきます。典型的なAPIの記述例は次のようになります: WriteSamples(BufferIn, BufferInLength)
    • 読み取りAPI - ウェイクワードエンジンとAVSクライアントが共有メモリリングバッファの特定の場所から読み取る際に使用します。典型的な実装例では、場所を64ビットのintで表します。たとえば、場所100から200個のサンプルを読み取ると、共有メモリリングバッファに書き込まれた100番目から300番目のサンプルを読み取ることになります。典型的なAPIの記述例は次のようになります: ReadSamples(BufferIn, BufferInLength): 新しいオーディオサンプルで上書きされた古い場所から読み取ると、意図しないサンプルが読み取られます。
  4. ウェイクワードエンジン - 共有メモリリングバッファに書き込まれたオーディオサンプルを読み取り、ウェイクワードが出現したオーディオサンプルを分析するコンポーネントです。オーディオサンプルの読み取りと処理の手順はループします。たとえば、ループで場所0からサンプルをN個読み取り、ウェイクワードが出現したサンプルを分析します。次のループでは、次のN個のサンプルを読み取って分析します。ウェイクワードの出現が検出されると、ウェイクワードは次の2つの場所を識別する必要があります: 1) ウェイクワードの開始 2) ウェイクワードの終了これらの値は、それぞれstartIndexInSamplesendIndexInSamplesとして保存されます。
  5. WakeWordDetectedSignal - ウェイクワードの出現が検出されたときにウェイクワードエンジンからAVSクライアントに送信される信号です。この信号には、startIndexInSamplesendIndexInSamplesの2つの場所が含まれます。
  6. AVS Client - クライアントはWakeWordDetectedSignalを受信し、startIndexInSamplesを抽出してから、場所startIndexInSamplesからオーディオサンプルを読み取ってAVSにストリーミングします。 - プリロールは、500ミリ秒に相当するサンプル数です。たとえば、オーディオサンプルが16キロヘルツ(kHz)のレートで録音された場合、プリロールは8,000サンプルになります。

次のステップ