More Related Content Similar to Jubatusの特徴変換と線形分類器の仕組み
Similar to Jubatusの特徴変換と線形分類器の仕組み (20) More from JubatusOfficial
More from JubatusOfficial (20) Jubatusの特徴変換と線形分類器の仕組み2. 本発表のねらい
l 現状のJubatusで何が出来るのかを機能の⾯面から解説
l 線形分類器の仕組みと使い⽅方
l 特徴抽出器の仕組みと使い⽅方
2
3. 機械学習とは?
l データから有⽤用な規則、ルール、知識識表現、判断基準な
どを抽出
l データがあるところ、どこでも使える
l 様々な分野の問題に利利⽤用可能
適用分野
レコメンデー
ションクラス 分類、識識別 市場予測 評判分析
タリング
情報抽出 ⽂文字認識識 ロボット 画像解析
検索索ランキン
遺伝⼦子分析 ⾦金金融 医療療診断
グ
3
4. タスク固有の問題と⼿手法の分離離
特徴抽出
機械学習
分野に依存しない 様々な⼿手法・理理論論を
特徴を捉えた抽象化されたデータ 適⽤用可能
⽂文書 (0, 1, 0, 2.5, -‐‑‒1, …) 分類/回帰:SVM, LogReg,
(1, 0.5, 0.1, -‐‑‒2, 3, …) PA, CW, ALOW, Naïve Bayes
(0, 1, 0, 1.5, 2, …) CNB, DT, RF, ANN, …
特徴ベクトル クラスタリング:K-‐‑‒means,
画像 Spectral Clustering, MMC,
LSI, LDA, GM, …
⾏行行動履履歴 グラフィカルモデル 構造分析:HMM, MRF, CRF, …
センサ情報 4
5. 現状で実装されているモジュール
l 現在実装されているのは、⽂文書データからの特徴ベクト
ルへの変換と、それに対する分類器
分野に依存しない 様々な⼿手法・理理論論を
特徴を捉えた抽象化されたデータ 適⽤用可能
⽂文書 (0, 1, 0, 2.5, -‐‑‒1, …) 分類/回帰:SVM, LogReg,
(1, 0.5, 0.1, -‐‑‒2, 3, …) PA, CW, ALOW, Naïve Bayes
(0, 1, 0, 1.5, 2, …) CNB, DT, RF, ANN, …
特徴ベクトル クラスタリング:K-‐‑‒means,
画像 Spectral Clustering, MMC,
LSI, LDA, GM, …
⾏行行動履履歴 グラフィカルモデル 構造分析:HMM, MRF, CRF, …
センサ情報 5
8. 現在Jubatusで実装されているのは多クラス分類
l ⼊入⼒力力xに対し、出⼒力力yを予測する
タスク ⼊入⼒力力x 出⼒力力y
メール分類 メール スパム or 普通 or 重要等
Twitterのユーザー分析 Tweet ユーザーの性別、職業、年年齢など
電気使⽤用料料需要の予測 パケット 各サーバーの予測使⽤用量量(連続値)
広告のコンバージョン予測 アクセス履履 クリック、コンバージョンするか
歴、広告
監視カメラ解析 監視カメラ 部屋の状態(明かりがついている?
画像 ⼈人がいるか?など)
8
9. ⾮非定形データからの特徴ベクトルへの変換
l Jubatusは⽂文書や画像などの⾮非定形データの解析も想定
し、標準でこうした特徴抽出機構を備える
l 変換後はベクトルとなる
l キーと値のペアになっていると思えばOK
⽇日本電信電話株式会社(東京都千代⽥田区、代表取締役社⻑⾧長:三浦 惺、以下「NTT」)
と株式会社プリファードインフラストラクチャー(東京都⽂文京区、代表取締役社⻑⾧長:⻄西川
徹、以下「PFI社」)は、ビッグデータ*1と呼ばれる⼤大規模データをリアルタイムに⾼高速分
析処理理する基盤技術「Jubatus*2」(第1版)を開発しました。
例例:⼊入⼒力力が⾔言語データの場合
単語/キーワード N-‐‑‒gram
⽇日本電信電話株式会社 : 1 Ju: 1
東京都 : 2 ub: 2
詳細は後述
千代⽥田区 : 1 ba:1
、代表取締役社⻑⾧長 : 2 、at:1
NTT : 1 tu:1
プリファードインフラストラクチャー : 1 9
us:1
10. 多クラス分類の中の、線形分類器が実装されている
l ⼊入⼒力力は特徴ベクトル
l 各特徴量量にクラスごとの重みがある
l 重みの総和(内積)が各クラスの得点とする
入力:「野球の後のカレーライスはおいしい」
重み
スコア最⼤大
1:スポーツ 2:グルメ 3:政治
特徴ベクトル
カレー -1 2 -1
カレー 1
仕分け -1 -1 2
ライス 1
ライス -1 1 1
野球 1
野球 2 -1 -1
10
11. 線形分類器の機械学習
l 機械学習で重みを⾃自動調整する
l 調整の基準や、計算⽅方法で様々な種類が存在する
l 単純ベイズ
l パーセプトロン
l 最⼤大エントロピー法
l サポートベクトルマシン
l Jubatusではオンライン学習アルゴリズムが実装されて
いる
11
12. オンライン学習は学習⼿手法の⽅方式の⼀一つ
l バッチ学習
l データを全体を⾒見見て重みを調整する
l 参考書を全部解いてから答え合わせ
学習器
l オンライン学習
l 1つずつデータを⾒見見て重みの更更新を繰り返す
l ⼀一問ずつ解いて答え合わせ
学習器
12
13. オンライン学習の重み更更新のイメージ
l 分類に間違えたら正しく分類できるように微調整
l 微調整の⽅方法の違いで学習⼿手法の良良し悪しが決まる
特徴ベクトル
重み
正しいクラス
間違えたクラス
正しいクラス
間違えたクラス
正解クラスの重みが小さい
13
正しく分類できるように調整
14. オンライン学習の特徴
l オンライン学習は更更新が早い
l 同じ学習時間に対して、経験的に精度度も⾼高い
l Jubatusでは最新の⼿手法を含む、様々な⼿手法が実装され
ている
l Perceptron (1958)
l Passive Aggressive (PA) (2003)
l Confidence Weighted Learning (CW) (2008)
l AROW (2009)
l Normal HERD (NHERD) (2010)
14
17. 線形分類器以外の分類⼿手法はないのか?
l ⾮非線形の分類器はたくさんあります
l 決定⽊木
l カーネル法
l ニューラルネットワーク
l 分類速度度、シンプルさ、学習速度度などの点で線形分類器
は⾮非常に優れる
17
18. 今後のJubatusの機械学習
l 「緩いモデル共有」モデルが他の学習問題でも有効に働
くことを検証
l そのための⼿手法の研究開発&実証実験
l 「勉強会モデル」のアナロジーで⾔言えばうまく⾏行行
く?
l 今後、順次実装して公開していきます
18
20. 特徴抽出とは
l ⽣生データから機械学習で扱いやすい形に変換する
l あるいは、特徴的な部分を抽出する
l 普通はベクトル(キー・バリューの集合)で表現される
ベクトル
文書
1 1 0 1
シーケンス
画像
特徴抽出
グラフ
音声
20
21. 特徴抽出の仕⽅方はデータの種類によって異異なる
l データに応じて利利⽤用できる特徴はいろいろ
データ種類 特徴量量の例例
⽂文書 ⽂文字、品詞、単語、係り受け、主語
述語・・・
画像 ⾊色、明るさ、形、模様、輪輪郭・・・
⾳音声 ⾳音程、波形、⻑⾧長さ、強さ・・・
⾏行行動履履歴 時刻、場所、⼿手段、同伴者・・・
21
22. 分析⽬目的によっても最適な特徴量量は異異なる
l 適切切な特徴が抽出できないと良良い結果は得られない
Jubatusは⼤大規模な Jubatus / データ / 分
名詞
散 / 機械学習 / ライブラ
データに対して、分
散機械学習するため リ / インストール / 分類
のライブラリだ。イ 性能 / レイテンシー
ンストールは難し テーマがなんとなくわかる・・・
かったが、とても⾼高
い分類性能と、低い
レイテンシーで満⾜足 ⼤大規模だ / 難しい / ⾼高
した。 形容詞・動詞
い / 低い / 満⾜足する
評価がなんとなくわかる・・・
22
23. Jubatusにおける特徴抽出のコンセプト
全ての⼈人に機械学習を!
l ちょっと設定を書けば、あとはよろしくやってくれる
l しかし、現実は難しいのでチューニングがなるべく簡単
にできるように・・・
23
24. 現在の特徴抽出の流流れ
文字列情報の変換
⽂文字列列フィ ⽂文字列列特
ルター 徴抽出
特徴ベク
データ
トル
数値フィル 数値特徴
ター 抽出
数値情報の変換
24
25. ⼊入⼒力力データの与え⽅方
( [ ("user/id", "ippy"),
("user/name", "Loren Ipsum"),
("message", "<H>Hello World</H>") ],
[ ("user/age", 29) ,
("user/income", 100000) ] )
l 与えられるデータはシンプルなキー・バリュー
l バリューは⽂文字列列と数値のみ
l 画像や⾳音声などの扱いは今後検討・・・
l 各プログラミング⾔言語ごとに与え⽅方は微妙に異異なる
25
26. ⼊入⼒力力データの与え⽅方 ⽂文字列列情報
⽂文字列列のキー ⽂文字列列の値
( [ ("user/id", "ippy"),
("user/name", "Loren Ipsum"),
("message", "<H>Hello World</H>") ],
[ ("user/age", 29) ,
("user/income", 100000) ] )
l タプルの1番⽬目の要素は⽂文字列列のデータ
l 効率率率の都合でタプルの配列列
26
27. ⼊入⼒力力データの与え⽅方 数値情報
( [ ("user/id", "ippy"),
("user/name", "Loren Ipsum"),
("message", "<H>Hello World</H>") ],
[ ("user/age", 29) ,
("user/income", 100000) ] )
⽂文字列列のキー 数値型の値
l タプルの2番⽬目の要素は数値型のデータ
l これもタプルの配列列
27
28. 特徴抽出に基本的な考え⽅方
( [ ("user/id", "ippy"), タグの除去
("user/name", "Loren Ipsum"),
("message", "<H>Hello World</H>") ],
[ ("user/age", 29) ,
("user/income", 100000) ] ) 単語の抽出
l ⽣生のデータはこのままでは扱えない
l ⽣生データから必要な情報を取り出してベクトルに変換す
る
28
29. 変換規則の書き⽅方の例例
{
"string_filter_types": {}, ⽂文字列列フィルター
"string_filter_rules": [],
"num_filter_types": {},
"num_filter_rules": [],
数値フィルター
"string_types": {},
"string_rules":
[ { "key": "*", "type": "space",
"sample_weight": "bin”,
"global_weight": "bin" } ⽂文字列列特徴
],
"num_types": {},
"num_rules": [ 数値特徴
{ "key": "*", "type": "num" }
]
} もう少し簡単に書けるようにしたい…
29
30. 特徴抽出規則の書き⽅方
1. マッチ規則
“string_rules”: [
{ "key": "*", 2. 特徴抽出の⼿手法
"type": "space",
"sample_weight": "bin”,
3. 重み付け
"global_weight": "bin" } ]
l 上記の設定は、
1. すべてのキーに対して、
2. ”space”という特徴抽出を施して、
3. 重みを1に設定する
l ということを書いている
l num_rulesも基本的に同じ
30
31. 引数の必要な特徴抽出器の書き⽅方
変換の名前
"string_types": {
"bigram": {
種類
"method": "ngram",
"char_num": "2" } },
"string_rules”: [ 引数(method依存)
{ "key": "message",
"type": "bigram", ruleに指定
"sample_weight": "tf",
"global_weight": "bin" }, …]
l XXX_typesで引数付きで抽出器を定義
l 定義の仕⽅方はマニュアル参照
l あとは、XXX_rulesで使えるようになる
31
32. 前処理理をしてから特徴抽出したい場合
タグ除去
(“message”, "<H>Hello World</H>”) RT除去
(“twit”, “Thanks RT: Here you are”)
(“nationaliy”, “JAPAN”)
⼤大⽂文字・⼩小⽂文字
l タグなどのデータ固有のゴミ情報を取り除きたい
l 前処理理をしたい場合はフィルターを使う
32
33. フィルターを掛けてから処理理する⽅方法
“string_filter_types”: { 正規表現フィルター
“detag”: {
“method”: “regexp”,
パターン
“pattern”: “<[^>]*>”,
“replace”: “” }, …
}, … 置き換え⽂文字列列
“string_filter_rules”: [
{ “key”: “message”,
“type”: “detag”, 変換後の格納先
“suffix”: “-detagged”}, … ]
l xxx_types で定義を書く
l xxx_rules で適⽤用規則を書く
33
34. プラグインの使い⽅方
“string_types”: {
“mecab”: {
“method”: “dynamic”,
“function”: “create”,
“path”:
“/usr/local/lib/libmecab_splitter.so”
}, …
}
l 先と同様XXX_typesで定義できる
l methodにdynamic、pathに.soヘのフルパス、function
にプラグイン固有の関数名を指定する
34
35. プラグインの作り⽅方
#include <jubatus/plugin.hpp>
class my_splitter : public jubatus::word_splitter {
public:
void split(const string& string,
vector<pair<size_t, size_t> >&
ret_boundaries) {
// do somehting
}
};
extern "C" {
my_splitter* create(const map<string, string>&
params) {
return new my_splitter();
}
}
35
36. プラグインの作り⽅方
#include <jubatus/plugin.hpp> ひな形は全部この
ヘッダ
class my_splitter : public jubatus::word_splitter {
public:
void split(const string& string,
vector<pair<size_t, size_t> >&
ret_boundaries) {
// do somehting
}
};
extern "C" {
my_splitter* create(const map<string, string>&
params) {
return new my_splitter();
}
}
36
37. プラグインの作り⽅方
#include <jubatus/plugin.hpp>
class my_splitter : public jubatus::word_splitter {
public:
void split(const string& string,
vector<pair<size_t, size_t> >&
ret_boundaries) {
// do somehting
} ひな形クラスを継承して、
}; やりたい処理理を記述
extern "C" {
my_splitter* create(const map<string, string>&
params) {
return new my_splitter();
}
}
37
38. プラグインの作り⽅方
#include <jubatus/plugin.hpp>
class my_splitter : public jubatus::word_splitter {
public:
void split(const string& string,
vector<pair<size_t, size_t> >&
ret_boundaries) {
// do somehting
} インスタンスを⽣生成
};
する関数を記述
extern "C" {
my_splitter* create(const map<string, string>&
params) {
return new my_splitter();
}
}
38
39. 特徴抽出の今後の予定
l マルチメディアデータへの対応
l 画像
l ⾳音声
l 映像
l etc.
l プラグインの管理理
l より複雑なフローの検討
39
40. まとめ
l 特徴抽出と機械学習の2つの部分に別れる
l 機械学習
l 分類問題、特にオンライン線形分類器を実装
l さらに分散学習している
l 特徴抽出
l 誰にでも簡単に機械学習を!
l 現在はテキストデータと数値データのみに対応
l 皆さん使ってみてください!
40