今さら聞けない Hadoop 勉強会   第2回      アルゴリズム編             セントラルソフト株式会社           システム1部 システム開発課                    奥山 洋平1
本勉強会の目的2
本セミナーの目的   Hadoop に関連する技術や培ったノウハウを、勉強会に参加された方    と    共有する                    SlideShare で公開                             ...
本日の目的   2つのアルゴリズムを通してアルゴリズムからジョブ    フローにする流れを知ってもらう         今回   アルゴリズム              ジョブフロー         次回予定          MapRedu...
目次       k-means アルゴリズム           アルゴリズムからジョブフローへ       TF-IDF アルゴリズム           アルゴリズムからジョブフローへ       まとめと次回の予定    5
k-means アルゴリズム
k-means アルゴリズムとは   レコードの集合を k 個のよく似た特徴を持つ集合    (クラスタ)に分割(クラスタリング)するアルゴリ    ズム   k = 2 の例   クラスタ    レコード    7
クラスタリングの活用例       機械学習           手書き文字認識                                 この数字は                                  「9」     ...
k-means アルゴリズム概要       k-menas アルゴリズムは「クラスタの割り当て」と        「クラスタの重心を求める」という処理を繰り返し、        最適な重心を求めるアルゴリズム    9
k-means アルゴリズムの手順(1)1.       初期化        各レコードに対して、ランダムにクラスタを割り当てる2.       割り当てたクラスタの重心を求める3.       各レコードを、各クラスタの重心に一番近いクラ...
k-means アルゴリズムの手順(2)k=3           3. クラスタの再割り当て           1. 初期化(ランダムにクラスタを割り当てる)           2. クラスタの重心を求める            ⇒ クラ...
アルゴリズムからジョブフローへ12
ジョブフローを作る際に意識すること    MapReduce は分散処理なので、複雑な処理はでき     ない        複雑な処理は複数回の MapReduce で実現する        本勉強会の説明では1回の MapReduce...
k-means アルゴリズム1.       初期化        各レコードに対して、ランダムにクラスタを割り当てる2.       割り当てたクラスタの重心を求める3.       各レコードを、各クラスタの重心に一番近いクラスタ    ...
処理の流れ処理1:初期化処理2:割り当てたクラスタの重心を求める処理3:各レコードを、各クラスタの重心に一番近いクラ  スタに    割り当て直す                  レコー                  ド集合       ...
MapReduce にできるか検討    それぞれの処理が1回の MapReduce で実現できそ     うか     検討し、必要に応じて複数回のジョブで処理を実現     する    16
MapReduce の簡単な復習    MapReduce は以下の3つのフェーズで構成される        入力データの加工を行う「Map」        データの整理と分配を行う「Shuffle & Sort」           ...
処理1概要    処理        各レコードに対して、ランダムにクラスタを割り当てる    入力(クラスタリングするデータファイル)        key     : 入力ファイルの形式による        value   : 1...
処理1検討     <入力形式によって異なるkey , 1レコード>                    入力                                乱数              処理1       1回の MapR...
処理2概要    処理        割り当てられたクラスタの重心を求める    入力(ランダムにクラスタを割り当てられたレコー     ド)        key     : クラスタ番号        value   : 1レコー...
処理2検討     <クラスタ1, A><クラスタ2, B>                        <クラスタ1, C>                         Map 出力     Shuffle & Sort で同じクラスタ...
処理3概要    処理        各レコードを、一番近いクラスタに割り当て直す    入力1(クラスタの重心)        key          : クラスタ番号        value   : クラスタの重心の位置  ...
処理3検討    問題となりそうなところ        2つの形式のデータの入力はどうする?        クラスタの重心のデータはすべての Reduce を行うノー         ドに         配布する必要があるがどうする? ...
その他次回解説を行う問題    <要検討>にしてあった部分    処理3の終了後、条件によって処理を終了するか、     処理2の処理に戻るか分岐する問題    MapReduce の実装レベルの内容は次回行う(予     定)    24
TF-IDF アルゴリズム25
TF-IDF アルゴリズムとは    文書中の単語に関する重み付けのアルゴリズム        その単語がその文書でどれくらい特徴的であるかを         単語ごと文書ごとに数値化(tfidf 値)            出てくる文書...
tfidf 値の意味(1)    異なる文書の同じ単語の場合        単語の tfidf 値が高い文書ほど、その単語を特徴として持         つ文書                 その単語がよく表れる文書          ...
tfidf 値の意味(2)   一つの文書内の単語の場合        特定の文書中で tfidf 値が高い単語が、その文書を特徴付け         る               文書のインデックス作成             文書の...
TF-IDF アルゴリズム(tfidf 値の求め方)(1)    tfidf 値は、単語の出現頻度(tf : term frequency)と     逆文書頻度(idf : inverse document frequency)の積で求め ...
TF-IDF アルゴリズム(tfidf 値の求め方)(2)             文書1                     文書2                    文書3      A          tf:0.5       ...
アルゴリズムからジョブフローへ31
k-means アルゴリズムとの違い    k-means はアルゴリズムの中でフローが決まってい     た    TF-IDF は計算式だけでフローが無いので、どのよう     な順番で処理を行うのか考えなければならない    32
ジョブフローを作る際に意識すること(再掲)    MapReduce は分散処理なので、複雑な処理はでき     ない        複雑な処理は複数回の MapReduce で実現する        ここでは1回の MapReduce ...
MapReduce の簡単な復習(再掲)    MapReduce は以下の3つのフェーズで構成される        入力データの加工を行う「Map」        データの整理と分配を行う「Shuffle & Sort」        ...
アルゴリズムからジョブフローへの流れ1.    大まかな処理に分ける2.    処理の入出力を考える3.    データを Reduce からの参照のされ方で分ける     1.   全ての Reduce     2.   全てではないが複数の ...
1.大まかな処理に分ける    必要なものを考え、大まかな処理に分ける                     文書中の単語の出現回数を求める                     文書中の単語の総数を求める              式に...
2.処理の入出力を考える(1)     どのような key と value のペアを出力するか考える     「式に代入して計算」の処理の場合                              Hadoop    : 0.3    ...
2.処理の入出力を考える(2)    同様にして考えると以下の表のようになる               処理            key     value            式に代入して計算       文書名/単語    tfid...
2.処理の入出力を考える(3)    入力ファイルから文書名を取得する必要があるので、     今回の入力ファイルは説明を簡単にするため以下の     フォーマットを用いる                    入力ファイル         ...
3.データを Reduce からの参照のされ方で分ける(1)  「式に代入して計算」の処理の入力を考える                     全体で共通の値  以下は計算式と必要な値を求める処理の出力各文書で共通の値 全て異なる値   ...
3.データを Reduce からの参照のされ方で分ける(2)    全体で共通の値        k-means のクラスタの中心データの配布と同じ方法を使         う    部分的に共通の値        ジョブ(MapRed...
ここまでで構築した処理の流れ       文書数を求め            式に代入          る              して計算 入力    文書中の単語の                    出力ファイ   出現回数を求める...
4.簡単な MapReduce で実現できるか検討43
「文書数を求める」検討    入力ファイルから簡単な MapReduce で文書数を求     めることはできない    先に「文書のリスト作成」のジョブを作成してから     だと、ワードカウントと同様にして文書数が求めら     れる ...
「文書中の単語の出現回数を求める」検討    入力から文書名と単語のペアを key にすれば、     ワードカウントと同様にして文書中の単語の出現回     数が求められる    45
「単語が出現した文書数を求める」検討    入力ファイルから簡単な MapReduce で単語が出現     した文書数を求めることはできない    先に「文書で出現した単語のリスト」を作成しして     からだと、ワードカウントと同様にし...
「文書中の単語の総数を求める」検討    文書名を key にすれば、ワードカウントと同様にし     て     文書中の単語の総数が求められる    47
ジョブフロー         文書数を求める       文書名の     文書名を数                式に代入       リスト作成     える                  して計算        文書中の単語の   ...
まとめと次回の予定49
まとめ    アルゴリズムからジョブフローにする手順     1.        大まかな処理に分ける     2.        処理の入出力を考える     3.        データを Reduce からの参照のされ方で分ける     ...
次回の予定   MapReduce プログラミング基礎とプログラミングテ    クニック        ワードカウント        k-means        TF-IDF    51
Upcoming SlideShare
Loading in …5
×

今さら聞けないHadoop勉強会第2回 セントラルソフト株式会社(20120228)

1,308 views
1,246 views

Published on

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,308
On SlideShare
0
From Embeds
0
Number of Embeds
16
Actions
Shares
0
Downloads
22
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

今さら聞けないHadoop勉強会第2回 セントラルソフト株式会社(20120228)

  1. 1. 今さら聞けない Hadoop 勉強会 第2回 アルゴリズム編 セントラルソフト株式会社 システム1部 システム開発課 奥山 洋平1
  2. 2. 本勉強会の目的2
  3. 3. 本セミナーの目的 Hadoop に関連する技術や培ったノウハウを、勉強会に参加された方 と 共有する SlideShare で公開 「今さら聞けないhadoop セントラ ルソフト」で見つかります スケジュール  第1回 Hadoop 基礎(1月19日開催)  HDFS と MapReduce の概念  ロールプレイ  第2回 アルゴリズム(本日2月28日開催)  k-means アルゴリズム  TF-IDF アルゴリズム  第3回 「MapReduce 実装テクニック」を予定(3月予定)  ワードカウント  k-means  TF-IDF  第4回 「理論・エコシステム編」を予定(4月予定)  HDFS  HBase  Hive 3
  4. 4. 本日の目的 2つのアルゴリズムを通してアルゴリズムからジョブ フローにする流れを知ってもらう 今回 アルゴリズム ジョブフロー 次回予定 MapReduce プログラム 4
  5. 5. 目次 k-means アルゴリズム  アルゴリズムからジョブフローへ TF-IDF アルゴリズム  アルゴリズムからジョブフローへ まとめと次回の予定 5
  6. 6. k-means アルゴリズム
  7. 7. k-means アルゴリズムとは レコードの集合を k 個のよく似た特徴を持つ集合 (クラスタ)に分割(クラスタリング)するアルゴリ ズム k = 2 の例 クラスタ レコード 7
  8. 8. クラスタリングの活用例 機械学習  手書き文字認識 この数字は 「9」 この数字は 何? 9のクラス 7のクラス タ タ 特徴抽出  「7」と「9」の分類に必要な特徴は? 8
  9. 9. k-means アルゴリズム概要 k-menas アルゴリズムは「クラスタの割り当て」と 「クラスタの重心を求める」という処理を繰り返し、 最適な重心を求めるアルゴリズム 9
  10. 10. k-means アルゴリズムの手順(1)1. 初期化  各レコードに対して、ランダムにクラスタを割り当てる2. 割り当てたクラスタの重心を求める3. 各レコードを、各クラスタの重心に一番近いクラスタ に 割り当て直す4. クラスタの割り当て変化がある 終了 2 の処理 クラスタの割り当てに変化が無い 10 予め決めた回数クラスタの割り当てを行った
  11. 11. k-means アルゴリズムの手順(2)k=3 3. クラスタの再割り当て 1. 初期化(ランダムにクラスタを割り当てる) 2. クラスタの重心を求める ⇒ クラスタの割り当てが変化したので クラスタの割り当てが変化しなかったので 2 の処理へ 処理終了11
  12. 12. アルゴリズムからジョブフローへ12
  13. 13. ジョブフローを作る際に意識すること MapReduce は分散処理なので、複雑な処理はでき ない  複雑な処理は複数回の MapReduce で実現する  本勉強会の説明では1回の MapReduce を1ジョブとす る  1ジョブの処理はシンプルにする 複雑な処理 ジョブ 2 複雑な ジョブ ジョブ 処理 1 4 ジョブ 3 13
  14. 14. k-means アルゴリズム1. 初期化  各レコードに対して、ランダムにクラスタを割り当てる2. 割り当てたクラスタの重心を求める3. 各レコードを、各クラスタの重心に一番近いクラスタ に 割り当て直す4. クラスタの割り当て変化がある 終了 2 の処理 クラスタの割り当てに変化が無い 14 予め決めた回数クラスタの割り当てを行った
  15. 15. 処理の流れ処理1:初期化処理2:割り当てたクラスタの重心を求める処理3:各レコードを、各クラスタの重心に一番近いクラ スタに 割り当て直す レコー ド集合 :入力 :出力開始 処理1 処理2 処理3 終了 :フロー :終了時入力 出力 処理3の 処理1 処理2 処理3 結果がファイ ファイ 結果 結果 結果 ル ル 最終出力15
  16. 16. MapReduce にできるか検討 それぞれの処理が1回の MapReduce で実現できそ うか 検討し、必要に応じて複数回のジョブで処理を実現 する 16
  17. 17. MapReduce の簡単な復習 MapReduce は以下の3つのフェーズで構成される  入力データの加工を行う「Map」  データの整理と分配を行う「Shuffle & Sort」  同じ key に対する value は一纏めにし、key 順にソートした データを Reduce を行うノードが受け取る  まとめられたデータに対して処理を行う「Reduce」 それぞれのフェーズの入出力は key と value のペア 17
  18. 18. 処理1概要 処理  各レコードに対して、ランダムにクラスタを割り当てる 入力(クラスタリングするデータファイル)  key : 入力ファイルの形式による  value : 1レコード 出力(ランダムにクラスタを割り当てられたレコー ド)  key : 割り当てられたクラスタ番号  value : 1レコード 18
  19. 19. 処理1検討 <入力形式によって異なるkey , 1レコード> 入力 乱数 処理1 1回の MapReduce で実現できそう <ランダムに割り当てたクラスタ , 1レコード> 出力19
  20. 20. 処理2概要 処理  割り当てられたクラスタの重心を求める 入力(ランダムにクラスタを割り当てられたレコー ド)  key : クラスタ番号  value : 1レコード 出力(クラスタの重心)  key : クラスタ番号  value : クラスタの重心の位置 20
  21. 21. 処理2検討 <クラスタ1, A><クラスタ2, B> <クラスタ1, C> Map 出力 Shuffle & Sort で同じクラスタは一纏まりになり、 Shuffle & Sort その纏まりでクラスタの重心が計算できる <クラスタ1, [A , C]> <クラスタ2, [B]> 1回の MapReduce で実現できそう Reduce 入力21
  22. 22. 処理3概要 処理  各レコードを、一番近いクラスタに割り当て直す 入力1(クラスタの重心)  key : クラスタ番号  value : クラスタの重心の位置 入力2(クラスタリングするデータファイル)  key : <要検討>  value : 1レコード 出力(クラスタを割り当て直したレコード)  key : 割り当てたクラスタ  value : 1レコード 22
  23. 23. 処理3検討 問題となりそうなところ  2つの形式のデータの入力はどうする?  クラスタの重心のデータはすべての Reduce を行うノー ドに 配布する必要があるがどうする?  すべてに配布しないと各レコードがどのクラスタに近いのか 比較できない 実現方法を知っていれば1回の MapReduce で 知らなければ MapReduce の回数を増やす 次回、1回の MapReduce で実現する方法を解説 予定 23
  24. 24. その他次回解説を行う問題 <要検討>にしてあった部分 処理3の終了後、条件によって処理を終了するか、 処理2の処理に戻るか分岐する問題 MapReduce の実装レベルの内容は次回行う(予 定) 24
  25. 25. TF-IDF アルゴリズム25
  26. 26. TF-IDF アルゴリズムとは 文書中の単語に関する重み付けのアルゴリズム  その単語がその文書でどれくらい特徴的であるかを 単語ごと文書ごとに数値化(tfidf 値)  出てくる文書が少なく、特定の文書での出現回数が多い単語ほ ど その文書での数値が大きい  キーワード抽出や Web 検索へ応用できる 例:ある文書中の tfidf 値 “Hadoop” : 0.3 文書 “HDFS” : 0.6 “MapReduce” : 0.5 26 …
  27. 27. tfidf 値の意味(1) 異なる文書の同じ単語の場合  単語の tfidf 値が高い文書ほど、その単語を特徴として持 つ文書  その単語がよく表れる文書 文書のキーワード 検索 文書A 文書B 文書C “Hadoop” : 0.3 “Hadoop” : 0.5 “Hadoop” : 0.2 “Hadoop” の検索結果は上位から 文書B , A , C 27
  28. 28. tfidf 値の意味(2) 一つの文書内の単語の場合  特定の文書中で tfidf 値が高い単語が、その文書を特徴付け る  文書のインデックス作成 文書のキーワード検索 の高速化 tfidf 値 インデックス “Hadoop” : 0.3 “HDFS” : 0.6 “HDFS” 文書A “Java” : 0.2 “MapReduce” “MapReduce” : 0.5 “Hadoop” “Ruby” : 0.1 … 28
  29. 29. TF-IDF アルゴリズム(tfidf 値の求め方)(1) tfidf 値は、単語の出現頻度(tf : term frequency)と 逆文書頻度(idf : inverse document frequency)の積で求め られる tfidf 単語の出現頻度 * 逆文書頻度 単語の出現頻度(tf)は以下の式で求められる 文書中の単語の出現回 数 単語の出現頻度 文書中の単語の総数 逆文書頻度(idf)は以下の式で求められる(この式は ジップの法則に由来する) 文書数 逆文書頻度 log10 単語が出現した文書数 29
  30. 30. TF-IDF アルゴリズム(tfidf 値の求め方)(2) 文書1 文書2 文書3 A tf:0.5 0.2385 単語の出現頻度 * 逆文書頻度 A 文書中の単語の出現回数 / 文書中の単語の総数 0.5 * 0.477 idf:0.477 2/4 log10(文書数/単語が出現した文書数) tf:0.25 log10(3 / 1) tf:0.33 B 0.044 B単語ごとに共通の値 0.05808 idf:0.176 C tf:0.25 C tf:0.33 C tf:0.25 idf:0 0 0 0 D tf:0.33 D tf:0.5 0.05808 0.088 idf:0.17 D 6 tf:0.25 E 0.11925 idf:0.4730 7
  31. 31. アルゴリズムからジョブフローへ31
  32. 32. k-means アルゴリズムとの違い k-means はアルゴリズムの中でフローが決まってい た TF-IDF は計算式だけでフローが無いので、どのよう な順番で処理を行うのか考えなければならない 32
  33. 33. ジョブフローを作る際に意識すること(再掲) MapReduce は分散処理なので、複雑な処理はでき ない  複雑な処理は複数回の MapReduce で実現する  ここでは1回の MapReduce を1ジョブとする  1ジョブの処理はシンプルにする 複雑な処理 ジョブ 2 複雑な ジョブ ジョブ 処理 1 4 ジョブ 3 33
  34. 34. MapReduce の簡単な復習(再掲) MapReduce は以下の3つのフェーズで構成される  入力データの加工を行う「Map」  データの整理と分配を行う「Shuffle & Sort」  同じ key に対する value は一纏めにし、key 順にソートした データを Reduce を行うノードが受け取る  まとめられたデータに対して処理を行う「Reduce」 それぞれのフェーズの入出力は key と value のペア 34
  35. 35. アルゴリズムからジョブフローへの流れ1. 大まかな処理に分ける2. 処理の入出力を考える3. データを Reduce からの参照のされ方で分ける 1. 全ての Reduce 2. 全てではないが複数の Reduce 3. 一つの Reduce4. 処理ごとに簡単な MapReduce で実現できるか検討 し、 必要に応じてジョブを増やす 35
  36. 36. 1.大まかな処理に分ける 必要なものを考え、大まかな処理に分ける 文書中の単語の出現回数を求める 文書中の単語の総数を求める 式に代入 tfidf 値 して計算 文書数を求める 単語が出現した文書数を求め る文書中の単語の出現回 数 文書数 * log10 文書中の単語の総数 単語が出現した文書数 36
  37. 37. 2.処理の入出力を考える(1)  どのような key と value のペアを出力するか考える  「式に代入して計算」の処理の場合 Hadoop : 0.3 文書A HDFS : 0.6 MapReduce : 0.5 … key は文書名と単語のペ value は ア tfidf 値 文書 A の Hadoop の 値: 0.3 文書 A の HDFS の 値: 0.6 文書 A の MapReduce の 値: 0.5 37
  38. 38. 2.処理の入出力を考える(2) 同様にして考えると以下の表のようになる 処理 key value 式に代入して計算 文書名/単語 tfidf 値 文書中の単語の出現回数を求める 文書名/単語 出現回数 文書中の単語の総数を求める 文書名 単語の総数 文書数を求める <要検討> 文書数 単語が出現した文書数を求める 単語 出現した文書 数 38
  39. 39. 2.処理の入出力を考える(3) 入力ファイルから文書名を取得する必要があるので、 今回の入力ファイルは説明を簡単にするため以下の フォーマットを用いる 入力ファイル タイトル名1@バイトオフセット 文章 タイトル名1@バイトオフセット 文章 タイトル名1@バイトオフセット 文章 タイトル名1@バイトオフセット 文章 タイトル名2@バイトオフセット 文章 タイトル名2@バイトオフセット 文章 タイトル名2@バイトオフセット 文章 … 39
  40. 40. 3.データを Reduce からの参照のされ方で分ける(1) 「式に代入して計算」の処理の入力を考える 全体で共通の値  以下は計算式と必要な値を求める処理の出力各文書で共通の値 全て異なる値 各単語で共通の 値 文書中の単語の出現回 数 文書数 * log10 文書中の単語の総数 単語が出現した文書数 処理 key value 文書中の単語の出現回数を求める 文書名/単語 出現回数 文書中の単語の総数を求める 文書名 単語の総数 文書数を求める <要検討> 文書数 単語が出現した文書数を求める 単語 出現した文書 数 40
  41. 41. 3.データを Reduce からの参照のされ方で分ける(2) 全体で共通の値  k-means のクラスタの中心データの配布と同じ方法を使 う 部分的に共通の値  ジョブ(MapReduce)を追加して全て異なる値と一緒に 扱う  全体で共通の値と同じ手法を使わない理由は次回 41
  42. 42. ここまでで構築した処理の流れ 文書数を求め 式に代入 る して計算 入力 文書中の単語の 出力ファイ 出現回数を求める ファイル ル 値をまとめ 値をまとめ (tfidf る1 る2 値) 単語が出現した 文書数を求める 文書中の単語の 総数を求める 42
  43. 43. 4.簡単な MapReduce で実現できるか検討43
  44. 44. 「文書数を求める」検討 入力ファイルから簡単な MapReduce で文書数を求 めることはできない 先に「文書のリスト作成」のジョブを作成してから だと、ワードカウントと同様にして文書数が求めら れる 文書数を求める 文書数を求め 文書名の る 文書名を数える リスト作成 44
  45. 45. 「文書中の単語の出現回数を求める」検討 入力から文書名と単語のペアを key にすれば、 ワードカウントと同様にして文書中の単語の出現回 数が求められる 45
  46. 46. 「単語が出現した文書数を求める」検討 入力ファイルから簡単な MapReduce で単語が出現 した文書数を求めることはできない 先に「文書で出現した単語のリスト」を作成しして からだと、ワードカウントと同様にして単語が出現 した文書数が求められる 単語が出現した文書数を求める 単語が出現し た文書数を求 リストから 文書で出現した める 単語が出現した 単語のリスト 文書数を求める 46
  47. 47. 「文書中の単語の総数を求める」検討 文書名を key にすれば、ワードカウントと同様にし て 文書中の単語の総数が求められる 47
  48. 48. ジョブフロー 文書数を求める 文書名の 文書名を数 式に代入 リスト作成 える して計算 文書中の単語の 出力 入力 出現回数を求めるファイ ファイル ル 値をまとめ 値をまとめ (tfidf 単語が出現した文書数を求める る1 る2 値) 文書で出現し リストから た 単語が出現した 単語のリスト 文書数を求める 文書中の単語の 総数を求める 48
  49. 49. まとめと次回の予定49
  50. 50. まとめ アルゴリズムからジョブフローにする手順 1. 大まかな処理に分ける 2. 処理の入出力を考える 3. データを Reduce からの参照のされ方で分ける 1. 全ての Reduce 2. 全てではないが複数の Reduce 3. 一つの Reduce 4. 処理ごとに簡単な MapReduce で実現できるか検討し、 必要に応じてジョブを増やす 50
  51. 51. 次回の予定 MapReduce プログラミング基礎とプログラミングテ クニック  ワードカウント  k-means  TF-IDF 51

×