「勉強会に行ってみた!」第9回「JJUGナイト・セミナー 機械学習・自然言語処理特集!」
event

「勉強会に行ってみた!」
第9回「JJUGナイト・セミナー 機械学習・自然言語処理特集!」

2015.01.22

ent87_img01.jpg

このところよく開かれるIT勉強会。スキルアップのためには行った方がいいのかなと思いつつも、どんな雰囲気なのか分からなくて二の足を踏んでいるという人はいませんか? この記事は、実際に勉強会にお邪魔して「こんな雰囲気でしたよ!」と紹介するのが目的です。こんな感じなら行ってみようかな、みたいに思ってもらえたらうれしいです。
三土 たつお

ent87_img02.jpg

今回は「JJUGナイト・セミナー」というJavaの勉強会にお邪魔しました。JJUGとは「Japan Java Users Group」の略で、Javaのユーザー有志で作っている会ですね。

会場は東京・青山にある日本オラクルでした。

これは入口なんですけど、すごく奇麗でホテルのロビーみたいに広々としてます。

ent87_img03.jpg

会場は広いセミナールームのようなところでした。参加者は約200人でほぼ満員です。

今回の題材は「機械学習・自然言語処理特集!」でした。機械学習というと「この商品を買った人はこれも買っています」みたいなレコメンドシステムとかでも使われてるやつですよね。難しそうなイメージがありますが、今回は初心者向けに分かりやすくというテーマだそうですので、ぜひ理解したいなあと思いながら参加しました。

■ 小宮さんによる「Javaでカジュアルにはじめる機械学習」

ent87_img04.jpg

最初はスマートニュースの小宮さんのお話でした。

いきなり濃い話からではなく、まずはカジュアルな話からということで、そもそも機械学習とは何か?というところから始まりました。機械学習とは「経験(データ)によって賢くなるアルゴリズム」とのこと。多くの経験(データ)を与えることでその中から知識やルールを自動的に獲得したりでき、応用例はたとえばスパムメールの判定や、ニュース記事のカテゴリーの分類、売上の予測などなどがあるそうです。

で、それを Java でやるとなったらどうすればいいか。「まず既存のツールが十分にあるので、それを使おう。機械学習の実装は辛みしかない」とのことでした。自分で実装をやって大変だったんだろうなあということがすごく伝わってくる口ぶりでした。

ent87_img05.jpg

で、ツールを使うわけですが、実際に機械学習をやろうと思ったら、対象とする問題にはどんなアルゴリズムが適しているか?というのを試行錯誤しながら探る必要があるそうです。で、その段階というのは Javaはあまり向いてなくて、RやPython でやるのがいいのではないか?とのこと。その結果見つかったアルゴリズムをシステムに組み込むという段階になったらJava は向いているそうです。

ent87_img06.jpg

なお、機械学習のためのサンプルのデータセットというものが世の中にはあり、なかでもUCIのMachine Learning Repository にある Irisというアヤメに関するデータセットは機械学習界の「Hello World」にあたる定番のものなんだそうです。面白いですね。

■ 猿田さんによる「Spark/MLlibではじめるスケーラブルな機械学習」

ent87_img07.jpg

小宮さんによる概要の話を受けて、次は具体的にJavaで機械学習をするためのツールのひとつ、「Spark/MLlib」についてNTTデータの猿田さんが教えてくれました。

まず、機械学習は非常に大量のデータを扱うことがあります。たとえば、ネットショップでの全ユーザーの購入履歴みたいな日々増え続ける膨大な情報をもとに商品リコメンデーションをしようとする場合とかが考えられます。「Spark/MLlib」は、そういう膨大なデータを多数のホストで分散して高速に処理するためのツールなんだそうです。

そういう処理についてはこれまでHadoop Map Reduce + Mahout という選択肢がありましたが、Spark + MLlib は 、それらが抱えていた弱点を克服し、さらに高速に処理できるということで最近注目されているんだそうです。高速になる理由は、繰り返し処理の高速化です。

ent87_img08.jpg

もともと機械学習では、同じ処理を何回も繰り返して精度を高めるということをよくやるそうなんですが、Hadoop + Mahout では繰り返しのつど中間データの読み書きのために分散ファイルシステムにアクセスする必要があり、そこがオーバーヘッドになっていました。Spark では、中間データをメモリ上に保持してなるべくディスクにアクセスしないようにしたり、何度も読み込むデータはキャッシュしておくことで、繰り返し処理の際にその分が高速化されるという仕組みのようです。

ent87_img09.jpg

この画面は、「KMeans」という処理で点の集合をいくつかのクラスターに分けるデモのものです。Spark + MLlib の場合は10秒程度ですんなり終わるのですが、Hadoop + Mahout の場合は1分かかっても終わりませんでした。その間、猿田さんは関連する説明をしながら、たまに Hadoop のようすを確認しては「ほら、まだ終わってない」と言っていたぐらいでした。

■ 大谷さんによる「Luceneと日本語の検索」

ent87_img10.jpg

最後は大谷さんによる、検索についての話題。まずは、検索の仕組みについての話から始まりました。膨大な文書の中から高速に検索ができるのは、あらかじめどのキーワードがどこにあるかという情報を検索システムが切り出しているからです。このキーワードのことをトークンといいます。

トークンを切り出す処理の一例としては、まずHTMLタグを削除するといったような事前処理を行い、そこから形態素解析によって単語を切り出し、さらに単語の活用形を原形にもどすといったような事後処理を行います。こういう一連の処理を行う部分をアナライザーというそうです。

ent87_img11.jpg

Luceneという検索システムでは、もともとlucene-gosen というアナライザーがあって大谷さんがメンテナンスをしていたのですが、いまではkuromoji というものが Lucene でデフォルトで使えるようになっています。実際にLucene を使った検索の例を見せてくれました。

ent87_img12.jpg

「Luceneと日本語検索についてjohtaniが話を」というもとの文章が、JapaneseTokenizer というトークンの切り出し器によって「Lucene」「と」「日本語」「検索」「について」のように単語に切り出されている様子が見えます。

トークンを切り出す方法として、単語で切り出す以外にもN-GramというN文字ずつ無理矢理切り出す方法があり、こちらは検索漏れが少ないという利点があるものの、あんまり関係ない結果が出てくることもあるようで、「頭が悪い検索を見かけたらN-Gramかもしれません」とのこと。なるほどそういうものなんですね。

■ 懇親会

ent87_img13.jpg

終了後は場所を別の部屋に移して懇親会が開かれました。主催であるJJUG幹事の槙さんに話を伺いました。

JJUGではJavaのコアな話題を取り上げることが多いんですが、今回は門戸を広げることを狙って機械学習という一般的なテーマにしたそうです。そうするとふだん来ない方もいらして盛況になるんですが、懇親会の参加率が低いことがあるのがちょっとした悩みなんだそうです。PHP勉強会を主催する安藤さんも言っていたことなんですが、勉強をするだけなら実は自宅でもできるんですよね。懇親会に参加すると交流も広がるし、いろんな話も聞けるので楽しいと思いますよ。

懇親会には「Java女子部」の方々も参加していました。女性エンジニア向けのコミュニティで、JJUGとは別に勉強会を開催したりもしているそうです。「前回はRaspberry Piをやりました。初心者向けの内容が多めなのでぜひ来て下さい」とのこと。面白そうですね。

なお、JJUGでは幹事(特に若い方)を募集しているそうです。Javaイベントの企画・運営に興味がある方は Twitter で @making に声をかけてください、とのことでした。

帰りのエレベーターの中で、発表者の方々が「今回の内容、簡単すぎたかな?」と心配していました。でも今回は機械学習をビギナーに紹介することを意識した勉強会です。入門と銘打った勉強会が難しくてついて行けないようこともたまにあるなかで、ビギナー向けの勉強会がちゃんとビギナー向けなのはいいことだなと思いました。

今回参加した勉強会:
「JJUGナイト・セミナー 機械学習・自然言語処理特集!」
http://jjug.doorkeeper.jp/events/18378

三土たつお。1976年生まれ。プログラマー、ライター。プログラマーとしてはふだんPHPを書いてます。
ライターとしてはニフティのデイリーポータルZとかで書いてます。
http://mitsuchi.net/

この記事はどうでしたか?

おすすめの記事

キャリアを考える

BACK TO TOP ∧

FOLLOW