$30 off During Our Annual Pro Sale. View Details »

duelSystem for Amazon Echo(Alexa)

show
June 27, 2018
1.3k

duelSystem for Amazon Echo(Alexa)

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

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

show

June 27, 2018
Tweet

More Decks by show

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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 ※ラズパイのデフォルト

    View Slide

  20. 構成図
    プレイヤー
    Amazon Echo
    Lambda IoT Shadow
    RaspberryPi RaspberryPi
    RaspberryPi

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  27. ここから設計の話

    View Slide

  28. やったことリスト
    1. 遊〇王劇場版の5回のduelのやりとりを文字に起こす
    2. duelに動きがあるキーワードの言葉をまとめる
    3. 声で操作することを念頭に状態遷移表を描く
    → 今回はハッピーパスが複雑すぎる
    4. 必要なIntent(ユーザの発話)とSlotを定める
    5. sessionAttributeを列挙 ※ 逐一変化する状況の管理
    6. 必要な画像を想定する

    View Slide

  29. アニメを文字にしたらこうなる

    View Slide

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

    View Slide

  31. ここから苦労話

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  35. 苦労話2:Intentありすぎ
    1.俺のターン
    2.僕のターン
    3.ターン終了
    4.ターン終了を了承
    5.手札のN枚目を選択
    6.伏せてあるN枚目を選択
    7.召喚したN枚目を選択
    8.狙う相手がN枚目か選択
    9.トラップで割り込む
    10.カードの効果を語る
    11.攻撃
    12.直接攻撃
    13.発動
    14.召喚する
    15.伏せる
    16.悔しがる

    View Slide

  36. 妥協
    ゲームに制約として最大値を設けて妥協
    ・手札の数
    ・伏せられる数
    ・召喚できる数

    View Slide

  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.新ろ

    View Slide

  38. 解決法
    ・使用するセリフを絞る
    ・テスト画面でAlexaがどのように誤認識するか最低3回
    話しかける
    ・それでもダメな時はエラーにして再度発話させる

    View Slide

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

    View Slide

  40. 解決法
    ・Alexaの発話メッセージに「間」を微妙に挟んで実質的に8秒
    以上稼ぐ ※悪手
    → ‘〇〇しました。’
    ・なるべく安定した通信ができる手段をとる
    → 無線より有線にする
    → 今回は有線LAN 1000Mbps対応の物理穴から
    カテゴリ6aのLANケーブルでラズパイに接続した
    ※ RaspberryPi3Bの有線は1000Mbps未対応

    View Slide

  41. 苦労しなかった話:
    カードの効果を長く語る
    「FF外(えふえふがい)から失礼の効果により、
    140文字しかないのにリソースを使い、
    相手の召喚は維持できなくなる」

    View Slide

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

    View Slide

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

    View Slide

  44. つまり
    ■explain
    ・効果により
    ・こう歌により
    ・後かにより
    ・もこう歌により
    ■any
    ・ほげほげ
    ・ほげほげほげほげほげほげほげ
    えふえふ外から失礼の{explain} {any}
    Alexaは定義されているワードの中でどれに一番近いかよしなに判断してくれる

    View Slide

  45. 無駄に本気で
    遊びたおしました

    View Slide

  46. 宣伝
    • スマートスピーカーのロゴマークを(勝手に)作りました
    • 各社に依存しないようなデザインにしてます
    • 無償公開しておくので使ってあげてください
    • 加工や商用利用も原則可です
    https://github.com/surumegohan/smartspeaker/tree/master/logo
    IT業界イベントで登壇者がもらえる
    ワタシハ 〇〇 チョットデキル
    のスマスピ版Tシャツも作りました
    ※1着3000円ちょい 2018年6月20日時点

    View Slide

  47. 大事なこと
    ・デュ〇ルはカードが大事
    ・勉強会も入館カードが大事
    入館カードは必ず返却
    してください!!

    View Slide

  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の公式ドキュメントの数々
    適宜ご確認ください。

    View Slide

  49. ターンエンドだ!!

    View Slide