ぱと隊長日誌

ブログ運用もエンジニアとしての生き方も模索中

JJUGナイトセミナー「機械学習・自然言語処理特集!」レポート

2014/12/17に開催された、JJUGナイトセミナー「機械学習自然言語処理特集!」レポートです。
【東京】JJUG ナイト・セミナー「機械学習・自然言語処理特集!」12/17(水)開催 - 日本Javaユーザーグループ/Japan Java User Group | Doorkeeper

スライド資料に無い説明を中心にまとめています。ぜひスライド資料を併せてご覧ください。

【参考】としている個所は私が挿入しています(補足や参考資料など)。発表者の意図したものではありませんので、その旨ご了承ください。

Javaでカジュアルにはじめる機械学習

小宮 篤史さん(スマートニュース株式会社)


自己紹介

スマートニュースの開発に携わっている。

機械学習とはなんぞや?

機械学習にはデータの分類も含まれる。

機械学習で何ができるのか

予測・回帰は機械学習というより統計に近い。

パターンマイニング/アソシエーションルールはデータの集まりから知見を見つける。

スライドで挙げた以外に、異常検知でも使われる。

教師あり学習は「正解がある」のが前提。
【教師あり学習の例】
・分類/識別
・予測/回帰

教師なし学習は正解がない。
【教師なし学習の例】
・パターンマイニング/アソシエーションルール
クラスタリング

何を入力データとするのか

機械学習は万能ではない。入力データには制約がある。

特徴ベクトルの良し悪しがモデルの精度に効いてくる。

【参考】
スライドで出てくる「ダミー変数」の説明と作り方がまとめられています。
http://labs.xica-inc.com/2014/06/how-to-use-dummy-variables/

得られた結果は正しいのか

教師なし学習にも結果の評価方法があるが、今回は教師あり学習に着目する。

k-分割交差検証 (k-fold cross validation)
  学習データを同じ大きさのk個に分割する。
  k個の内、k-1個でモデルを作る。
  このモデルを残りの1個で評価する。
  これをk回繰り返す。

Precisionは適合率。Recallは再現率。
共に最大値は1で最高の結果を意味する。
この数値をどう上げていくかが機械学習では重要。

機械学習の実装、辛みしかない

車輪の再発明をするな、というのが経験からいえる事。

適材適所でいこう

アドホックな分析には試行錯誤が必要。
Javaだとモデルの開発効率が悪い。アドホックな分析をするにはRのほうがよい。

Javaから使える機械学習ライブラリなど

スライド中の★はGitHubでの星の数。

liblinear-java

ロジスティック回帰とSVM (Support Vector Machine) の実装。

Weka

機械学習アルゴリズムの提供数が多い。
少量のデータで試行錯誤する場合や機械学習の勉強を始める方向き。

MLlib (Spark)

Scala でごりごり書ける。

Mahout

新しい分析プロジェクトで積極的に選ぶ理由はないかも。
Spark よりは枯れたライブラリ。

h2o

Deep learning機械学習アルゴリズムの一種。
最近盛んに研究されている。
Deep learningJavaで取り組むならこれ。

【参考】
Deep learning(深層学習)についての解説です。

UCI Marchine learning repository

スライドで示されているサイト:
UCI Machine Learning Repository: Data Sets

機械学習の勉強や研究用にデータセットが公開されている。

Iris(アヤメデータ)を使われることが多い。
一部では機械学習Hello World と呼ばれている。

Weka の入力形式

ARFFファイルが標準。ヘッダがついたcsvファイルのようなもの。

【参考】
Wikipedia の Weka の解説に ARFF ファイルの説明があります。
Weka - Wikipedia

Spark/MLlibではじめるスケーラブルな機械学習

猿田 浩輔さん(株式会社エヌ・ティ・ティ・データ


自己紹介

大規模分散処理基盤のインフラエンジニアをしている。

HDFSHadoop MapReduce

HDFSHadoop MapReduce は連携して動作する。
巨大なデータを高スループットで処理することに重きを置いた設計となっている。

Hadoop MapReduce と Spark の処理の流れの違い

機械学習の多くは反復処理することで精度を上げている。

Spark は RDD に変換をかけて新しい RDD を生成して、というのを繰り返す。

【参考】
RDD (Resilient Distributed Datasets) を理解するための参考資料です。
Apache Sparkで始めるお手軽リアルタイムウインドウ集計 | NTTデータ先端技術株式会社
記事後半のサンプルプログラムの内部動作を説明する図で、RDD の中身と変換していく様子を説明しています。
Resilient Distributed Datasetsに関する論文まとめ(1章〜5章 - 夢とガラクタの集積場
RDD の論文から概念と動作概要を和訳して掲載しています。

分散処理フレームワーク間で連携が可能

Hadoop2 からはリソース管理基盤を YARN として分離した。

Hadoop MapReduce と Spark の処理の流れの違い

Spark はキャッシュを複数のスレーブサーバに分散して保持できる。

MLlibが提供する道具の一例

MLlib は Spark の中でも開発が活発。

まとめ

MLlib は Spark や Hadoop と組み合わせることで真価を発揮する。

Q&A

Q
MapReduce は途中結果を HDFS に書き出すため、途中でこけてもそこからやり直せる。
Spark のようにキャッシュだと最初からやり直しになるのか?
A
キャッシュしているサーバが生きていればそこから再開できる。

lucene と日本語の検索

大谷 純さん(Elasticsearch)


about

Elasticsearch を広めるのが役目。
困っている方を Twitter でフォローしたりもしている。

OSS として提供しているプロダクト
Elasticsearch : 検索エンジン
Logstash:ログ収集ツール
Kibana:格好いいグラフを描ける

Lucene の特徴

Lucene は Hadooop の生みの親である Doug Cutting が作った。

最新版は 4.10.2(講演時点)で、動作にはJDK7が必要。
ただし、JDK 7u25 - 7u55 はバグでインデックスが壊れるため、使用不可。

Lucene の主な機能

【参考】
転置インデックスについてスライドでも説明されていますが、こちらの記事を読むとより理解が深まります。
第3回 転置索引とは何か?:検索エンジンはいかにして動くのか?|gihyo.jp … 技術評論社

用語

ドキュメント(文章)はRDBのレコードに相当する。

フィールドはメタ情報(Wordのタイトルや著者に相当)に相当する。

単語の区切り方

英語の場合、単語はスペース区切りなので明らか。
日本語は区切りがあいまいなので工夫が必要。

Tokenizer

入力文字列をトークン列に分割する。

standard:
英語の文章を解析するときに使う。

TokenFilter

Tokenizer が出力した Token 列に対して処理を行う。

lowercase:
Token を全て小文字にすることで、大文字小文字の区別をしない検索が可能となる。

stop:
検索に利用したくないトークンを消す。
例えば、"is" や "not" のような大量に出現するトークンを消す。

kuromoji_baseform:
活用形を基本形に変換する。
例)「美味しかっ」⇒「美味しい」

そのほかの主な機能

GEO:
緯度経度を与えて、半径何km以内という指定が可能。

ハイライト:
検索がヒットした箇所をハイライトする。

ファセット:
検索結果を単語で group by して件数を取得できる。

グルーピング:
特定のワードを含むものは一つにまとめて検索結果として出力する。

Q&A

Q
係り受けの情報の利用は可能か?
A
現状、ロードマップにない。形態素解析のみ。

資料

機械学習をさらに深く学ぶためのオンライン講義をまとめて下さっています。
みんなで人工知能について学ぼう!無料で学べるオンライン講義を紹介する。 - Togetter