tchikuba's blog

クリエイティブが輝ける組織をエンジニアリングする

「Jubatusハッカソンwith読売新聞」に参加してきました!

先月8/23(土)、8/24(日)の2日間で歌舞伎座タワーのドワンゴ本社を会場として行われた Jubatusハッカソンwith読売新聞に参加してきました! 読売新聞の記事の写真にバッチリ写ってましたw

ちょっと遅くなってしまいましたが参加レポートをば。

Jubatusは「ユバタス」と読み、Preferred NetworksNTTソフトウェアイノベーションセンタが開発した オンライン機械学習向け分散処理フレームワークです。 ※公式HPの受け売りですが(笑)

今回のハッカソンはピンで参加したのでその場で即興でチームビルディングしました。 以前から知人で選挙ドットコムCTOの佐藤さん 率いるチームで「2030年の日本の首相を予測する」というチャレンジング?(笑)なテーマに挑戦しました。 大枠やったことを書くと、1985年時点での各政治家の当選回数、世襲か否か、得票数、選挙区の都市などを説明変数として 2000年の閣僚経験数が一番多い政治家=首相を推定する 回帰モデルを5年毎に作って2015年時点から2030年を推定する、という感じです。 説明変数のデータは主にwebクロールしてきたものを利用しました。

私の担当は前回参加したハッカソン同様、この辺のクロール周りだったんですが やはり時間がかかって思ったより大変でした。(前処理大事) 収穫としてはDBpediaの存在を知ったことです。 SPARQLというSQLライクな言語でデータの関係性を含めてデータ取得出来ます。 例えば安倍晋三だとprop-ja:内閣を参照すると閣僚経験数が分かります。 ※SPARQLって難解で使いづらいんですがw

で、肝心の結果なんですがこれが面白かった(笑) 以下、首相に最も近い順の予測結果です。

  1. 亀井静香
  2. 甘利明
  3. 前原誠司
  4. 石破茂
  5. 岡田克也
  6. 枝野幸男
  7. 林芳正
  8. 安倍晋三
  9. 藤井比早之
  10. 大畠章宏

ホントはチームメンバーみんなで「小泉進次郎」とか期待してたんですが全くかすりもせず(笑) 1位の亀井静香は2030年には94歳だし(笑) ちょっと悔いが残ったのはJubatusのオンライン機械学習の良さを全く活かせてなかったりwebインタフェースがなかった辺りでした。 ただ今回のようにかなり具体的なデータで機械学習を応用すると話題としては面白いものが出来るなぁということが改めて実感出来たのは収穫でした。

以下は発表会の様子です。

発表会はどなたもかなりガチの内容で非常に刺激を受けました。 その中でも特に印象に残っていたのがドワンゴの小田桐さんの発表でした。 ニコニコ動画のコメントをChainerによるディープラーニングでカテゴライズや次のコメントを予測する、 みたいなことをやってそのモデルをtwitterに応用しても結構使えるよね、という内容でした。 スライドが公開されていないかググってみたんですがちょっと見当たらず残念ですが・・・

ちなみにこのChainerもJubatusを開発したPreferred Networksが開発したディープラーニングフレームワークです。

「Jubatusハッカソンwith読売新聞」参加レポート

Jubatusと自然言語処理

同じチームメンバーの方がまとめたQiita記事が分かりやすいです。 自然言語処理を行う際に避けて通れない前処理が機能としてJubatusに備わっているので便利ですね。

オンライン(機械)学習とは

オンライン機械学習はJubatusの最大の特徴とされています。「機械」を省略して「オンライン学習」とも呼ばれます。 オンライン学習について分かりやすい解説は以下のNTTデータの記事です。

以下の記述がオンライン学習について端的に言い表しています。

オンライン学習は機械学習モデルにおける学習アルゴリズムの1つであり、データを1つずつ読み込んでモデル更新を繰り返すことで学習を行う手法です。反対に、データを全て読み込んでから学習する手法をバッチ学習と呼びます。

バッチ学習のデメリットとオンライン学習のメリットについては以下の記述が分かりやすいです。

通常、機械学習で作成したモデルは運用していくうちに徐々に精度が低下するため、モデルの精度維持のためには定期的に新たなデータを加えたモデル更新が必要となります。この時、バッチ学習では過去のデータと新しいデータを合わせてモデルを1から作り直す必要があり、多くの計算時間が必要になります。オンライン学習を用いれば、新たなデータのみを既存のモデルに取り込む逐次更新が可能になるため、モデルの精度維持がわずかな時間で可能になります。これを推し進めて、発生したデータをその場でモデルに反映すれば、モデルの精度低下を意識する必要すらなくなります。

このオンライン学習が迷惑メール判定ロジックに利用されていることを考えるとオンラインであることのメリットが分かりやすいですね。 常に迷惑メールの対象は増えていくのでバッチ学習で学習したモデルを運用してもすぐにそのモデルは古いものになってしまって 新しい迷惑メールを判定出来ないことになってしまいますよね。 そういう意味で特に変化の早いビジネス上では、IoTの絡みも相まってオンライン学習は今後拡大していくだろうと思います。

機械学習周りの勉強法

私自身、機械学習周りのインプットをし始めたのはここ半年くらいです。 インプットを初めて痛感するのは、統計学、機械学習、人工知能などの情報をググっても断片的な知識ばかりであまり体系的にまとまっていないので 初学者が体系的に知識をカテゴライズすることの難易度が高いという点でした。 体系的に知識を学ぶにはネットで楽しないでちゃんと本読めよ、というのが王道ではあるのですが、、 そう言っては身も蓋もないので何か良い方法はないかなと。

そこで個人的に最近良くお世話になっている銀座で働くデータサイエンティストのブログを書かれている Takashi J. OZAKIさんの以下の記事がオススメです。

ここで出てくる「落下傘方式」とは

「必要になった時に必要な項目だけ学び、覚えたらとにかく実践してみる」

という定義だそうですが、この勉強法はwebエンジニアとの親和性が高いんじゃないかと思います。 ググッたらちょっと古い「Rubyのパパ」ことmatzの記事がヒットしました。OSSのコードを読む場合の戦略の一つとして紹介されてました。

特に私の場合は機械学習アルゴリズムそのものを研究する訳ではなく、既に確立された機械学習アルゴリズムを利用するユーザーの立場なので、 実際にJubatusを触ってみたりpythonの機械学習ライブラリのpandasscikit-learnを 実データで利用してみた方が理解が進んでいる気がします。

pandasの参考になった入門記事

scikit-learnの参考になった入門記事

Chainerの参考になった入門記事

参考書籍