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から使える機械学習ライブラリなど
スライド中の★はGitHubでの星の数。
liblinear-java
ロジスティック回帰とSVM (Support Vector Machine) の実装。
MLlib (Spark)
Scala でごりごり書ける。
Mahout
新しい分析プロジェクトで積極的に選ぶ理由はないかも。
Spark よりは枯れたライブラリ。
h2o
Deep learning は機械学習のアルゴリズムの一種。
最近盛んに研究されている。
Deep learning をJavaで取り組むならこれ。
UCI Marchine learning repository
スライドで示されているサイト:
UCI Machine Learning Repository: Data Sets
Iris(アヤメデータ)を使われることが多い。
一部では機械学習の Hello World と呼ばれている。
Weka の入力形式
ARFFファイルが標準。ヘッダがついたcsvファイルのようなもの。
Spark/MLlibではじめるスケーラブルな機械学習
猿田 浩輔さん(株式会社エヌ・ティ・ティ・データ)
自己紹介
大規模分散処理基盤のインフラエンジニアをしている。
Hadoop MapReduce と Spark の処理の流れの違い
機械学習の多くは反復処理することで精度を上げている。
Spark は RDD に変換をかけて新しい RDD を生成して、というのを繰り返す。
RDD (Resilient Distributed Datasets) を理解するための参考資料です。
Apache Sparkで始めるお手軽リアルタイムウインドウ集計 | NTTデータ先端技術株式会社
記事後半のサンプルプログラムの内部動作を説明する図で、RDD の中身と変換していく様子を説明しています。
Resilient Distributed Datasetsに関する論文まとめ(1章〜5章 - 夢とガラクタの集積場
RDD の論文から概念と動作概要を和訳して掲載しています。
分散処理フレームワーク間で連携が可能
Hadoop2 からはリソース管理基盤を YARN として分離した。
MLlibが提供する道具の一例
MLlib は Spark の中でも開発が活発。
まとめ
MLlib は Spark や Hadoop と組み合わせることで真価を発揮する。
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 … 技術評論社
単語の区切り方
英語の場合、単語はスペース区切りなので明らか。
日本語は区切りがあいまいなので工夫が必要。
TokenFilter
Tokenizer が出力した Token 列に対して処理を行う。
lowercase:
Token を全て小文字にすることで、大文字小文字の区別をしない検索が可能となる。
stop:
検索に利用したくないトークンを消す。
例えば、"is" や "not" のような大量に出現するトークンを消す。
kuromoji_baseform:
活用形を基本形に変換する。
例)「美味しかっ」⇒「美味しい」
そのほかの主な機能
GEO:
緯度経度を与えて、半径何km以内という指定が可能。
ハイライト:
検索がヒットした箇所をハイライトする。
ファセット:
検索結果を単語で group by して件数を取得できる。
グルーピング:
特定のワードを含むものは一つにまとめて検索結果として出力する。
資料
機械学習をさらに深く学ぶためのオンライン講義をまとめて下さっています。
みんなで人工知能について学ぼう!無料で学べるオンライン講義を紹介する。 - Togetter