Jのブログ

人生の記録

【学習メモ】AWS 認定 Alexa スキルビルダー

無事合格しました。何をインプットしてたかを残しておきます。 まずは、試験要項をみて出題範囲と参考資料がのってるのでそれをインプットとします。これで、ほぼ合格です!w 一番参考になったのがAlexa 道場というYoutube動画ですね。コレ見ながら実際に手を動かすことで、だいたい把握できます。あとは、細かい仕様をドキュメントでみたり、模擬試験受けたり、Developers.IO見たり、手を動かしたりで合格できました。試験勉強は多分2週間くらいで、合計20時間くらいかな?あとはAWSの知識としてLambdaだったり、DynamoDBだったり、IAMだったり、CloudFrontの知識があった方がいいですね。

基本

Alexa道場

  • Alexa道場の動画を全部みつつ、実際に手を動かす
  • 基礎ができるので、あとはDevelopers.IO見たり、Alexa開発ドキュメント読んだり、ひたすら手を動かしていろいろ触ってみる

スキルタイプ

  • カスタムスキル:例としてはWebサービスの情報を検索、商品を注文、対話ゲームなど、なんでも。画面での操作も作れる。
  • スマートホームスキル:照明、ドアロック、カメラ、テレビなど、スマートホーム対応デバイスを制御。機能制限されているが音声UIを独自に作成不要で開発が簡単。Alexa、リビングの照明を付けてでリクエストができる。特定のインテントに対するLambda関数を作成する。呼び出し名を言う必要がない。
  • ビデオスキル:ビデオサービスの対応。映画再生、テレビ検索、チャネル切り替え。呼び出し名を言う必要がない。
  • フラッシュブリーフィング:ニュースなどのアプリを起動せずとも利用できるスキル。ニュースを教えて、だけでスキルが起動できる(起動の優先順位は、スキルを有効化した順?)。開発者はコンテンツフィードを作成するだけ。呼び出し名を言う必要がない。
  • 音楽スキル:音楽をストリーミング再生するスキル。開発者はコンテンツの再生と検索や検索結果を表示するスキルを開発するだけ。
  • リストスキル:リスト項目の追加、削除、更新。開発者はリストイベントを受信するエンドポイント、応答するハンドラーを開発する。スキル名でまるまるを再生してという必要がある。

ホスティングタイプ

  • Lambda、S3、CloudWatch
  • 独自システム

開発要件

  • カスタムスキル:LambdaまたはHTTPSWebサービス。画像、オーディオファイル、ビデオファイルのホスト、S3が楽。テスト用のAlexaデバイス、シュミレータでテストも可。ただし、シュミレータでは対話型に対応していないため、デバイスが必要。
  • スマートホームスキル:制御可能なデバイス、Lambda(必須)。テスト用のAlexaデバイス、なければシミュレータでテスト可能。
  • ビデオスキル:ビデオサービスプロバイダ。Lambda(必須)。テスト用のAlexaデバイス。シミュレータは使えない。
  • フラッシュブリーフィングスキル:RSSまたはJSON
  • 音楽スキル:Alexaデバイス、音楽ストリーミングサービス、音楽カタログのメタデータ。Lambda(必須)。
  • 共通:Node.js, Java, Python, C#, Go

カスタムスキル

スマートホームスキル

フラッシュブリーフィングスキル

  • RSSのURLを指定するだけで、スキル完成
  • スキルを有効にすると「今日の」ニュースは?」でRSSの内容を読んでくれる

音楽スキル

  • 必要なインテント
    • 必須:AMAZON.ResumeIntent、AMAZON.PauseIntent
    • 再生開始 > LaunchRequest、PlayAudioIntent
    • 次へ、戻す > AMAZON.NextIntent、AMAZON.PreviousIntent
    • 停止 > AMAZON.CancelIntent、AMAZON.StopIntent、AMAZON.PauseIntent
    • 再開 > AMAZON.ResumeIntent
    • ループ、シャッフル > AMAZON.StartOverIntent、AMAZON.LoopOnIntent、AMAZON.LoopOffIntent、AMAZON.ShuffleOnIntent、AMAZON.ShuffleOffIntent
  • Playback系のリクエス
    • リクエスト受けるだけ。speakなどの応答はできない。ログ残すなどの処理を入れる。
    • AudioPlayer.PlaybackStarted、AudioPlayer.PlaybackFinished、AudioPlayer.PlaybackStopped
    • AudioPlayer.PlaybackNearlyFinished > 終了間近に次のキューを書き換えるなどする
    • AudioPlayer.PlaybackFailed > エラーなので再度再生させる
  • 画面操作によるリクエス
    • PlaybackController.PlayCommandIssued、PlaybackController.NextCommandIssued、PlaybackController.PreviousCommandIssued、PlaybackController.PauseCommandIssued SSML
  • phoneme > 歌詞
    • 発音を指定する(人によって異なる場合のものでも指定できる)
    • 国産音声記号(IPA),X−SAMPAフォーマットで指定
  • prosody > メロディ
    • 音量、高さ、速さを変更する
  • emphasis > 強弱
    • 強調をlevel(strong, moderate, reduced)で指定する
  • say-as
    • 解釈方法を指定
    • 文字ごと、数値、分数、単位、日付、時間、電話番号、住所、感嘆、ピー
  • w
    • Say-asと類似した働き
    • Aliasとして動詞、過去分詞、名詞を指定
  • amazon:domain
    • 英語のみ対応
    • コンテキストにあった発話
    • music、newsを指定できる。
  • amazon:effect
    • ささやき声
    • whisperedを指定できる
  • amazon:emotion
    • 感情表現
    • 感情(name):excited, disappointed
    • 感情の強さ(intensity):low, medium, high
  • audio
    • mp3のURLを指定
    • 240秒以内、48kbps
    • HTTPS(自己署名はNG)
    • HTLSも指定可能
  • break
    • 休止を入れる
    • time(s, ms), strength(medium, strongなど)で指定する
  • lang
    • 言語を指定する
  • p
    • 段落。間をおく。
  • s
    • センテンス
    • 文の間に一時停止が入る
  • speak
    • SSMLを利用するときのタグ
  • sub
    • 単語のを別のフレーズで発音
    • aliasで指定
    • 例:私が好きな化学元素はAlです。 > Alをアルミニウムと発音。
  • voice
    • 声を指定できる。日本だと、観月さん、匠さん

インテント履歴

  • 1日10人以上が利用した場合に、履歴が表示される
  • 取得できる情報
    • 発話
    • 信頼度:高中低でインテントの信頼度。低や中を減らすようにインテントのサンプル発話を調整する
    • 解決されたインテント:実際に振り分けられたインテント
    • 解決されたスロット:解決されたスロットと値
    • ダイアログ:ダイアログモードの場合の欄。情報を引き出すスロット、確認スロット、確認インテントいづれ
    • 対話モデルタイプ:ONE_SHOT(スキル呼び出しと同うじにインテントへ)、MODAL(スキル呼び出し後の対話でインテントへ)

ダイアログモード(スロットの入力を委譲する)

  • スロットについてLambda側ではなく、モデル側で入力を完結する
  • Lambdaのコードがシンプルになる(スロットが入力された前提でコードを書けば良い)
  • スロットに対し
    • 必須の値か
    • 値のバリデーション(以上、以下など)
    • 再入力を促したり、入力内容を確認したりできる
  • ダイアログモードのリクエス
    • dialogStateがSTARTED、IN_PROGRESS、COMPLETEDのいづれ
    • COMPLETEDで無ければ、addDelegateDirective()でレスポンスを返す
    • COMPLETEDの場合は、スロットが埋まった状態になる。処理を任意の処理を実施する。
    • ディレクティブ
      • Dialog.Delegate:フロント側にスロットのやりとりを委譲する
      • Dialog.ElicitSlot:特定のスロット値についてユーザーに尋ねる。スロット名を指定する。
      • Dialog.ConfirmSlot:特定のスロットの値を確認する。スロット名を指定する。
      • Dialog.ConfirmIntent:インテントに提供したすべての情報をユーザーに確認する。スロットの指定はしない。speakで全スロットの値を確認する。

アノテーションセット

  • Alexaスキルの自然言語理解(NLU)モデルの精度を評価するためのツール
  • 予想される発話をデータ(インデント、スロット)をデータファイル化 > アノテーションセット
  • NLU評価ツールを使って、想定通りスキルのモデルが動作しているかテストを行う
  • モデル変更しても過去できていたことができない、などのテストとしても利用できる
  • 評価したケース数と評価結果を一覧で見ることができる、これは便利

レポート

  • 概要:セッション数、発話数、呼ばれたインデントの割合など確認できる
  • カスタマー:アクセス数
  • セッション:セッション数、セッションに対する成功、失敗、応答なし
  • 発話:発話の総数、成功、失敗、応答なし
  • インデント:それぞれのインデントが処理した総数
  • リテンション率:継続利用数
  • 対話パス:インデントがどのパスで呼ばれているかを確認する
  • エンドポイントのレイテンシ:エンドポイントでかかった時間ms
  • エンドポイントのレスポンス:レスポンスに成功、失敗した数

アカウントリンク

  • ユーザーIDと別システムのユーザーアカウントを結びつける
  • スキル詳細ページにアカウントリンクを有効にするボタンが表示される
  • ランディングページ(ログイン画面)は、スキル所有者が保有するページであること(例えばGoogleのログインページはNG