RettyのCTOが語る、機械学習の活用事例

樽石将人氏(以下、樽石):みなさん、こんばんは。RettyCTOの樽石と申します。Web2.0の会社です。

(会場笑)

(先ほどのセッションが)すごく未来の話だったので(笑)。かなり普通になってしまうと思いますが、参考になるところもあると思うので、30分ほどお時間をいただければと思います。

会社とサービス紹介をしたあとに、Rettyはこの2年くらいビッグデータの分析をやってきたのでその話をしようと思います。

最初に自己紹介です。樽石将人と申します。日本に100名くらいしかいない苗字なので、今まで同じ苗字の人とは一緒に働いたことはありません(笑)。

もともとRedHatというLinuxのOSの会社でOSやコンパイラを作っていました。そのあとGoogleでエンジニアとして働いて、楽天などでプライベートクラウドを作った後、2014年6月からRettyのCTOでいろいろやっております。

会社については、設立が2010年11月。ちょうどAndroid auみたいなCMが出たころで、これから日本は「モバイル・ソーシャルになります」と言っていた時期です。その時期に設立したというのもあってモバイルファースト、ソーシャルファーストでサービスを開発してリリースしております。社員は今100名程度になっております。

Rettyとはそもそも何かと言うと、Googleで食べ物のキーワードで検索するとよく目に付くようになっている口コミサイトです。最大の特徴は、口コミする人が実名と顔写真などを公開して「このお店がよかった」というのをおすすめするサービスだという点です。月間利用者は3,000万人くらいになっています。

機械学習に取り組んだきっかけ

会社とサービスの紹介は以上にして、本題の機械学習の取り組みについてお話しいたします。もともとRettyは口コミサイトなので、サービスを2011年にリリースして、それから3、4年はずっとデータを貯めることをやっていました。口コミの数が数百万件を超えたのが2015年くらいですね。なので貯まったデータを活用していろいろ価値を提供していこうという感じで(機械学習の)取り組みを始めました。

2015年の最初くらいにいろいろやってみたあとに、先ほど紹介されたGoogleさんのTensorflowが2015年末にオープンソースとして公開されました。「じゃあちょっと使ってみようかな」という感じで、ディープラーニングの実験を始めました。

そこそこ使えるし、サービスでもなにか使えそうな手応えがあったので、本格的にやろうと。とはいえずっとスタートアップで、このときもエンジニアがそんなにいない。数名とかで予算もあまりないので、どうしようかなというところで、「自分で作ったら安いよね」ということに気づきました。

あとはエンジニア的発想なんですが、機械学習そのものを知るというか、「なんでこれ動いてるの?」みたいなところを知る目的も兼ねて自分たちで機械学習の基盤を作りました。

作りつついろんな実験を重ねて、2016年末くらいにだいたい基盤が完成していろいろ知見も貯まったので、本格的に機械学習をやろうという感じで活用が始まったと。そして今にいたる感じですね。

ディープラーニングのサンプルを見るとだいたい写真、画像の認識が大半なので、そのサンプルをやってみようかなということで始まりました。なので実験の始めのうちはほとんど写真データを使っていろいろやっていて。

知見が得られたころに、Rettyには口コミで日本語の文字の情報がたくさんあるので、こっちを使うともっといろいろできるかな、というところで、口コミの機械学習なども始めました。

機械学習をどのように活用したか?

具体的にどういうことをやったかみたいな例がいくつかあるので、それをご紹介いたします。これは1番簡単な例ですね。(スライドを指しながら)CNNというのは畳み込みニューラルネットワークの略なんですが、要は写真を分類する方法です。

右側はスマホでRettyのお店の写真ページを見たときの画面なんですが、料理や内観や外観、メニューなどが分類されて見えています。機械学習を活用する前は全部手作業で分類していたんですけど、料理写真自動発見はけっこう精度が高く実用化できそうだなということになったので、今は料理の分類はこれでやっているという感じですね。

CNNはすごく使い道が多くて、データセットを渡すと覚えてくれていろいろな分類ができるようになるので、もっといろいろな分類をさせようと。そうなると管理画面がないとけっこう面倒くさいので、管理画面も作ろうかなというので作ってみました。

(スライドを指して)これがその管理画面のスクリーンショットなんですが、各行が学習モデルで、上になんて書いてあるかと言うと、例えば1番上は店内分類機、下が外観分類機、料理分類機とかですね。いろいろなネットワーク構造で学習させてみて精度をみたり。そういうことができます。

もう1つの例は画像の超解像。テレビなどでよく出てくる話だと思うんですけど、地デジの情報をフルHDで見せる技術です。地デジはフルHD画質ではないので、フルHD画面で見ると少し粗くなってしまうんですけど、超解像を使うと荒くなっている部分を滑らかにしてくれる。

それをRettyの写真に対してもかけてみました。それがこの例なんですが、一番左が元データです。

文字のあたりを見るとわかるんですけど少しカクカクしている。

これと同じ画像をネット上にブログで書いているので、もし興味があったらあとで見ておいてください。1番右にいくと、文字のところがすごく鮮明になっていて、きれいになっている。こういうことをやったり。

口コミの例でいくと、食べ物って人によって好みがあると思うんですね。ラーメンが好きな人はだいたいラーメンの口コミを書きます。カフェが好きな人はカフェの口コミを書きますと。

ユーザーさんによって口コミの特性があるので、それをうまく学習させて2次元空間にマッピングさせてみたり。これを活用して似ている人を探す。似ているユーザーさん、趣味の合う人を探したり。

あと足し算・引き算ができるので、例えば自分からラーメンを抜いたらどこか? みたいな。樽石−ラーメン=なにか、みたいなだったりとか。いつも行く店を除いたらどこが残るかみたいなことができる。こういうことをやってレコメンデーションに活用しております。

62のアイデアのうち、10個が本番へ

1年くらいずっと機械学習実験をやってきたんですけど、振り返ってみて、どんな感じだったかなぁと。「こんなことできそうじゃない?」みたいなアイデアを数えたら62個出していて、「じゃあやってみようよ」というのでいろいろ試して、本番サービスに今10個くらいリリースできました。

上がプロジェクトの管理シートで、右が2016年1月の目標と実績ですね。1番左がプロジェクトが終了したときの最終結果なんですけど。1番上の1、2、3、4、5となっているのが実際にリリースした機能の数です。「毎月1個は出そう」という目標を立ててやっていたので、1、2、3、4、5とどんどん増えていったと。

リリースさせるにはまずアイデアを考えて、誰かやりたい人がいないか探して、始めてみて精度がどうなのか確認して、実際に使えるなら「じゃあ出そう」という感じで進めていくんですけど。

アイデアは出したけどアイデア止まりのものもけっこうあって、例えばこの最終結果を見てもらうと、アサイン未定というのは、アイデアは出したけどまだやる人が決まっていないみたいなことで、62個。

「じゃあやります」ってなったのが36個あって、実際にやり始めて29個くらいになって、やってみてそこそこ良いのができたから「実際に使えるか見ようよ」っていうのが17個。最終的に世に出たのは10個という感じになりました。

なのでアイデア出して全部が全部リリースというのはけっこう大変だなと。人数がそもそも1人・2人くらいでやってたのでかなり大変(笑)。しかも機械学習はまだ投資フェーズで。 これが使えるのか使えないのかわからない、みたいなところだったので、空いている時間に、Googleさんで言う20パーセントルール(注:勤務時間の20パーセントを、好きなプロジェクトのために使ってよいという就業規則)みたいな感じでやっていたので、こういう結果だったんですけど。そこそこ数打てばなんとか出せるなという感触が得られたのが、2016年の1年間の結果です。

いろいろ紆余曲折あってその詳細を日経さんに記事にしてもらっていて、「Retty 機械学習 日経」などで検索していただくといろいろ文章が出てくるので、もしご興味があったらお読みいただければと思います。

2016年に機械学習の実験をけっこうやって、いよいよもっとちゃんと使おうよという感じで取り組み始めたのが2017年、今年ですね。成果を見るのがたぶん1番いいのかなと思ってスクショを持ってきたんですけど。機械学習をすごくがんばって、機械学習だけじゃないんですけど、いろんなビックデータ分析などを試みてとにかくいいものを作ろうというので作ったものがこれです。

大きいのはまず写真をうまく出せるようになって、写真をドンと大きく表示できるようになった。ここはけっこう大きいですね。

AIはコンテンツ制作にも応用

ほかにもいろいろな分析をして、機械学習はあまり関係ありませんが、コンテンツの制作をもっとしっかりいろいろなビッグデータを活用してやろうと。ネットの世界はだいたいニーズが多様化していて、ロングテールにどうリーチしていくかがすごく大事なんですね。

そのロングテールにビッグデータの解析によってうまくマッチングしていこうと作ったのがこれです。これは「渋谷 カフェ 電源」の例なんですけど。「渋谷 カフェ 電源」っていうニッチなニーズがあったときに適切なお店を、しかもわかりやすく見せられるようにいろい ろ仕組みを作りました。

ここはけっこうがんばっていて。例えば「渋谷 カフェ 電源」というコンテンツに対して、そのお店のキャッチコピーに、例えば「電源あり、Wi-Fi完備、作業やミーティングに最適なおしゃれカフェ」とバシッと出てきたり。2店目も「渋谷ロフト2階、Wi-Fi・電源完備」とか。3番目も「電源席もあり」みたいな感じで、わかりやすくコンテンツを提供することをやってみました。

それだけでなく、電源、Wi-Fiはもちろんあるんだけどそれ以外にどんな特徴があるのか。例えば1店舗目は、電源、勉強、長居、ソファ、1人といった特徴があるので、そういう場面だったら使えますよと。

2番目だと穴場、喫煙みたいなのが出てきたり。3番目は勉強、喫煙みたいな感じで、いろんな特徴があるのでそれを見て自分のニーズに合ったお店を探しやすくなっています。こういうものができました。

機械学習基盤まで自作

以上がRettyの機械学習の取り組みです。これらは事業的・サービス的な取り組みの成果なんですけど、もう1つRettyがけっこうがんばった取り組みの1つに、自分たちで機械学習基盤を作ってみようというのがあり、それを紹介させていただこうと思います。

何をやったかと言うと、一言で言うと秋葉原に買い物に行って、夜中の0時に発売する記念イベントなどがあると思うんですけど、あれに出かけて行ったりして格安の部品を調達して基盤を自作したと。

こんな感じの、ちょっとおしゃれな光るファンを付けたりとか。これは予算が足りなくて自腹で買ったファンなんですが(笑)。こんなことをやりながら作っていました。 マニアックに振って、そのとき目立ちたかったんですね(笑)。なのでマニアックなほうに振って、あえて秋葉原で買ったよみたいな感じでブログを書いたらけっこう好評というか、「変なやつがいるぞ」みたいな感じでいろんな人に見てもらって。

これは去年のクリスマスくらいに書いて、そこから1年弱でPV数で5万くらい。多いのか少ないのかはわからないですけど、そこそこいろいろな人に見てもらえました。

詳細は「Retty 機械学習基盤」などでで検索すれば出てくるので読んでもらえればいいかなと思うんですが。要はそれぞれ自作のPCが5台あって、その中に機械学習するためのいろんな機材、ディープラーニングするときはGPUという機器がすごく大事なんですけど、それを全部のマシンに搭載して作っています。

いろいろ知見を得たくて、Tensorflowが動く機器は全部買おうと決めて、秋葉原にテクテク買い物に行って検証してベンチマークを実施したと。

なので「自分たちの使い方だったらこの型番で十分だね」とかそういう知見がけっこう得られて、少ない投資で大きなリターンを得られるシステムが作れたかなぁと思っています。

今年は基盤をさらに発展させて、1つ大きいのは自作で機械学習基盤を作りました。それだとそこそこは使えるんですけど、もっといろいろなことをやろうと思うとけっこう非力で。クラウドもそうなんですが、NVIDIAさん純正の機械学習用スパコンにDGX1というのがあるんですが、これと連携するような仕組み作りを行いました。

その結果、最初に機械学習基盤を作り始めたときはGPUのコアが3,000コアくらいしかなかったんですけど、今だと保有のGPUコアで30,000コア弱くらいになっていて。かつクラウドだったり、先ほどのDGX1もいろんなところにあったりするんですね。

日本の国家予算で買ったようないろいろなスパコンだったり、そういうのもけっこううまく使えたりするので、それを必要なときだけバッと使うようにして高速に素早く機械学習ができるような状態を作っています。

今はGPUコアでがんばれば、いっぺんに自分たちのデータを放り込んでたくさんのGPUを使いたいと思った時に、一応70万コアくらいまではなんとか確保できる状態になっています。

人が主役のサービスを作るために

だいたい以上で終わりなんですが、今後の展開を軽くお話します。RettyはWebで、例えば「六本木 ラーメン」と検索すると人気のお店がバンと出て、そこに行くことができたりするんですけど。

本当にやりたいのは、お店を探すときって、1人で行くこともあるんですけどだいたいみんなと行ったりするじゃないですか。そうすると友達同士で「あそこよかったから行こうよ」みたいな会話があったりして、そういう会話からお店が見つかって、実際に飲食店に行って楽しんで帰ってくる。それをネット上で実現したい。

Rettyは友人や信頼できるグルメ家といった人から飲食店を探すサービスみたいなものを目指しています。これを実現するためにいろんなことをやりたいなと。

RettyにはWebとアプリと2つあるんですが、Webはけっこう民主主義な世界なので人気店とかたくさん並んでるんですけど、アプリではぜんぜん世界が違うソーシャルサービスになっていて。

自分の友達のおすすめが出てきたり、例えば会社の中でランチ行くときに「あ、隣の誰々さんここ行ってた」とかそういう感じで会社のみんなでランチ会とかし合うとか。そういうことができるサービスになってます。

そうしたユーザー体験もどんどん便利にしていきたいので、基本は人が主役でいろいろできるようなものを目指していきたいです。そのために最新技術もそうですけど、今まである技術とかもどんどん使っていこうかなと考えています。

最後に、今お話したような内容にもし興味のあるエンジニアの方がいらっしゃったらぜひ声を掛けていただければと思います。ご静聴ありがとうございました。