duelSystem for Amazon Echo(Alexa)

4216f4ebe69909923f8e36df5d054740?s=47 show
June 27, 2018
1.1k

duelSystem for Amazon Echo(Alexa)

2018年6月26日開催の「スマートスピーカーを遊びたおす会」で登壇した資料に参考サイトのリンクと、動画のリンクを付与しました

https://kotodama.connpass.com/event/89650/

4216f4ebe69909923f8e36df5d054740?s=128

show

June 27, 2018
Tweet

Transcript

  1. Amazon Echoでduelする show : 主催者 2018/06/26 スマートスピーカーを遊びたおす会 at IIJ

  2. このセッションでは ・資料を公開するつもりなので無理にメモらなくて良いです ・#スマートスピーカーを遊びたおす会 でツイートをお願いします ・生暖かい目でご覧ください

  3. 自己紹介 Twitter: @surumegohan Blog: https://surumegohan.hatenablog.com Web: https://smartmacchiato.life/ show

  4. 経歴 修士卒で大手SIerに入社 → SESで大手SIerにDBAとして常駐 → 中堅Web系企業でDBA兼QAエンジニア → VUI(スマートスピーカー)やりたくて無職なぅ ここ数週間はduelist

  5. 公開済みのスマートスピーカーのアプリ(1/2)

  6. SmartHacksさんでランクイン ~Alexaスキル~

  7. SmartHacksさんでランクイン ~Google Assistant~

  8. Google社で流した光と闇を垣間見る動画 ※なぜか、たいていの人は闇から試す 人によっては闇ばかり試す 動画はこちらにアップしました https://youtu.be/xNT4orKvpgc

  9. 公開済みのスマートスピーカーのアプリ(2/2) Amazon Alexa スキル「IT業界の深い闇」 ・話しかけるとIT業界の深い闇について垣間見ることができる ・闇を垣間見たその場で、「いいね」「いまいち」等のフィードバックが声でできる ・SDKをいじってDynamoDBにフィードバックを保存している

  10. 深い闇が記事になってた

  11. ところで 本日は・・ スマートスピーカーを遊びたおす会

  12. ところで スマートスピーカーを遊びたおす会

  13. ところで スマートスピーカーを遊びたおす会 → 遊びたおす

  14. ところで スマートスピーカーを遊びたおす会 → 遊びたおす → 遊ぶ

  15. ところで スマートスピーカーを遊びたおす会 → 遊びたおす → 遊ぶ → 遊戯

  16. ところで スマートスピーカーを遊びたおす会 → 遊びたおす → 遊ぶ → 遊戯 → 遊〇王

  17. 気づいてしまった 声でduelできるんじゃね?

  18. なので Amazon Echoで duelしてみた カードゲームで戦ってるようにしてみた

  19. 使ったモノの数々 ▪物理的なモノ ・(RaspberryPi3B & HDMIモニタ)×3セット ・カテゴリ6aのLANケーブル 3本 ・Amazon Echo Plus

    ※Plusの独自機能は未使用 ▪ソフト的なモノ▪ ・Alexa Skill - sdk v2 ・AWS Lambda - Node.js 8.10 ・AWS IoT – AWSIoTPythonSDK Python 2.7 ※ラズパイのデフォルト
  20. 構成図 プレイヤー Amazon Echo Lambda IoT Shadow RaspberryPi RaspberryPi RaspberryPi

  21. 肝となるAWS IoTの機能 ~デバイスシャドウ~ ・Things(今回はラズパイ)に紐づくJSONのこと ・このJSONを通して非同期に通信する ・Reported(デバイス用)とDesired(アプリ用)の2つの状 態を持つ ・ReportedとDesiredに差分がでると、Delta属性がJSONに付 与されて、メッセージが発信される

  22. デバイスシャドウの例 ・AWS IoTの「シャドウ」でdesiredとreportedを記載

  23. デバイスシャドウの例 ・desiredのfooの値を1に変えて保存すると差分としてdeltaが 自動的に生成される

  24. デバイスシャドウの例 ・hogeを消したい場合は null に設定して保存する ※ hogeの行を削除して保存しても削除されず復活する・・・

  25. 今回どうしたか ・画像のファイル名をそのまま設定 delta(差分)にファイル名が直に出力されるようにすれば、 そのまま取得して、xdg-openコマンドの引数として実行できる

  26. というわけで動かしました 動画を撮りました duelに15分かかったのでダイジェスト版 https://youtu.be/BYkLmGYGCdk

  27. ここから設計の話

  28. やったことリスト 1. 遊〇王劇場版の5回のduelのやりとりを文字に起こす 2. duelに動きがあるキーワードの言葉をまとめる 3. 声で操作することを念頭に状態遷移表を描く → 今回はハッピーパスが複雑すぎる 4.

    必要なIntent(ユーザの発話)とSlotを定める 5. sessionAttributeを列挙 ※ 逐一変化する状況の管理 6. 必要な画像を想定する
  29. アニメを文字にしたらこうなる

  30. sessionAttributeがこうなる ※設計はしたが実装はかなり妥協して減らしました

  31. ここから苦労話

  32. 苦労話4点 1. そもそもduelがスタートできない 2. Intent(ユーザの発話)がありすぎる 3. 誤認識に対応するslotが増える 4. 通信が不安定すぎて画像が表示されない

  33. 苦労話1: そもそもduelがスタートできない 「アレクサ、デュ〇ルをスタート」が認識されない → duelという英単語がそもそもレアケース → 同音の日本語も存在しない → 15回くらい話しかけてようやく1回認識する →

    延々と「わかりませんでした」と言われる
  34. 解決法 シミュレーターを表示させて 「デュ〇ルをスタート」を20回話しかけて、Alexaがど う認識したのかテキストで確認する →呼び出し名「どうやろう」が一番認識率が高い ※「デュ〇ル」の単語のみでやっても意味がなかった

  35. 苦労話2:Intentありすぎ 1.俺のターン 2.僕のターン 3.ターン終了 4.ターン終了を了承 5.手札のN枚目を選択 6.伏せてあるN枚目を選択 7.召喚したN枚目を選択 8.狙う相手がN枚目か選択 9.トラップで割り込む

    10.カードの効果を語る 11.攻撃 12.直接攻撃 13.発動 14.召喚する 15.伏せる 16.悔しがる
  36. 妥協 ゲームに制約として最大値を設けて妥協 ・手札の数 ・伏せられる数 ・召喚できる数

  37. 苦労話3: 誤認識をさけるためのslotが増える 例1:ターン 1.ターン 2.タウン 3.豚 4.父 5.トン 6.アマゾン 例2:手札

    1.手札 2.fだ 3.って下 4.って二 5.十二 6.てふだ 例3:現れろ 1.現れろ 2.現れよ 3.新悪いよ 4.やろ 5.現れやろ 6.新ろ
  38. 解決法 ・使用するセリフを絞る ・テスト画面でAlexaがどのように誤認識するか最低3回 話しかける ・それでもダメな時はエラーにして再度発話させる

  39. 苦労話4: 通信が不安定すぎて画像が反映されない ・非同期で通信しているので、画面が反映される まで待っていられない → 待っているとAlexaが発話して8秒経ってしまう ・無線の調子がよくない場合がある → 集合住宅あるある? →

    RaspberryPi3Bの無線がそもそもイマイチ説
  40. 解決法 ・Alexaの発話メッセージに「間」を微妙に挟んで実質的に8秒 以上稼ぐ ※悪手 → ‘<break time=“1s”/>〇〇しました。’ ・なるべく安定した通信ができる手段をとる → 無線より有線にする

    → 今回は有線LAN 1000Mbps対応の物理穴から カテゴリ6aのLANケーブルでラズパイに接続した ※ RaspberryPi3Bの有線は1000Mbps未対応
  41. 苦労しなかった話: カードの効果を長く語る 「FF外(えふえふがい)から失礼の効果により、 140文字しかないのにリソースを使い、 相手の召喚は維持できなくなる」

  42. 解決法: 説明用のインテントに {explain} {any} スロットをいれる

  43. {explain} {any} スロットの中身 ▪explain ・効果により ・こう歌により ・後かにより ・もこう歌により ▪any ・ほげほげ

    ・ほげほげほげほげほげほげほげ
  44. つまり ▪explain ・効果により ・こう歌により ・後かにより ・もこう歌により ▪any ・ほげほげ ・ほげほげほげほげほげほげほげ えふえふ外から失礼の{explain}

    {any} Alexaは定義されているワードの中でどれに一番近いかよしなに判断してくれる
  45. 無駄に本気で 遊びたおしました

  46. 宣伝 • スマートスピーカーのロゴマークを(勝手に)作りました • 各社に依存しないようなデザインにしてます • 無償公開しておくので使ってあげてください • 加工や商用利用も原則可です https://github.com/surumegohan/smartspeaker/tree/master/logo

    IT業界イベントで登壇者がもらえる ワタシハ 〇〇 チョットデキル のスマスピ版Tシャツも作りました ※1着3000円ちょい 2018年6月20日時点
  47. 大事なこと ・デュ〇ルはカードが大事 ・勉強会も入館カードが大事 入館カードは必ず返却 してください!!

  48. 主に参考にしたサイト ・Amazon Echo で TVリモコン操作への道 (RPizero & AWSIoT & Lambda

    & AlexaSkill) 前編 https://qiita.com/toguma/items/57d6faed119c41bd4332 ・AWS IoT Device SDK for Pythonを使ってRaspberryPiとAWS IoTをつないでみる https://dev.classmethod.jp/hardware/raspberrypi/aws-iot-device-sdk-for-python- raspberrypi-aws-iot/ ・AWSの公式ドキュメントの数々 適宜ご確認ください。
  49. ターンエンドだ!!