Jubatusの特徴変換と 線形分類器の仕組み     2011/11/07株式会社Preferred Infrastructure 海野  裕也 (@unnonouno)
本発表のねらいl    現状のJubatusで何が出来るのかを機能の⾯面から解説l    線形分類器の仕組みと使い⽅方l    特徴抽出器の仕組みと使い⽅方                    2
機械学習とは?l    データから有⽤用な規則、ルール、知識識表現、判断基準な      どを抽出l    データがあるところ、どこでも使えるl    様々な分野の問題に利利⽤用可能                       適用分野	...
タスク固有の問題と⼿手法の分離離      特徴抽出	                                          機械学習	                   分野に依存しない                     ...
現状で実装されているモジュール l    現在実装されているのは、⽂文書データからの特徴ベクト       ルへの変換と、それに対する分類器                     分野に依存しない                      ...
Jubatusにおける特徴変換から分類器の学習までの概要2つの処理理に分離離してモジュール化しているl  ⾮非構造データからの特徴ベクトルへの変換l  特徴ベクトルからの学習⼊入⼒力力          特徴ベ           学習モ ...
Jubatusの線形分類器7
現在Jubatusで実装されているのは多クラス分類l    ⼊入⼒力力xに対し、出⼒力力yを予測するタスク               ⼊入⼒力力x         出⼒力力yメール分類             メール            ...
⾮非定形データからの特徴ベクトルへの変換l    Jubatusは⽂文書や画像などの⾮非定形データの解析も想定      し、標準でこうした特徴抽出機構を備えるl    変換後はベクトルとなる       l  キーと値のペアになっている...
多クラス分類の中の、線形分類器が実装されているl    ⼊入⼒力力は特徴ベクトルl    各特徴量量にクラスごとの重みがあるl    重みの総和(内積)が各クラスの得点とする入力:「野球の後のカレーライスはおいしい」	          ...
線形分類器の機械学習l    機械学習で重みを⾃自動調整するl    調整の基準や、計算⽅方法で様々な種類が存在する      l    単純ベイズ      l    パーセプトロン      l    最⼤大エントロピー法    ...
オンライン学習は学習⼿手法の⽅方式の⼀一つl    バッチ学習      l  データを全体を⾒見見て重みを調整する      l  参考書を全部解いてから答え合わせ                            学習器l   ...
オンライン学習の重み更更新のイメージl    分類に間違えたら正しく分類できるように微調整l    微調整の⽅方法の違いで学習⼿手法の良良し悪しが決まる       特徴ベクトル	  重み	 正しいクラス	   間違えたクラス	      ...
オンライン学習の特徴l    オンライン学習は更更新が早いl    同じ学習時間に対して、経験的に精度度も⾼高いl    Jubatusでは最新の⼿手法を含む、様々な⼿手法が実装され      ている      l    Percept...
Jubatusの分散学習:緩いモデル共有l  たまに全学習器の重みを混ぜ合わせる    l  全サーバーで重みの平均をとる (Iterative Parameter        Mixture)l  重み情報だけを交換するので軽いl ...
Jubatusにおける分散機械学習のイメージ                              学習器l    みんな個別に⾃自学⾃自習l    たまに勉強会で情報交換l    ⼀一⼈人で勉強するより効率率率がいいはず!     ...
線形分類器以外の分類⼿手法はないのか?l    ⾮非線形の分類器はたくさんあります      l    決定⽊木      l    カーネル法      l    ニューラルネットワークl    分類速度度、シンプルさ、学習速度度な...
今後のJubatusの機械学習l    「緩いモデル共有」モデルが他の学習問題でも有効に働      くことを検証      l  そのための⼿手法の研究開発&実証実験      l  「勉強会モデル」のアナロジーで⾔言えばうまく⾏行行 ...
Jubatusの特徴抽出処理理19
特徴抽出とはl    ⽣生データから機械学習で扱いやすい形に変換するl    あるいは、特徴的な部分を抽出するl    普通はベクトル(キー・バリューの集合)で表現される                           ベクトル	  ...
特徴抽出の仕⽅方はデータの種類によって異異なるl    データに応じて利利⽤用できる特徴はいろいろ      データ種類     特徴量量の例例      ⽂文書       ⽂文字、品詞、単語、係り受け、主語                ...
分析⽬目的によっても最適な特徴量量は異異なるl    適切切な特徴が抽出できないと良良い結果は得られないJubatusは⼤大規模な         Jubatus / データ / 分                名詞	 散  / 機械学習 ...
Jubatusにおける特徴抽出のコンセプト           全ての⼈人に機械学習を!l    ちょっと設定を書けば、あとはよろしくやってくれるl    しかし、現実は難しいのでチューニングがなるべく簡単      にできるように・・・ ...
現在の特徴抽出の流流れ         文字列情報の変換	      ⽂文字列列フィ          ⽂文字列列特        ルター             徴抽出                                特徴ベクデ...
⼊入⼒力力データの与え⽅方( [ ("user/id", "ippy"),    ("user/name", "Loren Ipsum"),    ("message", "<H>Hello World</H>") ],  [ ("user/a...
⼊入⼒力力データの与え⽅方  ⽂文字列列情報       ⽂文字列列のキー   ⽂文字列列の値( [ ("user/id", "ippy"),    ("user/name", "Loren Ipsum"),    ("message", "<...
⼊入⼒力力データの与え⽅方  数値情報( [ ("user/id", "ippy"),    ("user/name", "Loren Ipsum"),    ("message", "<H>Hello World</H>") ],  [ ("...
特徴抽出に基本的な考え⽅方( [ ("user/id", "ippy"),           タグの除去    ("user/name", "Loren Ipsum"),    ("message", "<H>Hello World</H>"...
変換規則の書き⽅方の例例{    "string_filter_types": {},      ⽂文字列列フィルター    "string_filter_rules": [],    "num_filter_types": {},    "n...
特徴抽出規則の書き⽅方                                    1. マッチ規則            “string_rules”: [              { "key": "*",         2....
引数の必要な特徴抽出器の書き⽅方                               変換の名前        "string_types": {          "bigram": {                        ...
前処理理をしてから特徴抽出したい場合                                 タグ除去(“message”, "<H>Hello World</H>”)    RT除去(“twit”, “Thanks RT: Here ...
フィルターを掛けてから処理理する⽅方法  “string_filter_types”: { 正規表現フィルター    “detag”: {       “method”: “regexp”,                           ...
プラグインの使い⽅方“string_types”: {  “mecab”: {    “method”: “dynamic”,    “function”: “create”,    “path”:       “/usr/local/lib/...
プラグインの作り⽅方#include <jubatus/plugin.hpp>class my_splitter : public jubatus::word_splitter { public:     void split(const st...
プラグインの作り⽅方#include <jubatus/plugin.hpp>     ひな形は全部この                                     ヘッダclass my_splitter : public jub...
プラグインの作り⽅方#include <jubatus/plugin.hpp>class my_splitter : public jubatus::word_splitter { public:     void split(const st...
プラグインの作り⽅方#include <jubatus/plugin.hpp>class my_splitter : public jubatus::word_splitter { public:     void split(const st...
特徴抽出の今後の予定l    マルチメディアデータへの対応      l    画像      l    ⾳音声      l    映像      l    etc.l    プラグインの管理理l    より複雑なフローの検討 ...
まとめl    特徴抽出と機械学習の2つの部分に別れるl    機械学習      l    分類問題、特にオンライン線形分類器を実装      l    さらに分散学習しているl    特徴抽出      l    誰にでも簡単に...
ご清聴ありがとうございました41
Upcoming SlideShare
Loading in...5
×

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

8,557

Published on

Transcript of "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
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×