Jubatusハッカソン with 読売新聞 #2 に参加した

Jubatusハッカソン with 読売新聞 #2 の告知をTwitterで知り、参加してきた。仕事で使い始めた機械学習で何かハックしてみたかったのと、Tコミュニティや協賛企業が運営する大きなハッカソンを一度体験してみたかったのだ。

事前

ハッカソン当日にインストールなどで時間が取られないようにと、ハッカソンで使う機械学習フレームワークJubatusが最低限動くように準備することにした。さいわい、Dockerイメージが公式で提供されていたので、Macでも何とかなった。他の機械学習フレームワークを使ったことはあったが、念のためチュートリアルを少しだけこなした。

Jubatusは日本発のオープンソース・ソフトウェアということもあり、環境準備やチュートリアルまで日本語のドキュメントが充実していた。機械学習をやってみたいが英語はちょっと…という人には敷居が低く、始めやすいかもしれない。

自分の周りではPython言語が機械学習でよく使われているが、JubatusのクライアントはPythonだけでなくC++、 Java、Rubyにまで用意されているのも良いと思った。自分はJavaプログラミング歴が長いので、Javaクライアントを試した。



初日


長野から特急あずさで東京へかけつけた。 開始時刻が13時と遅めだったので、当日入りでも何とかなった。福岡など、かなり遠方からの参加者もいたらしい。

会場は、銀座松竹スクエア内のドワンゴセミナールーム。2年前に参加した函数型なんたらの集いの会場もドワンゴだったのだが、それはすぐ近くの別なビルだった。参加者の何人かが間違えたが、すぐ近くだったので何とかなったらしい。区が違うレベルだと危うかった。





会場のビルになんとなく見覚えがあったが、2年前に行った海鮮料理屋が1階にあるためだった。ちょうどお昼時に到着したので、今回もそこで腹をふくらませることにした。銀座は築地市場のそばということもあり、おいしい海鮮丼を1400円くらいで食べれた。





それから会場へ。セミナールームは100人くらいは入りそうな立派な会場だった。WiFiも提供されており、ドワンゴさまさまだ。

ハッカソンの規則や日程説明のあと、すぐにチームビルディングが始まった。

今回のハッカソンに惹かれた理由は、読売新聞社の30年分の紙面データ(+発言小町のデータ)をハッカソン限定で扱えるということ。自分のアイデアは、読売新聞の紙面から「地域活性化」につながるデータを引き出したい、というふわっとしたものだったが、それでもk_tetsumaさん+Aさんの2人が協力を申し出てくれた。

チームで紙面データを眺めながらアイデアを検討していたら、Jubatus開発者の青年が現れ、色々アドバイスをくれた。自分は面識はなかったが、Twitterでよく見かけるkumagiさんだと分かり、びっくりした。

検討の結果、「観光・移住に役立ちそうな地域の魅力を伝えてくれるAI」を作ることにした。今回はたった2日間なので、観光にしぼって「地域の名所・名産、祭りやイベントなどの催事、街づくりの取組などを取り上げた新聞記事の特徴を学習させることでて、観光に役立ちそうな地域ニュースをピックアップしてくれる」とした。

ハックにあたり少し困ったのは、開発言語だ。新聞記事を検索&提示するWebアプリのバックエンドは、得意なJavaで書こうと思っていた。ただ、当日提供された読売新聞APIクライアントはPythonのみだった。そのためバックエンドの開発はPythonに統一する必要があったが、自分はPythonでWebアプリを開発したことはほぼない。本題のJubatus活用よりも、PythonでのWebアプリ開発に時間を取られそうな心配がでてきた。

ところがkumagiさんが、それならばと、PythonのFlaskフレームワークを使ったJSON APIサーバ、それを呼び出してビューを構築するフロントエンドにはReactという、今時のシングルページアプリケーションの土台をすごい勢いで書いてくれたので、一気に解決してしまった。自分はReactには薄々興味があったので、この機会に試すことができて幸運だった。





写真を撮り忘れたが、晩ごはんにはピザが提供され、うまかった。ミネラルドリンクやお茶も無料でいただけた。コンビニや自販機にへ買い出しに行く時間も惜しんでハックに集中できるように、という配慮かな。あとはエナジードリンクがあれば、いかにもハッカソンらしくなるが、今回はレッドブルやモンスターなどではなく、エスカップだった。何となくサラリーマンっぽいと感じた。2日間で2本飲んだ。

初日は23時までハックして解散した。自分は読売新聞記事をスクレイピングするスクリプトを書き、集めた紙面にラベルをつけて教師データを準備し、それをJubatusに学習させるスクリプトを作成した。k_tetsumaさんには教師データ作成の手伝いと、Jubatusにクエリを投げる機能の追加を分担してもらった。睡眠リズムを保ちたかったので、徹夜はせずに会場から徒歩10分くらいの安いカプセルホテルに泊まった。



2日目

8時ぐらいに会場に出向くと、すでに十名ほどがハックをしていた。前日から徹夜のチームいたらしい。運営陣も数名残っていた。頭が下がる。




朝はサンドイッチをいただきながらハックした。2日目の最後には成果発表が控えているのもあり、自分は発表準備を中心に、アプリのユーザインタフェースの見栄えや使い勝手をよくしたり、教師データを充実させたり学習モデルの評価(再現率や適合率)などをした。




お昼もまたまた提供していただき、ハンバーグ弁当で空腹を満たした。
 
残念なことに、メンバーのうちAさんが2日目は来てくれなかった。おそらく、自分がアイデアの具体化や実現に必要なタスク分担をしっかりせず、何となく進めてしまったせいではないかと思うので、申し訳なかった。次に参加するハッカソンではこのようなチーム運営をしっかりしたい。

夕方、ハッカソンの成果を発表するかしないかの確認が運営からあった。自分のチームはなんとか形になったので、発表することにした。

最終的に、全8チーム+Jubatus開発者の方1名が成果発表をした。他チームの発表では、新聞データから世情を学習して「今年の漢字」を推定するAIを作る試みがとてもおもしろかった。またLINEボットやSlackボットなど、人工知能のユーザインタフェースとしてボットを使っているチームもチラホラあるのもトレンドを感じられて良かった。

自分のチームは、なんと3位を受賞してしまった。 機械学習の利用という観点では単純なクラスタリング(ニュース記事の分類)だけだったが、ユーザが表示された記事に対して「観光に役に立つか、それともイマイチか」というフィードバックを受け付けて賢くなっていくようにしたのは、他のチームにはないJubatus活用だったかもしれない。このようなオンライン学習(学習してできたモデルを活用しながら、ノンストップで学習を続けてモデルを逐次更新していける)に対応しているのも、Jubatusのいいところだ。




3位の景品として、スマホから操作できるIoT電池MaBeee。1位はレゴのように様々な機能を組みわせてIoTアプリを作れるSony発のMesh、2位は腕時計タイプの活動量計vivosmartと、次のハックネタにつなげられそうな、粋な景品ばかりだった。

読売新聞社から提供されたデータは今のところハッカソン限定公開のため、成果物は残念ながらその場限り。発表資料は、他のチームのものと一緒にJubatusブログに公開された。ここにも埋め込んでおく。




 
最後に、参加者全員プレゼントとして、かわいいJubatusぬいぐるみをいただき、帰路についた。

ハッカソンに参加してみて

テーマが与えられ、当日即席でチームを組んでやるハッカソンというのは初めての参加で、至らない点もあったが、とても楽しかった。他の人のアイデアや技術的なチャレンジに触れられるのは、気持ちが鼓舞される。

実ビジネスのデータ(新聞紙面や発言小町)を扱えたことも刺激的だった。ハッカーコミュニティに協賛する、このような取組をしている読売新聞社はすばらしい。自分は実家を出て数年、紙の新聞をまったく読まなくなってしまったが、ニュースソースとしては新聞社の記事を見ることは多い。今回のような取組から新しいサービスが生まれて、新聞社が元気になるとよい。

Jubatusはほぼ未経験で臨んだが、カンタンに使えてよかった。機械学習というと、深いニューラルネットワークを使った深層学習(ディープラーニング)ばかり注目されがちな昨今だが、それらは学習に使う環境はハイスペックが要求されたりする。それに対してJubatusは、シンプルなニューラルネットワーク(主にパーセプトロンらしい)と、人がカリカリにチューニングしたアルゴリズムのおかげで、ずいぶん高速・軽量に動くようだ。実際、自分がJubatusを動かしたのはCPUはIntel Core 2でメモリは4GBのMacBook Air 2010だったが、学習も分析もラクラク動いたし、実用できそうな結果が得られた。Jubatusが活躍する場面も、大いにありそうに思う。

人気の投稿