NewsPicksで音声入力SiriKitを試してみた

 NewsPicksで音声入力SiriKitを試してみた

13ca56eede10d76f203521d8f00721fb?s=128

Ippei Fukuyori

August 29, 2016
Tweet

Transcript

  1. NewsPicksで音声入力 SiriKitを試してみた UZABASE Meetup#5 2016/08/25

  2. 自己紹介 • 福頼(ふくより)一平 • 2016年1月入社(2015年11月から2ヶ月アルバイト) • いちおうiOSエンジニアのつもり • 最近は設計、サーバー開発、Web開発、ログ分析が多い •

    前職は、金融系システム会社で株式、先物オプション、FXのシステム開発
  3. SiriKit (Intents, Intents UI) • SiriKitというフレームワークはない • IntentsとIntents UIというフレームワーク ◦

    Intents … Siriからの入力(Intent)を受け取り、処理を行い、処理結果を返す ◦ Intents UI … Intentsで返した処理結果を独自の UIで表示する • 単体のアプリとして実装するのではなくApp Extensionとして既存のアプリ(本体ア プリ)に組み込む 引用: https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionOverview.html Siri NewsPicksSiriExtension NewsPicks
  4. Intents Domain • サードパーティアプリでSiriKitが利用できるシーンは限られている (Siriが反応するフレーズがあらかじめ決められている) • 6つのIntents Domain、16のUser Intention Intents

    Domain User Intention(やれること) VoIP Calling 音声通話・ビデオ通話の開始、通話履歴の検索 Messaging メッセージの送信・検索 Photo Search 写真の検索、スライドショーの再生 Payments 他のユーザーへの支払い、支払い要求 Workout ワークアウトの開始・終了など Ride booking 乗車予約、予約状況の確認
  5. Intents Domain • サードパーティアプリでSiriKitが利用できるシーンは限られている (Siriが反応するフレーズがあらかじめ決められている) • 6つのIntents Domain、16のUser Intention Intents

    Domain User Intention(やれること) VoIP Calling 音声通話・ビデオ通話の開始、通話履歴の検索 Messaging メッセージの送信・検索 Photo Search 写真の検索、スライドショーの再生 Payments 他のユーザーへの支払い、支払い要求 Workout ワークアウトの開始・終了など Ride booking 乗車予約、予約状況の確認 →独自のIntentを  追加することはできない
  6. NewsPicksって ニュースアプリじゃな かったっけ?

  7. SiriKit 使えないじゃん ヽ(ι´Д`)ノ

  8. まとめ

  9. というわけにも いかないので・・・

  10. Intents Domain • サードパーティアプリでSiriKitが利用できるシーンは限られている (Siriが反応するフレーズがあらかじめ決められている) • 6つのIntents Domain、16のUser Intention Intents

    Domain User Intention(やれること) VoIP Calling 音声通話・ビデオ通話の開始、通話履歴の検索 Messaging メッセージの送信・検索 Photo Search 写真の検索、スライドショーの再生 Payments 他のユーザーへの支払い、支払い要求 Workout ワークアウトの開始・終了など Ride booking 乗車予約、予約状況の確認 なんとなくニュースの 検索に使えそう 差出人 →配信メディア 受信日時 →ニュースの配信日時
  11. Siriがやってくれること1 - Message Intents • ユーザーの言葉を適切に(?)解釈し、要素に分解し、Intentオブジェクトに変換す る 「NewsPicksでソフトバンクが含まれるメッセージを検索」   アプリ名   検索キーワード   

     User Intention ◦ 実際には「ソフトバンクが」が検索キーワードとして認識される ◦ 「メッセージを検索」ではなく「ニュースを検索」にしたいがニュースのドメインは提供されていないの で、アプリで処理されず Web検索が行われる
  12. Siriがやってくれること2 - Message Intents • 処理を行うための情報が足りない場合、インタラクティブに追加情報を取得する Siri: 「どなたからのメッセージを検索しますか?」 あなた: 「渡辺さん」

    Siri: 「どなたからのメッセージを検索しますか?」 あなた: 「日経」 Siri: 「私には"日経"はわかりませんでした。」 →ニュースなのでメディア名を差出人として指定したいが、  Siriは「日経」さんを人として認めてくれない
  13. IntentHandlerの処理の流れ 引用: https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/ResolvingandHandlingIntents.html

  14. IntentHandlerの処理の流れ 引用: https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/ResolvingandHandlingIntents.html パラメータ解決フェーズ ・検索キーワード ・送信者 ・受信日時 などを検証、必要に応じて取得

  15. IntentHandlerの処理の流れ 引用: https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/ResolvingandHandlingIntents.html パラメータ解決フェーズ ・検索キーワード ・送信者 ・受信日時 などを検証、必要に応じて取得 確認フェーズ レスポンスの生成。メッセージ送信

    前の確認などを行う
  16. IntentHandlerの処理の流れ 引用: https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/ResolvingandHandlingIntents.html パラメータ解決フェーズ ・検索キーワード ・送信者 ・受信日時 などを検証、必要に応じて取得 確認フェーズ レスポンスの生成。メッセージ送信

    前の確認などを行う 実行フェーズ 実際のメッセージの送信や検索を 行う
  17. 実装

  18. • ターゲット追加 ◦ アプリとしてではなく、 App Extensionとして動作する • Info.plistに追加 • ハンドラ(実際の処理)を実装

    実装方法 メッセージを送信する 最初に呼ばれるメインクラス →Intentのタイプによって  ハンドラを振り分け メッセージを検索する
  19. IntentHandlerの振り分け • INExtensionクラスを継承 • INExtensionはINIntentHandlerProvidingプ ロトコルの実装クラス • 複数のDomainをサポートする場合でも全て このメソッドが呼ばれる •

    今回はメッセージを検索する Intentをサポー トするので、入力は INSearchForMessagesIntent • 返すIntentHandlerは INSearchForMessagesIntentHandlingを実 装したクラス(SearchMessageHandler) • Xcodeが生成するサンプルコードは、ひとつ のクラスに全て実装されているが、 Intent毎 あるいはDomain毎にクラスをわけた方がい いと思う
  20. IntentHandlerの実装 resolve confirm handle メッセージの検索の場合、 INSearchForMessagesIntentHandlingを実装 送信者を検証・解決する例: ユーザーが指定した(話した)送信者が問題ない場合 →INPersonResolutionResult.success(with:)  →次のパラメータの検証・解決

    送信者が不正または指定されていない場合 →INPersonResolutionResult.needsValue()  →Siriがユーザーに誰からのメッセージを検索するか聞いてくれる
  21. IntentHandlerの実装 resolve confirm handle メッセージの検索の場合、 INSearchForMessagesIntentHandlingを実装 メッセージの検索で特に確認することないので省略!

  22. IntentHandlerの実装 resolve confirm handle メッセージの検索の場合、 INSearchForMessagesIntentHandlingを実装

  23. IntentHandlerの実装 resolve confirm handle メッセージの検索の場合、 INSearchForMessagesIntentHandlingを実装 検索ワードが指定されない場合があるのでバリデーション にわかには信じがたいが、 resolveフェーズで検索ワードを要求 する術がない

  24. IntentHandlerの実装 resolve confirm handle メッセージの検索の場合、 INSearchForMessagesIntentHandlingを実装 検索APIを実行

  25. IntentHandlerの実装 resolve confirm handle メッセージの検索の場合、 INSearchForMessagesIntentHandlingを実装 検索結果のオブジェクトを生成 ・内容はニュースのタイトル ・送信日時はニュースの公開日時 ・送信者はメディア

    で代替する
  26. Demo

  27. Demo 検証環境 ・Xcode8 beta6 ・iOS10 beta7

  28. Demo 検証環境 ・Xcode8 beta6 ・iOS10 beta7 「MeetUpで渡部さんからのソフトバンクが含まれる メッセージを検索」

  29. どう話せばSiriは認識するのか • 「MeetUpで渡部さんからのソフトバンクが含まれるメッセージを検索」 →OK。検索ワード「ソフトバンクが」、送信者「渡部」 • 「ミートアップでソフトバンクが含まれるメッセージを検索」 →NG。「ミートアップ」がMeetUpアプリとして認識されない。 • 「ミートアップで日経からのソフトバンクが含まれるメッセージを検索」 →NG。「ミートアップ」がMeetUpアプリとして認識されない。

    • 「MeetUpで日経からのソフトバンクが含まれるメッセージを検索」 →NG?。検索ワード「日経からのソフトバンクが」、送信者「-」 • 「MeetUpでメッセージを検索」 →NG。ハンドラの処理は行われるが、検索ワードがないのでエラー。
  30. まとめ(所感) • SiriKit(Intents, Intents UI)が利用できるシーンは限られている • NewsPicks(ニュースアプリ)では、それっぽく動作させることはできるが、プロダクト としてリリースすることは難しい • Siriの認識精度は(少なくとも日本語では)あまりよくない

    • 煩雑なやりとりをしてまでSiriを使うメリットはあるのか? ◦ 運転中や料理中などは便利かも?
  31. おわりに • iOS10で導入されるSiriKitを実際に試して見たが、NewsPicksでは使えそうにない • 新しい技術は実際に試してみて、感触が良ければ取り入れることにしているが、今 回のように使えないこともある • 一見無駄なことをしているようにも思えるが、新しい技術を使ってみるのって楽しい ですよね •

    ユーザベース、ニューズピックスではMeetUp以外にも隔週くらいでLTやってるので 新しい技術に触れる機会がたくさんあります! • 新しいこと好きなそこのあなた、一緒に働いてみませんか?
  32. Fin.