Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
NewsPicksで音声入力SiriKitを試してみた
Search
Ippei Fukuyori
August 29, 2016
Programming
510
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
NewsPicksで音声入力SiriKitを試してみた
Ippei Fukuyori
August 29, 2016
Other Decks in Programming
See All in Programming
Foundry Localでエージェント開発
seosoft
0
170
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.4k
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
0
150
世界の中心で、AI(App Intents)をさけぶ ー App Intents中心設計の実践ガイド
touyou
0
380
Building an Out-of-Order CPU
latte72
1
750
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
140
高専キャリア LT 発表内容
crysta1221
6
5.6k
PHPプロジェクトの結合バランスを可視化する #php_night
kajitack
0
230
Laravelのアプリケーションをどこにデプロイするか #ツナギメオフライン.9
akase244
0
120
業務時間外もAIに働いてもらう話
colorful12
3
10k
Vibes Containers 〜AIで変わるコンテナ設計と運用〜
tkikuc
3
520
デプロイ直後のレイテンシスパイクを調べたら、 Railsの仕様にたどり着いた
nhsykym
0
110
Featured
See All Featured
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
450
My Coaching Mixtape
mlcsv
0
310
Ten Tips & Tricks for a 🌱 transition
stuffmc
0
210
How to build a perfect <img>
jonoalderson
1
6k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
Darren the Foodie - Storyboard
khoart
PRO
3
3.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
A designer walks into a library…
pauljervisheath
211
25k
Transcript
NewsPicksで音声入力 SiriKitを試してみた UZABASE Meetup#5 2016/08/25
自己紹介 • 福頼(ふくより)一平 • 2016年1月入社(2015年11月から2ヶ月アルバイト) • いちおうiOSエンジニアのつもり • 最近は設計、サーバー開発、Web開発、ログ分析が多い •
前職は、金融系システム会社で株式、先物オプション、FXのシステム開発
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
Intents Domain • サードパーティアプリでSiriKitが利用できるシーンは限られている (Siriが反応するフレーズがあらかじめ決められている) • 6つのIntents Domain、16のUser Intention Intents
Domain User Intention(やれること) VoIP Calling 音声通話・ビデオ通話の開始、通話履歴の検索 Messaging メッセージの送信・検索 Photo Search 写真の検索、スライドショーの再生 Payments 他のユーザーへの支払い、支払い要求 Workout ワークアウトの開始・終了など Ride booking 乗車予約、予約状況の確認
Intents Domain • サードパーティアプリでSiriKitが利用できるシーンは限られている (Siriが反応するフレーズがあらかじめ決められている) • 6つのIntents Domain、16のUser Intention Intents
Domain User Intention(やれること) VoIP Calling 音声通話・ビデオ通話の開始、通話履歴の検索 Messaging メッセージの送信・検索 Photo Search 写真の検索、スライドショーの再生 Payments 他のユーザーへの支払い、支払い要求 Workout ワークアウトの開始・終了など Ride booking 乗車予約、予約状況の確認 →独自のIntentを 追加することはできない
NewsPicksって ニュースアプリじゃな かったっけ?
SiriKit 使えないじゃん ヽ(ι´Д`)ノ
まとめ
というわけにも いかないので・・・
Intents Domain • サードパーティアプリでSiriKitが利用できるシーンは限られている (Siriが反応するフレーズがあらかじめ決められている) • 6つのIntents Domain、16のUser Intention Intents
Domain User Intention(やれること) VoIP Calling 音声通話・ビデオ通話の開始、通話履歴の検索 Messaging メッセージの送信・検索 Photo Search 写真の検索、スライドショーの再生 Payments 他のユーザーへの支払い、支払い要求 Workout ワークアウトの開始・終了など Ride booking 乗車予約、予約状況の確認 なんとなくニュースの 検索に使えそう 差出人 →配信メディア 受信日時 →ニュースの配信日時
Siriがやってくれること1 - Message Intents • ユーザーの言葉を適切に(?)解釈し、要素に分解し、Intentオブジェクトに変換す る 「NewsPicksでソフトバンクが含まれるメッセージを検索」 アプリ名 検索キーワード
User Intention ◦ 実際には「ソフトバンクが」が検索キーワードとして認識される ◦ 「メッセージを検索」ではなく「ニュースを検索」にしたいがニュースのドメインは提供されていないの で、アプリで処理されず Web検索が行われる
Siriがやってくれること2 - Message Intents • 処理を行うための情報が足りない場合、インタラクティブに追加情報を取得する Siri: 「どなたからのメッセージを検索しますか?」 あなた: 「渡辺さん」
Siri: 「どなたからのメッセージを検索しますか?」 あなた: 「日経」 Siri: 「私には"日経"はわかりませんでした。」 →ニュースなのでメディア名を差出人として指定したいが、 Siriは「日経」さんを人として認めてくれない
IntentHandlerの処理の流れ 引用: https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/ResolvingandHandlingIntents.html
IntentHandlerの処理の流れ 引用: https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/ResolvingandHandlingIntents.html パラメータ解決フェーズ ・検索キーワード ・送信者 ・受信日時 などを検証、必要に応じて取得
IntentHandlerの処理の流れ 引用: https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/ResolvingandHandlingIntents.html パラメータ解決フェーズ ・検索キーワード ・送信者 ・受信日時 などを検証、必要に応じて取得 確認フェーズ レスポンスの生成。メッセージ送信
前の確認などを行う
IntentHandlerの処理の流れ 引用: https://developer.apple.com/library/prerelease/content/documentation/Intents/Conceptual/SiriIntegrationGuide/ResolvingandHandlingIntents.html パラメータ解決フェーズ ・検索キーワード ・送信者 ・受信日時 などを検証、必要に応じて取得 確認フェーズ レスポンスの生成。メッセージ送信
前の確認などを行う 実行フェーズ 実際のメッセージの送信や検索を 行う
実装
• ターゲット追加 ◦ アプリとしてではなく、 App Extensionとして動作する • Info.plistに追加 • ハンドラ(実際の処理)を実装
実装方法 メッセージを送信する 最初に呼ばれるメインクラス →Intentのタイプによって ハンドラを振り分け メッセージを検索する
IntentHandlerの振り分け • INExtensionクラスを継承 • INExtensionはINIntentHandlerProvidingプ ロトコルの実装クラス • 複数のDomainをサポートする場合でも全て このメソッドが呼ばれる •
今回はメッセージを検索する Intentをサポー トするので、入力は INSearchForMessagesIntent • 返すIntentHandlerは INSearchForMessagesIntentHandlingを実 装したクラス(SearchMessageHandler) • Xcodeが生成するサンプルコードは、ひとつ のクラスに全て実装されているが、 Intent毎 あるいはDomain毎にクラスをわけた方がい いと思う
IntentHandlerの実装 resolve confirm handle メッセージの検索の場合、 INSearchForMessagesIntentHandlingを実装 送信者を検証・解決する例: ユーザーが指定した(話した)送信者が問題ない場合 →INPersonResolutionResult.success(with:) →次のパラメータの検証・解決
送信者が不正または指定されていない場合 →INPersonResolutionResult.needsValue() →Siriがユーザーに誰からのメッセージを検索するか聞いてくれる
IntentHandlerの実装 resolve confirm handle メッセージの検索の場合、 INSearchForMessagesIntentHandlingを実装 メッセージの検索で特に確認することないので省略!
IntentHandlerの実装 resolve confirm handle メッセージの検索の場合、 INSearchForMessagesIntentHandlingを実装
IntentHandlerの実装 resolve confirm handle メッセージの検索の場合、 INSearchForMessagesIntentHandlingを実装 検索ワードが指定されない場合があるのでバリデーション にわかには信じがたいが、 resolveフェーズで検索ワードを要求 する術がない
IntentHandlerの実装 resolve confirm handle メッセージの検索の場合、 INSearchForMessagesIntentHandlingを実装 検索APIを実行
IntentHandlerの実装 resolve confirm handle メッセージの検索の場合、 INSearchForMessagesIntentHandlingを実装 検索結果のオブジェクトを生成 ・内容はニュースのタイトル ・送信日時はニュースの公開日時 ・送信者はメディア
で代替する
Demo
Demo 検証環境 ・Xcode8 beta6 ・iOS10 beta7
Demo 検証環境 ・Xcode8 beta6 ・iOS10 beta7 「MeetUpで渡部さんからのソフトバンクが含まれる メッセージを検索」
どう話せばSiriは認識するのか • 「MeetUpで渡部さんからのソフトバンクが含まれるメッセージを検索」 →OK。検索ワード「ソフトバンクが」、送信者「渡部」 • 「ミートアップでソフトバンクが含まれるメッセージを検索」 →NG。「ミートアップ」がMeetUpアプリとして認識されない。 • 「ミートアップで日経からのソフトバンクが含まれるメッセージを検索」 →NG。「ミートアップ」がMeetUpアプリとして認識されない。
• 「MeetUpで日経からのソフトバンクが含まれるメッセージを検索」 →NG?。検索ワード「日経からのソフトバンクが」、送信者「-」 • 「MeetUpでメッセージを検索」 →NG。ハンドラの処理は行われるが、検索ワードがないのでエラー。
まとめ(所感) • SiriKit(Intents, Intents UI)が利用できるシーンは限られている • NewsPicks(ニュースアプリ)では、それっぽく動作させることはできるが、プロダクト としてリリースすることは難しい • Siriの認識精度は(少なくとも日本語では)あまりよくない
• 煩雑なやりとりをしてまでSiriを使うメリットはあるのか? ◦ 運転中や料理中などは便利かも?
おわりに • iOS10で導入されるSiriKitを実際に試して見たが、NewsPicksでは使えそうにない • 新しい技術は実際に試してみて、感触が良ければ取り入れることにしているが、今 回のように使えないこともある • 一見無駄なことをしているようにも思えるが、新しい技術を使ってみるのって楽しい ですよね •
ユーザベース、ニューズピックスではMeetUp以外にも隔週くらいでLTやってるので 新しい技術に触れる機会がたくさんあります! • 新しいこと好きなそこのあなた、一緒に働いてみませんか?
Fin.