?
サポート

クラウドベースのウェイクワード検証を有効化する方法

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

製品上のウェイクワードエンジンによって最初にウェイクワードが検出されると、クラウドで検証されます。誤起動が検出された場合、AVSはStopCaptureディレクティブをダウンチャネルで製品に送信し、オーディオストリームをクローズし、該当する場合はAlexaが聞き取りを終了したことを示すために青色のLEDを消すよう指示します。

以下のセクションでは、このサービスをサポートするのに必要な作業の詳細を説明します。

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

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

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

以下のドキュメントでは、オーディオサンプルの書き込みと読み取りを行う共有メモリリングバッファを実装する際の推奨事項、およびAVSに送信する各Recognizeイベントにウェイクワード検出の開始と終了のインデックスを含める際の仕様について説明します。

ドキュメントを読む >>

新規のコンテキストオブジェクトのクライアントコードを調整する: RecognizerState

Context は、AVSにクライアントコンポーネントの状態を伝えるのに使用されるコンテナです。クラウドベースのウェイクワード検証をサポートするには、Alexaとの対話がどう開始されるかにかかわらず、すべてのウェイクワード対応製品が、該当するそれぞれのイベントと共に、新規コンテキストオブジェクト、RecognizerStateを送信する必要があります。

contextを必要とするイベントのリストは以下のとおりです。

サンプルメッセージ


{
    "header": {
        "namespace": "SpeechRecognizer",
        "name": "RecognizerState"
    },
    "payload": {
        "wakeword": "ALEXA"
    }
}

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

パラメーター 説明
wakeword 現在のウェイクワードを示します。
有効な値: "ALEXA"
string

以下の例は、ウェイクワード対応製品からのSpeechRecognizer.Recognizeイベントを示しています。

クリックして拡大 +

アップデートされたディレクティブ/イベントのクライアントコードを調整する

ウェイクワード検証をサポートするため、新しいキー/値ペアがRecognizeイベントとExpectSpeechディレクティブに追加されました。これに対応して、クライアントコードもアップデートするようにしてください。

SpeechRecognizer.Recognize

Recognizeイベントがアップデートされ、initiatorオブジェクトが含まれるようになりました。これにより、AVSにAlexaのトリガーに使用される対話、および該当する場合には、クラウドベースのウェイクワード検証に必要な開始と終了のインデックスに関する情報が提供されます。


RecognizeイベントはAVSにユーザー音声を送信し、その音声を1つ以上のディレクティブに変換するのに使用されます。このイベントは、マルチパートのメッセージとして送信される必要があります。最初のパートはJSON形式のオブジェクト、2つ目のパートは製品のマイクでキャプチャされたバイナリオーディオです。キャプチャしたオーディオをAVSに送信する際は、レイテンシーを低減するためにストリーミング(チャンキング)することをお勧めします。ストリームには、チャンクごとに10ミリ秒のキャプチャしたオーディオ(320バイト)を含めるようにしてください。

また、Recognizeイベントには、profileパラメーターとinitiatorオブジェクトが含まれており、キャプチャしたオーディオを最もよく理解するにはどのASRプロファイルを使用すべきか、およびどのようにAlexaとの対話が開始されたかをAlexaに伝えます。

AVSに送信されるすべてのキャプチャされたオーディオは、以下のようにエンコードされる必要があります。

  • 16ビットのリニアPCM
  • 16kHzのサンプルレート
  • シングルチャネル
  • リトルエンディアンのバイトオーダー

プロトコルの具体例については、HTTP/2リクエストの構成を参照してください。

サンプルメッセージ

{
  "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}}
          }
        }
      }
    }
  }
}

バイナリオーディオ添付ファイル

Recognizeイベントには、マルチパートのメッセージの一部として、対応するバイナリオーディオ添付ファイルが必要です。以下のヘッダーは、各バイナリオーディオ添付ファイルに必要です。

Content-Disposition: form-data; name="audio"
Content-Type: application/octet-stream

{{BINARY AUDIO ATTACHMENT}}

コンテキスト

Recognizeイベントは、クライアントにクライアントコンポーネントのステータスを送信するよう要求します。その他の情報については、コンテキストを参照してください。

コンテキスト 必須
AlertsState 必須
PlaybackState 必須
VolumeState 必須
SpeechState 必須
RecognizerState 任意

ヘッダーのパラメーター

パラメーター 説明
messageId 特定のメッセージを表すのに使用される一意のID。 string
dialogRequestId Alexaに送信される各Recognizeイベントごとにクライアントが作成する必要のある一意の識別子。このパラメーターは、特定のRecognizeイベントの応答として送信されるディレクティブとの関連付けに使用されます。 string

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

パラメーター 説明
profile 製品に関連付けられた自動音声認識(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 ウェイクワードが開始するオーディオストリームのインデックスを(サンプル数で)表します。 long
initiator.payload.wakeWordIndices.endIndexInSamples ウェイクワードが終了するオーディオストリームのインデックスを(サンプル数で)表します。 long

Profiles

ASRプロファイルは、異なる製品、フォームファクター、音響環境、ユースケースに合わせて調整されます。profileパラメーターの有効な値の詳細については、後述の表を参照してください。

最適な聞き取り距離
CLOSE_TALK 0~2.5フィート
NEAR_FIELD 0~5フィート
FAR_FIELD 0~20フィート以上

Initiator

initiatorパラメーターは、Alexaとの対話がどのように開始されたかをAVSに伝え、このパラメーターにより次の2つのことが決定します。

  1. クラウド内で音声の終わりが検出されたときに、StopCaptureをクライアントに送信するかどうか。
  2. ストリーム上でクラウドベースのウェイクワード検証を実行するかどうか。

initiator は、各SpeechRecognizer.Recognizeイベントのペイロードに含まれる必要があります。有効な値は次のとおりです。

説明 サポートされるプロファイル(複数可) StopCaptureが有効かどうか ウェイクワード検証が有効かどうか ウェイクワードインデックスが必要かどうか
PRESS_AND_HOLD ボタン(物理またはGUI)を押すことにより開始され、リリースすることにより終了するオーディオストリーム。 CLOSE_TALK N N N
TAP ボタン(物理またはGUI)をタップしてリリースすることによって開始され、StopCaptureディレクティブを受信したときに終了するオーディオストリーム。 NEAR_FIELDFAR_FIELD Y N N
WAKEWORD ウェイクワードの使用によって開始され、StopCaptureディレクティブを受信したときに終了するオーディオストリーム。 NEAR_FIELDFAR_FILED Y Y Y

SpeechRecognizer.ExpectSpeech

このディレクティブはアップデートされ、initiatorが含まれるようになりました。Alexaがリクエストを完了するためにユーザーからの追加の情報を必要とするマルチターンのシナリオでは、クライアントに送信されるinitiatorが後続のRecognizeイベントでAVSに返される必要があります。


ExpectSpeech は、Alexaがユーザーのリクエストに応えるために追加の情報を必要とする場合に送信されます。クライアントに、マイクをオープンし、ユーザー音声のストリーミングを開始するよう指示します。指定されたタイムアウト期間内にマイクがオープンされない場合、クライアントからAVSにExpectSpeechTimedOutイベントを送信する必要があります。

Alexaとのマルチターンの対話中、デバイスは、クライアントにユーザー音声の聞き取りを開始するよう指示するSpeechRecognizer.ExpectSpeechディレクティブを1つ以上受信します。SpeechRecognizer.ExpectSpeechディレクティブのペイロードに含まれるinitiatorの値は、後続のSpeechRecognizer.Recognizeイベント内でinitiatorとして渡される必要があります。

オーディオの優先順位付けを管理するルールについては、対話モデルを確認してください。

サンプルメッセージ

{
  "directive": {
    "header": {
      "namespace": "SpeechRecognizer",
      "name": "ExpectSpeech",
      "messageId": "{{STRING}}",
      "dialogRequestId": "{{STRING}}"
    },
    "payload": {
      "timeoutInMilliseconds": {{LONG}},
      "initiator": "{{STRING}}"
    }
  }
}

ヘッダーのパラメーター

パラメーター 説明
messageId 特定のメッセージを表すのに使用される一意のID。 string
dialogRequestId 特定のRecognizeイベントの応答として送信されるディレクティブとの関連付けに使用される一意のID。

注: dialogRequestIdは、音声リクエストの応答としてのみ送信されます。dialogRequestId は、ダウンチャネルストリーム上のクライアントに送信されたディレクティブには含まれません
string

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

パラメーター 説明
timeoutInMilliseconds タイムアウトする前にマイクをオープンのままにする時間をミリ秒で指定します。 long
initiator AVSからクライアントに渡される参照値。この値は、後続のRecognizeイベントのinitiatorとして、AVSに返信する必要があります。 string

リソース