とりあえずやってみればいいじゃん

とりあえずやってみればいいじゃん

エンジニア関連のことについてつらつら書くブログ

iOSDCで自然言語処理の話をしてきました #iosdc

iOSのカンファレンスなのに自然言語処理(以下、Natural Language Processingの略語であるNLPを使います)に比重を置いた話をしてきました。登壇内容はスライドと後日公開されるビデオ見ればわかると思うのでここでは裏話的な話を。

iosdc.jp

なぜこのCfPを出したのか

NLPが好きだから」「NLPを再び勉強するきっかけが欲しかったから」「NLPの面白さを知ってもらいたい」とかそんなかんじです。

スライドにもちらっと書いてますが、私とNLPとの付き合いは大学時代まで遡ります。意味不明な計算出て来るし、変な解析結果が返ってくることもあって「なんじゃお前」と思ったこともありましたが、次第にその奥深さが好きになっていきました。ただ、私が好きなNLPというやつはとっつきづらい印象を持たれがちだと思うんです。きっと用語がいけない。ちょっとNLPに関する用語を並べてみましょう。

コーパス、確率文脈自由文法、決定木、N-gram、コスト最小法、隠れマルコフモデル、期待尤度推定法、最大エントロピーモデル、チャンキング、文節数最小法…etc

日本語のはずなのにわけがわからない(^q^)でも一歩ずつ解釈していけばそこまでビビることないし、様々な場面で使われていて楽しい分野です。ちょうどWWDC 2017でNLP APIに関するセッションもあったし、iOSエンジニアにもNLPの良さを知ってもらおう、そんな思いを込めてCfPを出してみました。

登壇資料ができるまで

久々にNLPを学び始めたら楽しくなってきてしまいまして、気づいたら脱線して固有表現抽出に特化した資料を作っていました。

派生資料のわりには長いものを作ってしまい、結局potatotipsで発表した時は5分で収まるよう短縮版資料を作りました。

これらと同時並行で取り掛かっていたのは自然言語処理とアプリ-WWDC 2017-という資料作りです。これはWWDC2017のNatural Language Processing and your Appsのセッションをざっくり日本語訳したものになります。このセッションを聞いてNLP APIがどんなものなのかがわかりました。ただ専門的知識はそこまで説明されていないので、オライリーの『入門 自然言語処理』をつまみ読みしてNLPをうまく説明するための言い回しを探しました。これだけだとイマイチNLP APIのことがわからないのでNLP APIに無茶振りして遊んでみたりもしました。その結果はNLP APIでいろいろ試してみたという記事にまとめています(NDAの関係でiOSDC登壇日には公開できなかったのですが)。

こうやってなんやかんや準備していたのですが、当日になってちょっと気になることが出てきました。「NLPをローカルでやる意義は何なのかという質問が来たらどうしよう」。

登壇資料を作る前からこのことについてはぼんやり考えていました。当日も考えた結果、出てきた答えは「まあほとんどのアプリは関係ないんじゃないかな」。普通にNLPの力を借りたいのであればGoogleのCloud Natural Language APIあたりがいい仕事をしてくれるはずです。独自ロジックが必要ということであってもクライアントサイドではなくサーバサイドでやった方がいいような気がします。そもそもAppleNLP APIは日本語対応していない部分がありますし。

ではNLP APIを使うメリットは何か。一番はオフラインでも使えること、になるかと思います。極端な話になりますが、キーボードアプリを考えてみましょう。オフラインで変換が出てこない、なんてたまったもんじゃありません。あれはアプリ内に辞書とかロジックとか持ってるはずです。これと同じように、例えばテキスト入力が頻繁に発生するアプリなら内部にちょっとした辞書持ってそのロジックも内部で書いてオフラインでも快適体験を提供するという選択肢はなくはないと思います。

その他メリットとしては手軽さでしょうか。WWDCのセッション中に出てきた例で、写真に説明文を付けて保存し、後から文字列検索すれば該当の写真が出てくるというアプリがありましたが、あんなかんじで大層な処理が入らない(重要語抽出とか、トピック判定レベルのことをやらない)場合はNLP APIを使って手軽にやればいいんじゃないかと思います。

加えて言うなら可能性を感じませんか?ということ。WWDCのセッションの中で、iMessageとNewsアプリ間で固有名詞の共有がされる例が出ていました。つまりアプリをまたいで情報のやり取りができるということです。我々開発者が作ったアプリがどこまでその恩恵を受けられるかはわからないのですが、もし他アプリでの経験を自分のアプリで活かせるのであればこれは面白いことだなと思います。

ということで当日の朝になってスライドの最後に「来そうな質問と回答」スライドを付け加えましたw他の質問で終わったから使わなかったけどねw

当日

ニッチな内容だし人そんな来ないだろうなーと思ってたのですが、満席と言っていいくらいの混み具合。思わず一番前に座っていたスタッフに漏らした言葉は「こんなはずじゃなかったw」。まあ登壇としてはいつも通り。try!Swiftで何百人相手に登壇した時に比べれば全然だし、時間もぴったりというかんじです。

質問の中で「解析の失敗や成功を学習していく機構はあるのか」という趣旨のものがありましたがそこらへんは私も気になるところです。WWDCのセッションを見たかんじだと、定期的に改良されたモデルが配信されるようなのですが、自分でカスタマイズしたい時(珍しい野菜の名前がうまく解析できるようになってほしい、アニメのタイトルが認識できるようになってほしいなど)を思った時はどうすんだろとかいろいろ疑問はあります。まあ今後の発展に期待です。

今後

再び自然言語処理の面白さに触れて楽しくなってきたところなのでNLPに関して目標立てようかなと思います。まずはNLPの技術を使ったアプリを作ること。「こんなアプリがあったら個人的に便利かもしれない」というなんとなくの妄想は出てきました。場合によってはMacアプリになるかも。

あとはアプリ関係なく普通にPython使ってNLPとの戯れを深めていつかPyCon JPに出たい。何年後かはわからん。

そんなこんなでこれからもNLPの勉強はしていけたらと思います。いい機会を与えてくれたiOSDCに感謝!

f:id:akatsuki174:20170921203325j:plain