SlideShare une entreprise Scribd logo
1  sur  15
Télécharger pour lire hors ligne
Hive/Pigを使ったKDD'12 track2
    の広告クリック率予測
    油井 誠 m.yui@aist.go.jp
 産業技術総合研究所 情報技術研究部門
                Twitter ID: @myui
     スライド
     http://www.slideshare.net/myui/dsirnlp-myuilt
                                                     1
     http://goo.gl/Ulf3A
KDDcup 2012 track2
• 検索ログを基に、検索エンジンの広告のクリック
  率(Click-Through Rate)を推定するタスク
 – 中国の3大検索エンジンの一つsoso.comの実データ
   • 検索語などはHash値などを利用してすべて数値化されてい
     る
 – Trainingデータ(約10GB+2.2GB, 15億レコード)
 – Testデータ(約1.3GB, 2億レコード)
   • 学習データの1.33割が評価用データセット
 – CTRがsubmission format
   • クラス分類というより回帰(もちろんクラス分類でも解ける)


                                       2
学習データのテーブル構成
          User table      UserID   Gender     Age
                                                                           Query table
                                                                              QueryID      Tokens



                                                                                                                Click = Positive
                        UserID     AdID     QueryID       Depth     Position         Impression     Click       Impression – Click = Negative
                                                                                                                CTR = Click / Impression
     Training table                     AdID properties

                           DisplayURL     AdvertiserID    KeywordID        TitleID     DescriptionID




                      KeywordID    Tokens             TitleID     Tokens                 DescriptionID      Tokens

                      Keyword table                       Title table                      Description table
            評価用のテーブルにはimpression、click以外の素性(feature)
            基本的に、全部、質的変数 → 二値変数の素性に分解

Label        A              B                                      Label A:1 A:2 A:3 B:7 B:8 B:9
1            1              9                                      1                 1         0            0        0         1         0
-1           2              7                                      -1                0         1            0        0         0         1
1            3              8                                      1                 0         0            1        1         0         0
                                                                                                                                         3
ロジスティック回帰での発生予測
• 発生確率を予測する手法
• 各変数の影響力の強さを計算(Train)
 – 入力: Label, Array<feature>
 – 出力: 素性ごとの重みのMap<feature, float>
 – # of features = 54,686,452
   • ただし、token tableは利用していない (Token ID = <token,..,token>)
• 影響力を基に生起確率を計算(Predict)
 – P(X) = Pr(Y=1|x1,x2,..,xn)
 – f: X → Yとなる関数fを導出したい                     1
                                                 𝑛

   s.t. empirical lossを最小化         𝑎𝑟𝑔𝑚𝑖𝑛             𝑙𝑜𝑠𝑠(𝑓(𝑥 𝑖 ; 𝑤), 𝑦 𝑖 )
                                            𝑛
                                                𝑖=0
   • 勾配降下法を使う
                               各素性の重み                                    4
Gradient Descent(勾配降下法)


                       学習率


                                     𝑛
                                1
            𝑤 𝑡+1 = 𝑤 𝑡 − 𝛾 𝑡             𝛻𝑙𝑜𝑠𝑠(𝑓(𝑥 𝑖 ; 𝑤 𝑡 ), 𝑦)
                                𝑛
                                    𝑖=0


                                    経験損失の勾配を基に重みを更新
新しい重み         古い重み



  Jimmy LinのLarge-Scale Machine Learning at Twitterより
  https://speakerdeck.com/u/lintool/p/large-scale-machine-learning-at-twitter 5
勾配の並列計算
                                                   𝑛
                                              1
                          𝑤 𝑡+1 = 𝑤 𝑡 − 𝛾 𝑡             𝛻𝑙𝑜𝑠𝑠(𝑓(𝑥 𝑖 ; 𝑤 𝑡 ), 𝑦)
                                              𝑛
                                                  𝑖=0


勾配をmapperで並列に計算                                          mappers
重みの更新をreducerで行う
                                                   single reducer




• 実際には重みの更新の時に更新されたfeature(xi)が必要
   • wはMap<feature, weight>でMap.size()=54,686,452
• Iteration数が多く必要で、入出力がDFSを介すMapReduce
  に向かない
• Reducerでの計算がボトルネックになる
                                                                           6
確率的勾配降下法
• Gradient Descent
                                𝑛
                           1
       𝑤 𝑡+1 = 𝑤 𝑡 − 𝛾 𝑡             𝛻𝑙𝑜𝑠𝑠(𝑓(𝑥 𝑖 ; 𝑤 𝑡 ), 𝑦)
                           𝑛
                               𝑖=0
    モデルの更新に全てのトレーニングインスタンスが必要(バッチ学習)

• Stochastic Gradient Descent (SGD)
       𝑤 𝑡+1 = 𝑤 𝑡 − 𝛾 𝑡 𝛻𝑙𝑜𝑠𝑠(𝑓(𝑥; 𝑤 𝑡 ), 𝑦)
   それぞれのトレーニングインスタンスで重みを更新(オンライン学習)

  – Iterative Parameter Mixで処理すれば、実際意外とうまく
    動くし、そんなにイテレーション数が必要でない
                             𝑡+1
     • データ分割して、各mapperで並列に 𝑤     = 𝑤 𝑡 − 𝛾 𝑡 𝛻𝑙𝑜𝑠𝑠(𝑓(𝑥; 𝑤 𝑡 ), 𝑦) を計算
     • モデルパラメタはイテレーション/epochごとに配る

                                                                        7
よくある機械学習のデータフロー
                                               Testデータ

                                             array<feature>

Trainingデータ               Modelデータ

    Label,                     Map               predict
array<feature>           <feature, weight>
                 train



                                               Label/Prob




                                                              8
よくある並列trainのデータフロー
                                 map                 Map
                                               <feature,weight>



 Trainingデータ                     map                                    Modelデータ
     Label,                                                                  Map
                                                           reduce
 array<feature>                  map                                   <feature, weight>
                                                      重みの平均をとる
                                 map                                イテレーションする場合は
                  𝑤 𝑡+1 = 𝑤 𝑡 − 𝛾 𝑡 𝛻𝑙𝑜𝑠𝑠(𝑓(𝑥; 𝑤 𝑡 ), 𝑦)            古いmodelを渡す
                       SGDで重みを計算

機械学習はaggregationの問題
    直感的にはHive/PigのUDAF(user defined aggregation
    function)で実装すればよい                                                                      9
    ほんとはM/Rよりもparallel aggregationに特化したDremelに向いてる
よくある並列trainのデータフロー
                                       map                 Map
                                                     <feature,weight>



      Trainingデータ                      map                                    Modelデータ
          Label,                                                                   Map
                                                                 reduce
      array<feature>                   map                                   <feature, weight>
                                                            重みの平均をとる
                                       map                                イテレーションする場合は
                        𝑤 𝑡+1 = 𝑤 𝑡 − 𝛾 𝑡 𝛻𝑙𝑜𝑠𝑠(𝑓(𝑥; 𝑤 𝑡 ), 𝑦)            古いmodelを渡す
                             SGDで重みを計算

最初は素直にmapを返すUDAFで作った
create table model as
select trainLogisticUDAF(features,label [, params]) as weight from training
        mapはsplitサイズの調整でメモリ内に収まるけど、より規模がでかくなると
                                                                                             10
        reduceでメモリ不足になるのでデータ量に対してスケールしない
Think relational
                                                  Testデータ

                                                array<feature>

  Trainingデータ                Modelデータ

      Label,                      Map               predict
  array<feature>            <feature, weight>
                    train


Scaler値として返すのはダメ
                                                  Label/Prob
リレーションでfeature, weightを返そう
でも、UDAFは使えない
→そこでUDTF (User Defined Table Function)
                                                                 11
UDTF (parameter-mix)
                     HadoopのInputSplitSizeの設定に応じたmapperが
select               立ち上がる(map-only)
  feature,
  CAST(avg(weight) as FLOAT) as weight
from
 ( select
     TrainLogisticSgdUDTF(features,label,..) as (feature,weight)
     from train
  )t
group by feature;

                          どうやってiterative parameter mixさせよう???
                          古いmodelを渡さないといけない
                          毎行渡すのはあれだし…
                                                                   12
UDTF(iterative parameter mix)
create table model1sgditor2 as
select
 feature,
 CAST(avg(weight) as FLOAT) as weight
from (
 select
   TrainLogisticIterUDTF(t.features, w.wlist, t.label, ..)
        as (feature, weight)
 from
   training t join feature_weight w on (t.rowid = w.rowid)
)t
group by feature;
                        ここで必要なのは、各行の素性ごとに古いModel
                           Map<feature, weight>, label相当を渡せばよいので、
                           Array<feature>に対応するArray<weight>をテーブルを作って
                           inner joinで渡す
                                                                 13
Pig版のフローの一例
training_raw = load '$TARGET' as (clicks: int, impression: int, displayid: int, adid: int, advertiserid: int, depth: int, position: int, queryid: int, keywordid: int,
titleid: int, descriptionid: int, userid: int, gender: int, age: int);

training_bin = foreach training_raw generate flatten(predictor.ctr.BinSplit(clicks, impression)), displayid, adid, advertiserid, depth, position, queryid,
keywordid, titleid, descriptionid, userid, gender, age;
training_smp = sample training_bin 0.1;

training_rnd = foreach training_smp generate (int)(RANDOM() * 100) as dataid, TOTUPLE(*) as training;
training_dat = group training_rnd by dataid;

model = foreach training_dat generate predictor.ctr.TrainLinear(training_rnd.training.training_smp);

store model into '$MODEL';

model = load '$MODEL' as (mdl: map[]);
                                                                                                                 弱学習
model_lmt = limit model 10;

testing_raw = load '$TARGET' as (dataid: int, displayid: int, adid: int, advertiserid: int, depth: int, position: int, queryid: int, keywordid: int, titleid: int,
descriptionid: int, userid: int, gender: int, age: int);

testing_with_model = cross model_lmt, testing_raw;

result = foreach testing_with_model generate dataid, predictor.ctr.Pred(mdl, displayid, adid, advertiserid, depth, position, queryid, keywordid, titleid,
descriptionid, userid, gender, age) as ctr;

result_grp = group result by dataid;
result_ens = foreach result_grp generate group as dataid, predictor.ctr.Ensemble(result.ctr);
result_ens_ord = order result_ens by dataid;
result_fin = foreach result_ens_ord generate $1;
store result_fin into '$RESULT';
                                                                                                             アンサンブル学習
                                                                                                                                                                         14
まとめ
• データ量に対してちゃんとスケールするものができた
 – インターン生にpig版を作ってもらった
    • こちらはUTDFではやっていなくて、モデルファイルを分割して作っ
      て、アンサンブル学習させる戦略
 – オンラインのモデル更新とかをやるには、updateのない
   hiveだとinsertにしないといけないので一工夫いる
 – Passive-aggressive版も作る予定
• 現状、AUC=0.75程度(優勝者の台湾国立大は0.8)
 – a9aデータセットだとlibsvm, svm-light, liblinear, tinysvmな
   どと同程度の精度(0.85ぐらい)
• 余裕があったらHiveにパッチとして送る
 – でも、ドキュメントとかテストとかxxxxx

                実データを持つ共同研究先募集
                (一件、広告配信企業とやってる)                       15

Contenu connexe

Tendances

TokyoNLP#5 パーセプトロンで楽しい仲間がぽぽぽぽ~ん
TokyoNLP#5 パーセプトロンで楽しい仲間がぽぽぽぽ~んTokyoNLP#5 パーセプトロンで楽しい仲間がぽぽぽぽ~ん
TokyoNLP#5 パーセプトロンで楽しい仲間がぽぽぽぽ~んsleepy_yoshi
 
R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)
R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)
R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)Koichi Hamada
 
ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京
ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京
ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京Koichi Hamada
 
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR #11
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR  #11「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR  #11
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR #11Koichi Hamada
 
第14章集団学習
第14章集団学習第14章集団学習
第14章集団学習Kei Furihata
 
R Language Definition 2.2 to 2.3
R Language Definition 2.2 to 2.3R Language Definition 2.2 to 2.3
R Language Definition 2.2 to 2.3Kohta Ishikawa
 
SappoRoR#7 Rを用いた画像処理入門 -胸部X線の経時的差分画像-
SappoRoR#7 Rを用いた画像処理入門 -胸部X線の経時的差分画像-SappoRoR#7 Rを用いた画像処理入門 -胸部X線の経時的差分画像-
SappoRoR#7 Rを用いた画像処理入門 -胸部X線の経時的差分画像-昌彦 飛騨
 
組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画まで組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画までShunji Umetani
 
「深層学習」第6章 畳込みニューラルネット
「深層学習」第6章 畳込みニューラルネット「深層学習」第6章 畳込みニューラルネット
「深層学習」第6章 畳込みニューラルネットKen'ichi Matsui
 
実践多クラス分類 Kaggle Ottoから学んだこと
実践多クラス分類 Kaggle Ottoから学んだこと実践多クラス分類 Kaggle Ottoから学んだこと
実践多クラス分類 Kaggle Ottoから学んだことnishio
 
PILCO - 第一回高橋研究室モデルベース強化学習勉強会
PILCO - 第一回高橋研究室モデルベース強化学習勉強会PILCO - 第一回高橋研究室モデルベース強化学習勉強会
PILCO - 第一回高橋研究室モデルベース強化学習勉強会Shunichi Sekiguchi
 
PoisoningAttackSVM (ICMLreading2012)
PoisoningAttackSVM (ICMLreading2012)PoisoningAttackSVM (ICMLreading2012)
PoisoningAttackSVM (ICMLreading2012)Hidekazu Oiwa
 
Chainer の Trainer 解説と NStepLSTM について
Chainer の Trainer 解説と NStepLSTM についてChainer の Trainer 解説と NStepLSTM について
Chainer の Trainer 解説と NStepLSTM についてRetrieva inc.
 
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages. Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages. Satoshi Kato
 

Tendances (15)

TokyoNLP#5 パーセプトロンで楽しい仲間がぽぽぽぽ~ん
TokyoNLP#5 パーセプトロンで楽しい仲間がぽぽぽぽ~んTokyoNLP#5 パーセプトロンで楽しい仲間がぽぽぽぽ~ん
TokyoNLP#5 パーセプトロンで楽しい仲間がぽぽぽぽ~ん
 
R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)
R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)
R言語による アソシエーション分析-組合せ・事象の規則を解明する-(第5回R勉強会@東京)
 
ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京
ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京
ベイジアンネットとレコメンデーション -第5回データマイニング+WEB勉強会@東京
 
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR #11
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR  #11「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR  #11
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR #11
 
第14章集団学習
第14章集団学習第14章集団学習
第14章集団学習
 
R Language Definition 2.2 to 2.3
R Language Definition 2.2 to 2.3R Language Definition 2.2 to 2.3
R Language Definition 2.2 to 2.3
 
SappoRoR#7 Rを用いた画像処理入門 -胸部X線の経時的差分画像-
SappoRoR#7 Rを用いた画像処理入門 -胸部X線の経時的差分画像-SappoRoR#7 Rを用いた画像処理入門 -胸部X線の経時的差分画像-
SappoRoR#7 Rを用いた画像処理入門 -胸部X線の経時的差分画像-
 
組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画まで組合せ最適化入門:線形計画から整数計画まで
組合せ最適化入門:線形計画から整数計画まで
 
「深層学習」第6章 畳込みニューラルネット
「深層学習」第6章 畳込みニューラルネット「深層学習」第6章 畳込みニューラルネット
「深層学習」第6章 畳込みニューラルネット
 
実践多クラス分類 Kaggle Ottoから学んだこと
実践多クラス分類 Kaggle Ottoから学んだこと実践多クラス分類 Kaggle Ottoから学んだこと
実践多クラス分類 Kaggle Ottoから学んだこと
 
PILCO - 第一回高橋研究室モデルベース強化学習勉強会
PILCO - 第一回高橋研究室モデルベース強化学習勉強会PILCO - 第一回高橋研究室モデルベース強化学習勉強会
PILCO - 第一回高橋研究室モデルベース強化学習勉強会
 
FOBOS
FOBOSFOBOS
FOBOS
 
PoisoningAttackSVM (ICMLreading2012)
PoisoningAttackSVM (ICMLreading2012)PoisoningAttackSVM (ICMLreading2012)
PoisoningAttackSVM (ICMLreading2012)
 
Chainer の Trainer 解説と NStepLSTM について
Chainer の Trainer 解説と NStepLSTM についてChainer の Trainer 解説と NStepLSTM について
Chainer の Trainer 解説と NStepLSTM について
 
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages. Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
Dimensionality reduction with t-SNE(Rtsne) and UMAP(uwot) using R packages.
 

Similaire à Hive/Pigを使ったKDD'12 track2の広告クリック率予測

NN, CNN, and Image Analysis
NN, CNN, and Image AnalysisNN, CNN, and Image Analysis
NN, CNN, and Image AnalysisYuki Shimada
 
画像認識で物を見分ける
画像認識で物を見分ける画像認識で物を見分ける
画像認識で物を見分けるKazuaki Tanida
 
OpenCVの拡張ユーティリティ関数群
OpenCVの拡張ユーティリティ関数群OpenCVの拡張ユーティリティ関数群
OpenCVの拡張ユーティリティ関数群Norishige Fukushima
 
文献紹介:Rethinking Data Augmentation for Image Super-resolution: A Comprehensive...
文献紹介:Rethinking Data Augmentation for Image Super-resolution: A Comprehensive...文献紹介:Rethinking Data Augmentation for Image Super-resolution: A Comprehensive...
文献紹介:Rethinking Data Augmentation for Image Super-resolution: A Comprehensive...Toru Tamaki
 
第1回R勉強会@東京
第1回R勉強会@東京第1回R勉強会@東京
第1回R勉強会@東京Yohei Sato
 
ACL2011読み会: Query Weighting for Ranking Model Adaptation
ACL2011読み会: Query Weighting for Ranking Model AdaptationACL2011読み会: Query Weighting for Ranking Model Adaptation
ACL2011読み会: Query Weighting for Ranking Model Adaptationsleepy_yoshi
 
Deep Learning を実装する
Deep Learning を実装するDeep Learning を実装する
Deep Learning を実装するShuhei Iitsuka
 
Why Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuriWhy Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuriYuta Okamoto
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門ryosuke-kojima
 
Deep Learning 勉強会 (Chapter 7-12)
Deep Learning 勉強会 (Chapter 7-12)Deep Learning 勉強会 (Chapter 7-12)
Deep Learning 勉強会 (Chapter 7-12)Ohsawa Goodfellow
 
パターン認識モデル初歩の初歩
パターン認識モデル初歩の初歩パターン認識モデル初歩の初歩
パターン認識モデル初歩の初歩t_ichioka_sg
 
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめDSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめsleepy_yoshi
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 Nobuaki Oshiro
 
JPUGしくみ+アプリケーション勉強会(第20回)
JPUGしくみ+アプリケーション勉強会(第20回)JPUGしくみ+アプリケーション勉強会(第20回)
JPUGしくみ+アプリケーション勉強会(第20回)Yoshinori Nakanishi
 
Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用nmaro
 
Algorithm 速いアルゴリズムを書くための基礎
Algorithm 速いアルゴリズムを書くための基礎Algorithm 速いアルゴリズムを書くための基礎
Algorithm 速いアルゴリズムを書くための基礎Kenji Otsuka
 
機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編
機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編
機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編Daiyu Hatakeyama
 
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術​〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜​
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術​〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜​SSII2022 [TS3] コンテンツ制作を支援する機械学習技術​〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜​
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術​〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜​SSII
 
第四回 JavaScriptから始めるプログラミング2016
第四回 JavaScriptから始めるプログラミング2016第四回 JavaScriptから始めるプログラミング2016
第四回 JavaScriptから始めるプログラミング2016kyoto university
 

Similaire à Hive/Pigを使ったKDD'12 track2の広告クリック率予測 (20)

NN, CNN, and Image Analysis
NN, CNN, and Image AnalysisNN, CNN, and Image Analysis
NN, CNN, and Image Analysis
 
画像認識で物を見分ける
画像認識で物を見分ける画像認識で物を見分ける
画像認識で物を見分ける
 
Machine Learning Fundamentals IEEE
Machine Learning Fundamentals IEEEMachine Learning Fundamentals IEEE
Machine Learning Fundamentals IEEE
 
OpenCVの拡張ユーティリティ関数群
OpenCVの拡張ユーティリティ関数群OpenCVの拡張ユーティリティ関数群
OpenCVの拡張ユーティリティ関数群
 
文献紹介:Rethinking Data Augmentation for Image Super-resolution: A Comprehensive...
文献紹介:Rethinking Data Augmentation for Image Super-resolution: A Comprehensive...文献紹介:Rethinking Data Augmentation for Image Super-resolution: A Comprehensive...
文献紹介:Rethinking Data Augmentation for Image Super-resolution: A Comprehensive...
 
第1回R勉強会@東京
第1回R勉強会@東京第1回R勉強会@東京
第1回R勉強会@東京
 
ACL2011読み会: Query Weighting for Ranking Model Adaptation
ACL2011読み会: Query Weighting for Ranking Model AdaptationACL2011読み会: Query Weighting for Ranking Model Adaptation
ACL2011読み会: Query Weighting for Ranking Model Adaptation
 
Deep Learning を実装する
Deep Learning を実装するDeep Learning を実装する
Deep Learning を実装する
 
Why Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuriWhy Reactive Matters #ScalaMatsuri
Why Reactive Matters #ScalaMatsuri
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
 
Deep Learning 勉強会 (Chapter 7-12)
Deep Learning 勉強会 (Chapter 7-12)Deep Learning 勉強会 (Chapter 7-12)
Deep Learning 勉強会 (Chapter 7-12)
 
パターン認識モデル初歩の初歩
パターン認識モデル初歩の初歩パターン認識モデル初歩の初歩
パターン認識モデル初歩の初歩
 
DSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめDSIRNLP#1 ランキング学習ことはじめ
DSIRNLP#1 ランキング学習ことはじめ
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
 
JPUGしくみ+アプリケーション勉強会(第20回)
JPUGしくみ+アプリケーション勉強会(第20回)JPUGしくみ+アプリケーション勉強会(第20回)
JPUGしくみ+アプリケーション勉強会(第20回)
 
Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用Kashiwa.R#1 画像解析とパターン認識における R の利用
Kashiwa.R#1 画像解析とパターン認識における R の利用
 
Algorithm 速いアルゴリズムを書くための基礎
Algorithm 速いアルゴリズムを書くための基礎Algorithm 速いアルゴリズムを書くための基礎
Algorithm 速いアルゴリズムを書くための基礎
 
機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編
機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編
機械学習 / Deep Learning 大全 (2) Deep Learning 基礎編
 
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術​〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜​
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術​〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜​SSII2022 [TS3] コンテンツ制作を支援する機械学習技術​〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜​
SSII2022 [TS3] コンテンツ制作を支援する機械学習技術​〜 イラストレーションやデザインの基礎から最新鋭の技術まで 〜​
 
第四回 JavaScriptから始めるプログラミング2016
第四回 JavaScriptから始めるプログラミング2016第四回 JavaScriptから始めるプログラミング2016
第四回 JavaScriptから始めるプログラミング2016
 

Plus de Makoto Yui

Apache Hivemall and my OSS experience
Apache Hivemall and my OSS experienceApache Hivemall and my OSS experience
Apache Hivemall and my OSS experienceMakoto Yui
 
Introduction to Apache Hivemall v0.5.2 and v0.6
Introduction to Apache Hivemall v0.5.2 and v0.6Introduction to Apache Hivemall v0.5.2 and v0.6
Introduction to Apache Hivemall v0.5.2 and v0.6Makoto Yui
 
Introduction to Apache Hivemall v0.5.0
Introduction to Apache Hivemall v0.5.0Introduction to Apache Hivemall v0.5.0
Introduction to Apache Hivemall v0.5.0Makoto Yui
 
Idea behind Apache Hivemall
Idea behind Apache HivemallIdea behind Apache Hivemall
Idea behind Apache HivemallMakoto Yui
 
Introduction to Apache Hivemall v0.5.0
Introduction to Apache Hivemall v0.5.0Introduction to Apache Hivemall v0.5.0
Introduction to Apache Hivemall v0.5.0Makoto Yui
 
What's new in Hivemall v0.5.0
What's new in Hivemall v0.5.0What's new in Hivemall v0.5.0
What's new in Hivemall v0.5.0Makoto Yui
 
What's new in Apache Hivemall v0.5.0
What's new in Apache Hivemall v0.5.0What's new in Apache Hivemall v0.5.0
What's new in Apache Hivemall v0.5.0Makoto Yui
 
Revisiting b+-trees
Revisiting b+-treesRevisiting b+-trees
Revisiting b+-treesMakoto Yui
 
Incubating Apache Hivemall
Incubating Apache HivemallIncubating Apache Hivemall
Incubating Apache HivemallMakoto Yui
 
Hivemall meets Digdag @Hackertackle 2018-02-17
Hivemall meets Digdag @Hackertackle 2018-02-17Hivemall meets Digdag @Hackertackle 2018-02-17
Hivemall meets Digdag @Hackertackle 2018-02-17Makoto Yui
 
Apache Hivemall @ Apache BigData '17, Miami
Apache Hivemall @ Apache BigData '17, MiamiApache Hivemall @ Apache BigData '17, Miami
Apache Hivemall @ Apache BigData '17, MiamiMakoto Yui
 
機械学習のデータ並列処理@第7回BDI研究会
機械学習のデータ並列処理@第7回BDI研究会機械学習のデータ並列処理@第7回BDI研究会
機械学習のデータ並列処理@第7回BDI研究会Makoto Yui
 
Podling Hivemall in the Apache Incubator
Podling Hivemall in the Apache IncubatorPodling Hivemall in the Apache Incubator
Podling Hivemall in the Apache IncubatorMakoto Yui
 
Dots20161029 myui
Dots20161029 myuiDots20161029 myui
Dots20161029 myuiMakoto Yui
 
Hadoopsummit16 myui
Hadoopsummit16 myuiHadoopsummit16 myui
Hadoopsummit16 myuiMakoto Yui
 
HadoopCon'16, Taipei @myui
HadoopCon'16, Taipei @myuiHadoopCon'16, Taipei @myui
HadoopCon'16, Taipei @myuiMakoto Yui
 
3rd Hivemall meetup
3rd Hivemall meetup3rd Hivemall meetup
3rd Hivemall meetupMakoto Yui
 
Recommendation 101 using Hivemall
Recommendation 101 using HivemallRecommendation 101 using Hivemall
Recommendation 101 using HivemallMakoto Yui
 
Hivemall dbtechshowcase 20160713 #dbts2016
Hivemall dbtechshowcase 20160713 #dbts2016Hivemall dbtechshowcase 20160713 #dbts2016
Hivemall dbtechshowcase 20160713 #dbts2016Makoto Yui
 
Introduction to Hivemall
Introduction to HivemallIntroduction to Hivemall
Introduction to HivemallMakoto Yui
 

Plus de Makoto Yui (20)

Apache Hivemall and my OSS experience
Apache Hivemall and my OSS experienceApache Hivemall and my OSS experience
Apache Hivemall and my OSS experience
 
Introduction to Apache Hivemall v0.5.2 and v0.6
Introduction to Apache Hivemall v0.5.2 and v0.6Introduction to Apache Hivemall v0.5.2 and v0.6
Introduction to Apache Hivemall v0.5.2 and v0.6
 
Introduction to Apache Hivemall v0.5.0
Introduction to Apache Hivemall v0.5.0Introduction to Apache Hivemall v0.5.0
Introduction to Apache Hivemall v0.5.0
 
Idea behind Apache Hivemall
Idea behind Apache HivemallIdea behind Apache Hivemall
Idea behind Apache Hivemall
 
Introduction to Apache Hivemall v0.5.0
Introduction to Apache Hivemall v0.5.0Introduction to Apache Hivemall v0.5.0
Introduction to Apache Hivemall v0.5.0
 
What's new in Hivemall v0.5.0
What's new in Hivemall v0.5.0What's new in Hivemall v0.5.0
What's new in Hivemall v0.5.0
 
What's new in Apache Hivemall v0.5.0
What's new in Apache Hivemall v0.5.0What's new in Apache Hivemall v0.5.0
What's new in Apache Hivemall v0.5.0
 
Revisiting b+-trees
Revisiting b+-treesRevisiting b+-trees
Revisiting b+-trees
 
Incubating Apache Hivemall
Incubating Apache HivemallIncubating Apache Hivemall
Incubating Apache Hivemall
 
Hivemall meets Digdag @Hackertackle 2018-02-17
Hivemall meets Digdag @Hackertackle 2018-02-17Hivemall meets Digdag @Hackertackle 2018-02-17
Hivemall meets Digdag @Hackertackle 2018-02-17
 
Apache Hivemall @ Apache BigData '17, Miami
Apache Hivemall @ Apache BigData '17, MiamiApache Hivemall @ Apache BigData '17, Miami
Apache Hivemall @ Apache BigData '17, Miami
 
機械学習のデータ並列処理@第7回BDI研究会
機械学習のデータ並列処理@第7回BDI研究会機械学習のデータ並列処理@第7回BDI研究会
機械学習のデータ並列処理@第7回BDI研究会
 
Podling Hivemall in the Apache Incubator
Podling Hivemall in the Apache IncubatorPodling Hivemall in the Apache Incubator
Podling Hivemall in the Apache Incubator
 
Dots20161029 myui
Dots20161029 myuiDots20161029 myui
Dots20161029 myui
 
Hadoopsummit16 myui
Hadoopsummit16 myuiHadoopsummit16 myui
Hadoopsummit16 myui
 
HadoopCon'16, Taipei @myui
HadoopCon'16, Taipei @myuiHadoopCon'16, Taipei @myui
HadoopCon'16, Taipei @myui
 
3rd Hivemall meetup
3rd Hivemall meetup3rd Hivemall meetup
3rd Hivemall meetup
 
Recommendation 101 using Hivemall
Recommendation 101 using HivemallRecommendation 101 using Hivemall
Recommendation 101 using Hivemall
 
Hivemall dbtechshowcase 20160713 #dbts2016
Hivemall dbtechshowcase 20160713 #dbts2016Hivemall dbtechshowcase 20160713 #dbts2016
Hivemall dbtechshowcase 20160713 #dbts2016
 
Introduction to Hivemall
Introduction to HivemallIntroduction to Hivemall
Introduction to Hivemall
 

Hive/Pigを使ったKDD'12 track2の広告クリック率予測

  • 1. Hive/Pigを使ったKDD'12 track2 の広告クリック率予測 油井 誠 m.yui@aist.go.jp 産業技術総合研究所 情報技術研究部門 Twitter ID: @myui スライド http://www.slideshare.net/myui/dsirnlp-myuilt 1 http://goo.gl/Ulf3A
  • 2. KDDcup 2012 track2 • 検索ログを基に、検索エンジンの広告のクリック 率(Click-Through Rate)を推定するタスク – 中国の3大検索エンジンの一つsoso.comの実データ • 検索語などはHash値などを利用してすべて数値化されてい る – Trainingデータ(約10GB+2.2GB, 15億レコード) – Testデータ(約1.3GB, 2億レコード) • 学習データの1.33割が評価用データセット – CTRがsubmission format • クラス分類というより回帰(もちろんクラス分類でも解ける) 2
  • 3. 学習データのテーブル構成 User table UserID Gender Age Query table QueryID Tokens Click = Positive UserID AdID QueryID Depth Position Impression Click Impression – Click = Negative CTR = Click / Impression Training table AdID properties DisplayURL AdvertiserID KeywordID TitleID DescriptionID KeywordID Tokens TitleID Tokens DescriptionID Tokens Keyword table Title table Description table 評価用のテーブルにはimpression、click以外の素性(feature) 基本的に、全部、質的変数 → 二値変数の素性に分解 Label A B Label A:1 A:2 A:3 B:7 B:8 B:9 1 1 9 1 1 0 0 0 1 0 -1 2 7 -1 0 1 0 0 0 1 1 3 8 1 0 0 1 1 0 0 3
  • 4. ロジスティック回帰での発生予測 • 発生確率を予測する手法 • 各変数の影響力の強さを計算(Train) – 入力: Label, Array<feature> – 出力: 素性ごとの重みのMap<feature, float> – # of features = 54,686,452 • ただし、token tableは利用していない (Token ID = <token,..,token>) • 影響力を基に生起確率を計算(Predict) – P(X) = Pr(Y=1|x1,x2,..,xn) – f: X → Yとなる関数fを導出したい 1 𝑛 s.t. empirical lossを最小化 𝑎𝑟𝑔𝑚𝑖𝑛 𝑙𝑜𝑠𝑠(𝑓(𝑥 𝑖 ; 𝑤), 𝑦 𝑖 ) 𝑛 𝑖=0 • 勾配降下法を使う 各素性の重み 4
  • 5. Gradient Descent(勾配降下法) 学習率 𝑛 1 𝑤 𝑡+1 = 𝑤 𝑡 − 𝛾 𝑡 𝛻𝑙𝑜𝑠𝑠(𝑓(𝑥 𝑖 ; 𝑤 𝑡 ), 𝑦) 𝑛 𝑖=0 経験損失の勾配を基に重みを更新 新しい重み 古い重み Jimmy LinのLarge-Scale Machine Learning at Twitterより https://speakerdeck.com/u/lintool/p/large-scale-machine-learning-at-twitter 5
  • 6. 勾配の並列計算 𝑛 1 𝑤 𝑡+1 = 𝑤 𝑡 − 𝛾 𝑡 𝛻𝑙𝑜𝑠𝑠(𝑓(𝑥 𝑖 ; 𝑤 𝑡 ), 𝑦) 𝑛 𝑖=0 勾配をmapperで並列に計算 mappers 重みの更新をreducerで行う single reducer • 実際には重みの更新の時に更新されたfeature(xi)が必要 • wはMap<feature, weight>でMap.size()=54,686,452 • Iteration数が多く必要で、入出力がDFSを介すMapReduce に向かない • Reducerでの計算がボトルネックになる 6
  • 7. 確率的勾配降下法 • Gradient Descent 𝑛 1 𝑤 𝑡+1 = 𝑤 𝑡 − 𝛾 𝑡 𝛻𝑙𝑜𝑠𝑠(𝑓(𝑥 𝑖 ; 𝑤 𝑡 ), 𝑦) 𝑛 𝑖=0 モデルの更新に全てのトレーニングインスタンスが必要(バッチ学習) • Stochastic Gradient Descent (SGD) 𝑤 𝑡+1 = 𝑤 𝑡 − 𝛾 𝑡 𝛻𝑙𝑜𝑠𝑠(𝑓(𝑥; 𝑤 𝑡 ), 𝑦) それぞれのトレーニングインスタンスで重みを更新(オンライン学習) – Iterative Parameter Mixで処理すれば、実際意外とうまく 動くし、そんなにイテレーション数が必要でない 𝑡+1 • データ分割して、各mapperで並列に 𝑤 = 𝑤 𝑡 − 𝛾 𝑡 𝛻𝑙𝑜𝑠𝑠(𝑓(𝑥; 𝑤 𝑡 ), 𝑦) を計算 • モデルパラメタはイテレーション/epochごとに配る 7
  • 8. よくある機械学習のデータフロー Testデータ array<feature> Trainingデータ Modelデータ Label, Map predict array<feature> <feature, weight> train Label/Prob 8
  • 9. よくある並列trainのデータフロー map Map <feature,weight> Trainingデータ map Modelデータ Label, Map reduce array<feature> map <feature, weight> 重みの平均をとる map イテレーションする場合は 𝑤 𝑡+1 = 𝑤 𝑡 − 𝛾 𝑡 𝛻𝑙𝑜𝑠𝑠(𝑓(𝑥; 𝑤 𝑡 ), 𝑦) 古いmodelを渡す SGDで重みを計算 機械学習はaggregationの問題 直感的にはHive/PigのUDAF(user defined aggregation function)で実装すればよい 9 ほんとはM/Rよりもparallel aggregationに特化したDremelに向いてる
  • 10. よくある並列trainのデータフロー map Map <feature,weight> Trainingデータ map Modelデータ Label, Map reduce array<feature> map <feature, weight> 重みの平均をとる map イテレーションする場合は 𝑤 𝑡+1 = 𝑤 𝑡 − 𝛾 𝑡 𝛻𝑙𝑜𝑠𝑠(𝑓(𝑥; 𝑤 𝑡 ), 𝑦) 古いmodelを渡す SGDで重みを計算 最初は素直にmapを返すUDAFで作った create table model as select trainLogisticUDAF(features,label [, params]) as weight from training mapはsplitサイズの調整でメモリ内に収まるけど、より規模がでかくなると 10 reduceでメモリ不足になるのでデータ量に対してスケールしない
  • 11. Think relational Testデータ array<feature> Trainingデータ Modelデータ Label, Map predict array<feature> <feature, weight> train Scaler値として返すのはダメ Label/Prob リレーションでfeature, weightを返そう でも、UDAFは使えない →そこでUDTF (User Defined Table Function) 11
  • 12. UDTF (parameter-mix) HadoopのInputSplitSizeの設定に応じたmapperが select 立ち上がる(map-only) feature, CAST(avg(weight) as FLOAT) as weight from ( select TrainLogisticSgdUDTF(features,label,..) as (feature,weight) from train )t group by feature; どうやってiterative parameter mixさせよう??? 古いmodelを渡さないといけない 毎行渡すのはあれだし… 12
  • 13. UDTF(iterative parameter mix) create table model1sgditor2 as select feature, CAST(avg(weight) as FLOAT) as weight from ( select TrainLogisticIterUDTF(t.features, w.wlist, t.label, ..) as (feature, weight) from training t join feature_weight w on (t.rowid = w.rowid) )t group by feature; ここで必要なのは、各行の素性ごとに古いModel Map<feature, weight>, label相当を渡せばよいので、 Array<feature>に対応するArray<weight>をテーブルを作って inner joinで渡す 13
  • 14. Pig版のフローの一例 training_raw = load '$TARGET' as (clicks: int, impression: int, displayid: int, adid: int, advertiserid: int, depth: int, position: int, queryid: int, keywordid: int, titleid: int, descriptionid: int, userid: int, gender: int, age: int); training_bin = foreach training_raw generate flatten(predictor.ctr.BinSplit(clicks, impression)), displayid, adid, advertiserid, depth, position, queryid, keywordid, titleid, descriptionid, userid, gender, age; training_smp = sample training_bin 0.1; training_rnd = foreach training_smp generate (int)(RANDOM() * 100) as dataid, TOTUPLE(*) as training; training_dat = group training_rnd by dataid; model = foreach training_dat generate predictor.ctr.TrainLinear(training_rnd.training.training_smp); store model into '$MODEL'; model = load '$MODEL' as (mdl: map[]); 弱学習 model_lmt = limit model 10; testing_raw = load '$TARGET' as (dataid: int, displayid: int, adid: int, advertiserid: int, depth: int, position: int, queryid: int, keywordid: int, titleid: int, descriptionid: int, userid: int, gender: int, age: int); testing_with_model = cross model_lmt, testing_raw; result = foreach testing_with_model generate dataid, predictor.ctr.Pred(mdl, displayid, adid, advertiserid, depth, position, queryid, keywordid, titleid, descriptionid, userid, gender, age) as ctr; result_grp = group result by dataid; result_ens = foreach result_grp generate group as dataid, predictor.ctr.Ensemble(result.ctr); result_ens_ord = order result_ens by dataid; result_fin = foreach result_ens_ord generate $1; store result_fin into '$RESULT'; アンサンブル学習 14
  • 15. まとめ • データ量に対してちゃんとスケールするものができた – インターン生にpig版を作ってもらった • こちらはUTDFではやっていなくて、モデルファイルを分割して作っ て、アンサンブル学習させる戦略 – オンラインのモデル更新とかをやるには、updateのない hiveだとinsertにしないといけないので一工夫いる – Passive-aggressive版も作る予定 • 現状、AUC=0.75程度(優勝者の台湾国立大は0.8) – a9aデータセットだとlibsvm, svm-light, liblinear, tinysvmな どと同程度の精度(0.85ぐらい) • 余裕があったらHiveにパッチとして送る – でも、ドキュメントとかテストとかxxxxx 実データを持つ共同研究先募集 (一件、広告配信企業とやってる) 15