2度目のベトナム出張を終えた id:necojackarc です!
8月22日と23日の2日間で開催された機械学習ハッカソンに参加してきましたので、それについて書きたいと思います。
イベントの概要は以下のとおりです。
Jubatus ハッカソン with 読売新聞
Jubatusハッカソン 〜読売新聞記事で自然言語処理をしてみよう!〜
以下、イベント詳細ページからの一部抜粋です。
会場
ドワンゴ歌舞伎座タワー 14Fセミナールーム
賞品
- 1位: Hubsan X4 HD
- 2位: IRKit
- 3位: Raspberry Pi model B ボード・ケースセット
- 参加者全員
- Jubatus ぬいぐるみ
- AWS クーポン
運営 (敬称略)
協力 (敬称略)
- データ提供: 読売新聞社
- 会場提供: 株式会社ドワンゴ クーポン
- 提供: アマゾン データ サービス ジャパン株式会社
このイベントの様子については、8月25日の YOMIURI ONLINE で「新聞記事と分析技術で新サービス考える「ハッカソン」 : 科学 : 読売新聞(YOMIURI ONLINE)」として既に記事が出ております。
本家に勝てるレポートを書ける気が全くしないので、イベント内容については是非そちらをお読みください!
戦果
さて、まずは結果から報告いたします。
3位入賞*1しました!
3位 チーム「ユバ松」…Maki
簡易なコミュニケーションツールで交わされた発言ややり取りから、関連のあるニュースを定期的に教えてくれる仕組み。
賞品として Raspberry Pi を頂きました!
ユバタスハッカソンで3位入賞してラズパイ頂いたo(^▽^)o #jubatus_hackathon pic.twitter.com/Qw6XcC9yfa
— はかせ(似非) (@na_o_ys) 2015, 8月 23
1位の方はなんとドローンを貰っていました。
私もドローンを飛ばして遊びたいです。
それと、参加者全員に Jubatus マスコットのぬいぐるみがプレゼントされました。
早速会社のモニタの上に設置しております。
超可愛い!!
チームメンバー
今回は4人チームで参加しました。
実はこの中でピクスタのエンジニアは私 (@necojackarc) だけです。
軽くメンバー紹介をしておきますと、上から順に某大手電機会社の研究員 (Apache Spark のコントリビュータ)、某大手SIerの技術部隊員 (機械学習本の執筆経験あり)、某有名ベンチャーのエンジニア、そして私と言った面々です。
優秀なメンバーのおかげでハッカソンを戦い抜くことができました。圧倒的感謝。
技術トーク
さて、結果報告はここまでにして、エンジニアブログらしい内容に入りたいと思います。
活用した技術(ツール)は主に以下の3つです。
- Jubatus (機械学習フレームワーク)
- Hubot (チャットロボットフレームワーク)
- Word2Vec (自然言語処理ツール)
どのようなものを作ったかについてもう少し知りたい方は、Qiita に発表資料をアップしていますので、そちらをご確認ください。
それでは、どのように活用したかを簡潔に書いていきたいと思います。
構成
まずは構成です。こちらは発表資料からの完全引用です。
- 学習: ニュース記事 -> 特徴ベクトル化
- 適用: チャット過去ログ -> 類義語追加 -> 特徴ベクトル化 -> モデルに対して類似文書検索
Jubatus
今回のメインツールです。
Jubatus には様々な機能が実装されているのですが、今回はその中の「情報推薦 (Recommender)」を利用しました。
与えられた読売新聞記事を全て Jubatus の Recommender を使い特徴ベクトル化し、それを発言履歴の特徴ベクトルと比較し推薦するという、シンプルな活用を行いました。
どのようにパラメータ設定を行えばより良い推薦が行えるのか、どのようなアルゴリズムが適しているのかなど、トライ・アンド・エラーでチューニングをしていきました。 最終的に近傍探索アルゴリズムは Locality-sensitive hashing を採用することにしました。
また、オンライン学習が可能という強みを活かすために、YOMIURI ONLINE の最新記事をチェックし、スクレイピングし学習データに追加するというスクリプトも実装しました。
モデルの逐次更新が可能なオンライン学習のメリットを活かせたと思います。
チューニングについては、チームメンバーの力が本当に大きかったです。 私はチューニングにはほとんど関わっておらず、チューニング作業をチームメンバーがしている間、私は YOMIURI ONLINE から学習からデータを作成するスクリプトを作成していました。
チーム参加だとこういった役割分担ができるのが良いですね。
Hubot
チャットと様々なモノを連携させる最も有名なロボットフレームワークかと思います。
今回は Slack と Jubatus を連携させるために使用しました。
工夫した点としては、
- Cron による定期起動
- execSyncs を活用した外部スクリプトとの同期連携
- Redis を利用した発言履歴の収集
の3点です。
チャットからコマンド叩けて、定期起動できて、外部スクリプトと同期連携できて、データの永続化ができるとか、Hubot なんでもできますね。
Hubot についてはピクスタ社内でも活用しているため、この部分は経験のある私が1人で担当しました。
ハッカソンで得た学びもあったので、今後ピクスタでも活かしたいと思います。
word2vec
word2vec による類似度計算を利用し、類似語辞典を作成しました。
word2vec は自然言語処理のためのツールのひとつです。
This tool provides an efficient implementation of the continuous bag-of-words and skip-gram architectures for computing vector representations of words. These representations can be subsequently used in many natural language processing applications and for further research.
詳細は公式サイトや Google 先生にお聞きください。
具体的には、ニュースサイトのニュースタイトルを3年分スクレイピングし学習をさせ、類似語を列挙可能にしました。 こちらは @na_o_ys が1人でサクッと作られました。凄い!
情報推薦を行う際に、学習データにない単語に対する推薦が難しいという問題の解決が目的です。
具体的には、発言履歴をベクトル化する際に、発言履歴とその類似語から特徴ベクトルを作成します。 そのベクトルと学習済みの記事を特徴ベクトル化したものを比較し、推薦対象を決定します。
先ほどの発表資料に類似語時点の実行結果を載せていますが、なかなかよい感じの結果を返してくれています。
自然言語処理も非常に興味深いですね。
感想
技術面に関してですが、基本的にはどのツールもシンプルに活用しました。 シンプルに活用せざるを得なかったというのが本音です。
初めて触るツールを使った超短期間での開発で作品を仕上げるためには、そうせざるを得なかったという感じです。
ハッカソンでまともに戦うためには、技術に対するより深い知見、より高い実装能力が必要だなと実感しました。
この点に関しては、圧倒的実力差を眼前に叩きつけられたので、一日でも早く差を埋めれるよう精進していきます。
また、技術面以外では、アイデア出しが本当に大変でした。 最も大変だったのは何を作るのかを決める、このアイデア出しの段階だったと思います。
夕方まで悩みに悩み、その間堀北真希結婚のニュースがあり、私が冗談で堀北真希をチャットルームに常駐させてアレコレしようという提案をしたら、それがそっくりそのまま採用されることになってしまいました!笑
アイデアはポンと出てくるものではないと思うので、常に何か面白いものはないかと考え続ける姿勢が大事ですね。
ハッカソンはとても楽しく学びも多いので、今後も積極的に参加していきたいです!
素晴らしいハッカソンを企画してくださった関係者の方々に感謝の意を述べて締めとしたいと思います。
ありがとうございました。
*1:全15チーム