Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Jubatusの特徴変換と線形分類器の仕組み

10,688 views

Published on

Jubatusの特徴変換と線形分類器の仕組み

  1. 1. Jubatusの特徴変換と 線形分類器の仕組み 2011/11/07株式会社Preferred Infrastructure 海野  裕也 (@unnonouno)
  2. 2. 本発表のねらいl  現状のJubatusで何が出来るのかを機能の⾯面から解説l  線形分類器の仕組みと使い⽅方l  特徴抽出器の仕組みと使い⽅方 2
  3. 3. 機械学習とは?l  データから有⽤用な規則、ルール、知識識表現、判断基準な どを抽出l  データがあるところ、どこでも使えるl  様々な分野の問題に利利⽤用可能 適用分野 レコメンデー ションクラス 分類、識識別 市場予測 評判分析 タリング 情報抽出 ⽂文字認識識 ロボット 画像解析 検索索ランキン 遺伝⼦子分析 ⾦金金融 医療療診断 グ 3
  4. 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. 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
  6. 6. Jubatusにおける特徴変換から分類器の学習までの概要2つの処理理に分離離してモジュール化しているl  ⾮非構造データからの特徴ベクトルへの変換l  特徴ベクトルからの学習⼊入⼒力力 特徴ベ 学習モ 特徴抽出 分類学習データ クトル デル 6
  7. 7. Jubatusの線形分類器7
  8. 8. 現在Jubatusで実装されているのは多クラス分類l  ⼊入⼒力力xに対し、出⼒力力yを予測するタスク ⼊入⼒力力x 出⼒力力yメール分類 メール スパム or 普通 or 重要等Twitterのユーザー分析 Tweet ユーザーの性別、職業、年年齢など電気使⽤用料料需要の予測 パケット 各サーバーの予測使⽤用量量(連続値)広告のコンバージョン予測 アクセス履履 クリック、コンバージョンするか 歴、広告監視カメラ解析 監視カメラ 部屋の状態(明かりがついている? 画像 ⼈人がいるか?など) 8
  9. 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. 10. 多クラス分類の中の、線形分類器が実装されているl  ⼊入⼒力力は特徴ベクトルl  各特徴量量にクラスごとの重みがあるl  重みの総和(内積)が各クラスの得点とする入力:「野球の後のカレーライスはおいしい」 重み スコア最⼤大 1:スポーツ 2:グルメ 3:政治 特徴ベクトル カレー -1 2 -1 カレー 1 仕分け -1 -1 2 ライス 1 ライス -1 1 1 野球 1 野球 2 -1 -1 10
  11. 11. 線形分類器の機械学習l  機械学習で重みを⾃自動調整するl  調整の基準や、計算⽅方法で様々な種類が存在する l  単純ベイズ l  パーセプトロン l  最⼤大エントロピー法 l  サポートベクトルマシンl  Jubatusではオンライン学習アルゴリズムが実装されて いる 11
  12. 12. オンライン学習は学習⼿手法の⽅方式の⼀一つl  バッチ学習 l  データを全体を⾒見見て重みを調整する l  参考書を全部解いてから答え合わせ 学習器l  オンライン学習 l  1つずつデータを⾒見見て重みの更更新を繰り返す l  ⼀一問ずつ解いて答え合わせ 学習器 12
  13. 13. オンライン学習の重み更更新のイメージl  分類に間違えたら正しく分類できるように微調整l  微調整の⽅方法の違いで学習⼿手法の良良し悪しが決まる 特徴ベクトル 重み 正しいクラス 間違えたクラス 正しいクラス 間違えたクラス 正解クラスの重みが小さい 13 正しく分類できるように調整
  14. 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
  15. 15. Jubatusの分散学習:緩いモデル共有l  たまに全学習器の重みを混ぜ合わせる l  全サーバーで重みの平均をとる (Iterative Parameter Mixture)l  重み情報だけを交換するので軽いl  ⾮非同期・オンラインでMapReduceしているイメージに 近い 15
  16. 16. Jubatusにおける分散機械学習のイメージ 学習器l  みんな個別に⾃自学⾃自習l  たまに勉強会で情報交換l  ⼀一⼈人で勉強するより効率率率がいいはず! 16
  17. 17. 線形分類器以外の分類⼿手法はないのか?l  ⾮非線形の分類器はたくさんあります l  決定⽊木 l  カーネル法 l  ニューラルネットワークl  分類速度度、シンプルさ、学習速度度などの点で線形分類器 は⾮非常に優れる 17
  18. 18. 今後のJubatusの機械学習l  「緩いモデル共有」モデルが他の学習問題でも有効に働 くことを検証 l  そのための⼿手法の研究開発&実証実験 l  「勉強会モデル」のアナロジーで⾔言えばうまく⾏行行 く?l  今後、順次実装して公開していきます 18
  19. 19. Jubatusの特徴抽出処理理19
  20. 20. 特徴抽出とはl  ⽣生データから機械学習で扱いやすい形に変換するl  あるいは、特徴的な部分を抽出するl  普通はベクトル(キー・バリューの集合)で表現される ベクトル 文書 1 1 0 1 シーケンス 画像 特徴抽出 グラフ 音声 20
  21. 21. 特徴抽出の仕⽅方はデータの種類によって異異なるl  データに応じて利利⽤用できる特徴はいろいろ データ種類 特徴量量の例例 ⽂文書 ⽂文字、品詞、単語、係り受け、主語 述語・・・ 画像 ⾊色、明るさ、形、模様、輪輪郭・・・ ⾳音声 ⾳音程、波形、⻑⾧長さ、強さ・・・ ⾏行行動履履歴 時刻、場所、⼿手段、同伴者・・・ 21
  22. 22. 分析⽬目的によっても最適な特徴量量は異異なるl  適切切な特徴が抽出できないと良良い結果は得られないJubatusは⼤大規模な Jubatus / データ / 分 名詞 散  / 機械学習  / ライブラデータに対して、分散機械学習するため リ  / インストール  / 分類のライブラリだ。イ 性能  / レイテンシー ンストールは難し テーマがなんとなくわかる・・・ かったが、とても⾼高い分類性能と、低いレイテンシーで満⾜足 ⼤大規模だ / 難しい / ⾼高 した。 形容詞・動詞 い / 低い  / 満⾜足する 評価がなんとなくわかる・・・ 22
  23. 23. Jubatusにおける特徴抽出のコンセプト 全ての⼈人に機械学習を!l  ちょっと設定を書けば、あとはよろしくやってくれるl  しかし、現実は難しいのでチューニングがなるべく簡単 にできるように・・・ 23
  24. 24. 現在の特徴抽出の流流れ 文字列情報の変換 ⽂文字列列フィ ⽂文字列列特 ルター 徴抽出 特徴ベクデータ トル 数値フィル 数値特徴 ター 抽出 数値情報の変換 24
  25. 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. 26. ⼊入⼒力力データの与え⽅方  ⽂文字列列情報 ⽂文字列列のキー ⽂文字列列の値( [ ("user/id", "ippy"), ("user/name", "Loren Ipsum"), ("message", "<H>Hello World</H>") ], [ ("user/age", 29) , ("user/income", 100000) ] )l  タプルの1番⽬目の要素は⽂文字列列のデータl  効率率率の都合でタプルの配列列 26
  27. 27. ⼊入⼒力力データの与え⽅方  数値情報( [ ("user/id", "ippy"), ("user/name", "Loren Ipsum"), ("message", "<H>Hello World</H>") ], [ ("user/age", 29) , ("user/income", 100000) ] ) ⽂文字列列のキー 数値型の値l  タプルの2番⽬目の要素は数値型のデータl  これもタプルの配列列 27
  28. 28. 特徴抽出に基本的な考え⽅方( [ ("user/id", "ippy"), タグの除去 ("user/name", "Loren Ipsum"), ("message", "<H>Hello World</H>") ], [ ("user/age", 29) , ("user/income", 100000) ] ) 単語の抽出l  ⽣生のデータはこのままでは扱えないl  ⽣生データから必要な情報を取り出してベクトルに変換す る 28
  29. 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. 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. 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. 32. 前処理理をしてから特徴抽出したい場合 タグ除去(“message”, "<H>Hello World</H>”) RT除去(“twit”, “Thanks RT: Here you are”)(“nationaliy”, “JAPAN”) ⼤大⽂文字・⼩小⽂文字l  タグなどのデータ固有のゴミ情報を取り除きたいl  前処理理をしたい場合はフィルターを使う 32
  33. 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. 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. 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. 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. 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. 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. 39. 特徴抽出の今後の予定l  マルチメディアデータへの対応 l  画像 l  ⾳音声 l  映像 l  etc.l  プラグインの管理理l  より複雑なフローの検討 39
  40. 40. まとめl  特徴抽出と機械学習の2つの部分に別れるl  機械学習 l  分類問題、特にオンライン線形分類器を実装 l  さらに分散学習しているl  特徴抽出 l  誰にでも簡単に機械学習を! l  現在はテキストデータと数値データのみに対応l  皆さん使ってみてください! 40
  41. 41. ご清聴ありがとうございました41

×