More Related Content
文法圧縮入門:超高速テキスト処理のためのデータ圧縮(NLP2014チュートリアル) Data-Intensive Text Processing with MapReduce ch4 ディープラーニングフレームワーク とChainerの実装 20180830 implement dqn_platinum_data_meetup_vol1 What's hot (11)
[DLHacks]Fast and Accurate Entity Recognition with Iterated Dilated Convoluti... あなたのScalaを爆速にする7つの方法(日本語版) 深層強化学習の分散化・RNN利用の動向〜R2D2の紹介をもとに〜 Viewers also liked (7)
今さら聞けないHadoop勉強会第3回 セントラルソフト株式会社(20120327) Apache Hadoop & Hive 入門 (マーケティングデータ分析基盤技術勉強会) Devsumi2010-01-Suc3rum-20100218 今さら聞けないHadoop セントラルソフト株式会社(20120119) Similar to 今さら聞けないHadoop勉強会第2回 セントラルソフト株式会社(20120228) (20)
MapReduceによる大規模データを利用した機械学習 CloudSpiral 2014年度 ビッグデータ講義 Data-Intensive Text Processing with MapReduce(Ch1,Ch2) OSC2011 Tokyo/Spring Hadoop入門 Nttr study 20130206_share PFI Christmas seminar 2009 40分でわかるHadoop徹底入門 (Cloudera World Tokyo 2014 講演資料) Hadoop上の多種多様な処理でPigの活きる道 (Hadoop Conferecne Japan 2013 Winter) 今さら聞けないHadoop勉強会第2回 セントラルソフト株式会社(20120228)
- 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. 本日の目的
2つのアルゴリズムを通してアルゴリズムからジョブ
フローにする流れを知ってもらう
今回 アルゴリズム
ジョブフロー
次回予定
MapReduce プログラム
4
- 5. 目次
k-means アルゴリズム
アルゴリズムからジョブフローへ
TF-IDF アルゴリズム
アルゴリズムからジョブフローへ
まとめと次回の予定
5
- 7. k-means アルゴリズムとは
レコードの集合を k 個のよく似た特徴を持つ集合
(クラスタ)に分割(クラスタリング)するアルゴリ
ズム
k = 2 の例 クラスタ レコード
7
- 8. クラスタリングの活用例
機械学習
手書き文字認識
この数字は
「9」
この数字は
何?
9のクラス
7のクラス タ
タ
特徴抽出
「7」と「9」の分類に必要な特徴は?
8
- 9. k-means アルゴリズム概要
k-menas アルゴリズムは「クラスタの割り当て」と
「クラスタの重心を求める」という処理を繰り返し、
最適な重心を求めるアルゴリズム
9
- 10. k-means アルゴリズムの手順(1)
1. 初期化
各レコードに対して、ランダムにクラスタを割り当てる
2. 割り当てたクラスタの重心を求める
3. 各レコードを、各クラスタの重心に一番近いクラスタ
に
割り当て直す
4. クラスタの割り当て変化がある
終了
2 の処理
クラスタの割り当てに変化が無い
10
予め決めた回数クラスタの割り当てを行った
- 11. k-means アルゴリズムの手順(2)
k=3
3. クラスタの再割り当て
1. 初期化(ランダムにクラスタを割り当てる)
2. クラスタの重心を求める
⇒ クラスタの割り当てが変化したので
クラスタの割り当てが変化しなかったので
2 の処理へ
処理終了
11
- 13. ジョブフローを作る際に意識すること
MapReduce は分散処理なので、複雑な処理はでき
ない
複雑な処理は複数回の MapReduce で実現する
本勉強会の説明では1回の MapReduce を1ジョブとす
る
1ジョブの処理はシンプルにする 複雑な処理
ジョブ
2
複雑な ジョブ ジョブ
処理 1 4
ジョブ
3
13
- 14. k-means アルゴリズム
1. 初期化
各レコードに対して、ランダムにクラスタを割り当てる
2. 割り当てたクラスタの重心を求める
3. 各レコードを、各クラスタの重心に一番近いクラスタ
に
割り当て直す
4. クラスタの割り当て変化がある
終了
2 の処理
クラスタの割り当てに変化が無い
14
予め決めた回数クラスタの割り当てを行った
- 17. MapReduce の簡単な復習
MapReduce は以下の3つのフェーズで構成される
入力データの加工を行う「Map」
データの整理と分配を行う「Shuffle & Sort」
同じ key に対する value は一纏めにし、key 順にソートした
データを Reduce を行うノードが受け取る
まとめられたデータに対して処理を行う「Reduce」
それぞれのフェーズの入出力は key と value のペア
17
- 18. 処理1概要
処理
各レコードに対して、ランダムにクラスタを割り当てる
入力(クラスタリングするデータファイル)
key : 入力ファイルの形式による
value : 1レコード
出力(ランダムにクラスタを割り当てられたレコー
ド)
key : 割り当てられたクラスタ番号
value : 1レコード
18
- 19. 処理1検討
<入力形式によって異なるkey , 1レコード>
入力
乱数
処理1
1回の MapReduce で実現できそう
<ランダムに割り当てたクラスタ , 1レコード>
出力
19
- 20. 処理2概要
処理
割り当てられたクラスタの重心を求める
入力(ランダムにクラスタを割り当てられたレコー
ド)
key : クラスタ番号
value : 1レコード
出力(クラスタの重心)
key : クラスタ番号
value : クラスタの重心の位置
20
- 21. 処理2検討
<クラスタ1, A><クラスタ2, B>
<クラスタ1, C>
Map 出力
Shuffle & Sort で同じクラスタは一纏まりになり、
Shuffle & Sort
その纏まりでクラスタの重心が計算できる
<クラスタ1, [A , C]> <クラスタ2, [B]>
1回の MapReduce で実現できそう
Reduce 入力
21
- 22. 処理3概要
処理
各レコードを、一番近いクラスタに割り当て直す
入力1(クラスタの重心)
key : クラスタ番号
value : クラスタの重心の位置
入力2(クラスタリングするデータファイル)
key : <要検討>
value : 1レコード
出力(クラスタを割り当て直したレコード)
key : 割り当てたクラスタ
value : 1レコード
22
- 23. 処理3検討
問題となりそうなところ
2つの形式のデータの入力はどうする?
クラスタの重心のデータはすべての Reduce を行うノー
ドに
配布する必要があるがどうする?
すべてに配布しないと各レコードがどのクラスタに近いのか
比較できない
実現方法を知っていれば1回の MapReduce で
知らなければ MapReduce の回数を増やす
次回、1回の MapReduce で実現する方法を解説
予定
23
- 24. その他次回解説を行う問題
<要検討>にしてあった部分
処理3の終了後、条件によって処理を終了するか、
処理2の処理に戻るか分岐する問題
MapReduce の実装レベルの内容は次回行う(予
定)
24
- 26. TF-IDF アルゴリズムとは
文書中の単語に関する重み付けのアルゴリズム
その単語がその文書でどれくらい特徴的であるかを
単語ごと文書ごとに数値化(tfidf 値)
出てくる文書が少なく、特定の文書での出現回数が多い単語ほ
ど
その文書での数値が大きい
キーワード抽出や Web 検索へ応用できる
例:ある文書中の tfidf 値
“Hadoop” : 0.3
文書 “HDFS” : 0.6
“MapReduce” : 0.5
26 …
- 27. tfidf 値の意味(1)
異なる文書の同じ単語の場合
単語の tfidf 値が高い文書ほど、その単語を特徴として持
つ文書
その単語がよく表れる文書 文書のキーワード
検索
文書A 文書B 文書C
“Hadoop” : 0.3 “Hadoop” : 0.5 “Hadoop” : 0.2
“Hadoop” の検索結果は上位から 文書B , A , C
27
- 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. TF-IDF アルゴリズム(tfidf 値の求め方)(1)
tfidf 値は、単語の出現頻度(tf : term frequency)と
逆文書頻度(idf : inverse document frequency)の積で求め
られる
tfidf 単語の出現頻度 * 逆文書頻度
単語の出現頻度(tf)は以下の式で求められる
文書中の単語の出現回 数
単語の出現頻度
文書中の単語の総数
逆文書頻度(idf)は以下の式で求められる(この式は
ジップの法則に由来する)
文書数
逆文書頻度 log10
単語が出現した文書数
29
- 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.47
30 7
- 32. k-means アルゴリズムとの違い
k-means はアルゴリズムの中でフローが決まってい
た
TF-IDF は計算式だけでフローが無いので、どのよう
な順番で処理を行うのか考えなければならない
32
- 33. ジョブフローを作る際に意識すること(再掲)
MapReduce は分散処理なので、複雑な処理はでき
ない
複雑な処理は複数回の MapReduce で実現する
ここでは1回の MapReduce を1ジョブとする
1ジョブの処理はシンプルにする
複雑な処理
ジョブ
2
複雑な ジョブ ジョブ
処理 1 4
ジョブ
3
33
- 34. MapReduce の簡単な復習(再掲)
MapReduce は以下の3つのフェーズで構成される
入力データの加工を行う「Map」
データの整理と分配を行う「Shuffle & Sort」
同じ key に対する value は一纏めにし、key 順にソートした
データを Reduce を行うノードが受け取る
まとめられたデータに対して処理を行う「Reduce」
それぞれのフェーズの入出力は key と value のペア
34
- 35. アルゴリズムからジョブフローへの流れ
1. 大まかな処理に分ける
2. 処理の入出力を考える
3. データを Reduce からの参照のされ方で分ける
1. 全ての Reduce
2. 全てではないが複数の Reduce
3. 一つの Reduce
4. 処理ごとに簡単な MapReduce で実現できるか検討
し、
必要に応じてジョブを増やす
35
- 36. 1.大まかな処理に分ける
必要なものを考え、大まかな処理に分ける
文書中の単語の出現回数を求める
文書中の単語の総数を求める
式に代入
tfidf 値 して計算
文書数を求める
単語が出現した文書数を求め
る
文書中の単語の出現回 数 文書数
* log10
文書中の単語の総数 単語が出現した文書数
36
- 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. 2.処理の入出力を考える(2)
同様にして考えると以下の表のようになる
処理 key value
式に代入して計算 文書名/単語 tfidf 値
文書中の単語の出現回数を求める 文書名/単語 出現回数
文書中の単語の総数を求める 文書名 単語の総数
文書数を求める <要検討> 文書数
単語が出現した文書数を求める 単語 出現した文書
数
38
- 39. 2.処理の入出力を考える(3)
入力ファイルから文書名を取得する必要があるので、
今回の入力ファイルは説明を簡単にするため以下の
フォーマットを用いる
入力ファイル
タイトル名1@バイトオフセット 文章
タイトル名1@バイトオフセット 文章
タイトル名1@バイトオフセット 文章
タイトル名1@バイトオフセット 文章
タイトル名2@バイトオフセット 文章
タイトル名2@バイトオフセット 文章
タイトル名2@バイトオフセット 文章
…
39
- 40. 3.データを Reduce からの参照のされ方で分ける(1)
「式に代入して計算」の処理の入力を考える
全体で共通の値
以下は計算式と必要な値を求める処理の出力
各文書で共通の値 全て異なる値
各単語で共通の
値
文書中の単語の出現回 数 文書数
* log10
文書中の単語の総数 単語が出現した文書数
処理 key value
文書中の単語の出現回数を求める 文書名/単語 出現回数
文書中の単語の総数を求める 文書名 単語の総数
文書数を求める <要検討> 文書数
単語が出現した文書数を求める 単語 出現した文書
数
40
- 42. ここまでで構築した処理の流れ
文書数を求め 式に代入
る して計算
入力 文書中の単語の 出力
ファイ 出現回数を求める ファイル
ル 値をまとめ 値をまとめ (tfidf
る1 る2 値)
単語が出現した
文書数を求める
文書中の単語の
総数を求める
42
- 44. 「文書数を求める」検討
入力ファイルから簡単な MapReduce で文書数を求
めることはできない
先に「文書のリスト作成」のジョブを作成してから
だと、ワードカウントと同様にして文書数が求めら
れる
文書数を求める
文書数を求め 文書名の
る 文書名を数える
リスト作成
44
- 46. 「単語が出現した文書数を求める」検討
入力ファイルから簡単な MapReduce で単語が出現
した文書数を求めることはできない
先に「文書で出現した単語のリスト」を作成しして
からだと、ワードカウントと同様にして単語が出現
した文書数が求められる
単語が出現した文書数を求める
単語が出現し
た文書数を求 リストから
文書で出現した
める 単語が出現した
単語のリスト
文書数を求める
46
- 48. ジョブフロー
文書数を求める
文書名の 文書名を数 式に代入
リスト作成 える して計算
文書中の単語の 出力
入力 出現回数を求める
ファイ ファイル
ル 値をまとめ 値をまとめ (tfidf
単語が出現した文書数を求める る1 る2 値)
文書で出現し リストから
た 単語が出現した
単語のリスト 文書数を求める
文書中の単語の
総数を求める
48
- 50. まとめ
アルゴリズムからジョブフローにする手順
1. 大まかな処理に分ける
2. 処理の入出力を考える
3. データを Reduce からの参照のされ方で分ける
1. 全ての Reduce
2. 全てではないが複数の Reduce
3. 一つの Reduce
4. 処理ごとに簡単な MapReduce で実現できるか検討し、
必要に応じてジョブを増やす
50
- 51. 次回の予定
MapReduce プログラミング基礎とプログラミングテ
クニック
ワードカウント
k-means
TF-IDF
51