Document

並列分散処理フレームワークSparkを用いた
TF-IDF計算手法の提案
数理情報科学専攻
福永研究室
西村建郎
目次
 研究背景
 並列処理
 テキストマイニング
 研究概要
 TF-IDF計算手法(既存のライブラリ
を用いた手法)
 TF-IDF計算手法(提案手法)
 スケーラビリティ比較
 結論・まとめ
研究背景(並列処理)
 並列処理
 1つの処理を複数に分割して同時に行うこ
と(逐次処理)
 通信等によるオーバーヘッドがかかる
時間
1
:並列処理によるオーバーヘッド
:計算時間
1/2
1/4
逐次処理
並列処理
並列処理
(2分割)
(4分割)
研究背景(並列処理)
 並列処理の方法
 マルチコア
• コアと呼ばれる演算装置を複数個持つCPU
サーバ
CPU
コア
コア
コア
コア
 クラスタ
• 複数のサーバを連結し、全体で1台のサーバで
あるかのように振舞うシステム
クラスタ
サーバ
サーバ
サーバ
サーバ
研究背景(並列処理)
 Spark
 現在最も注目を浴びている並列分散処理
フレームワーク
• 膨大なデータに対して高速な並列分散処理をす
るための仕組みを提供するソフトウェア
• 高速かつ汎用的な処理を行うために開発された
• 有名なIT企業が中心となって現在も発展中
 Java,Python,Scala等の言語を用いてシン
グルスレッドのプログラミングと同じ感覚で
並列分散処理を実装可能
 機械学習用ライブラリMLlibが含まれている
研究背景(並列処理)
 Sparkで用いるクラスタ
 マスターサーバ(1台)
•
アプリケーションの管理・制御
•
並列処理部分をスレーブサーバのタスクに変換
し、タスクをスレーブサーバに割り当てる
 スレーブサーバ(1台~数1,000台)
•
割り当てられたタスクの実行
マスターサーバ
スレーブサーバ
スレーブサーバ
スレーブサーバ
研究背景(テキストマイニング)
 大量のテキストデータから、価値ある情報の
抽出を行うための分析
 テキストから特徴ベクトルへの変換がよく行われる
 特徴ベクトルによってテキスト間の距離を定義できる
⇒クラスタリング等への応用
 テキストデータに対して最も基本的な特徴ベクトルが
TF(term frequency)ベクトル
テキスト(例)
大量のテキスト
Hello spark world.
Good bye spark.
分析手法(例)
クラスタリング
潜在意味解析
機械学習
価値ある情報の抽出
単語抽出
[hello,spark,world,good,bye,spark]
特徴ベクトル
(TFベクトル)
1:hello
1
2:spark
2
3:world
1
4:word
0
5:good
1
6:bye
1
7:text
0
⁞
研究背景(テキストマイニング)
 DF(document frequency)

ある単語が含まれるテキスト数
テキスト1
テキスト2
テキスト3
テキスト4
TFベクトル
TFベクトル
TFベクトル
TFベクトル
各単語に対する
DF
1:hello
0
8
4
0
2
2:spark
2
1
0
2
3
3:world
2
1
2
1
4
4:word
0
0
3
0
1
⁞
⁞
⁞
⁞
⁞
研究背景(テキストマイニング)
 DF(document frequency)

ある単語が含まれるテキスト数
テキスト1
テキスト2
テキスト3
テキスト4
TFベクトル
TFベクトル
TFベクトル
TFベクトル
各単語に対する
DF
1:hello
0
8
4
0
2
2:spark
2
1
0
2
3
3:world
2
1
2
1
4
4:word
0
0
3
0
1
⁞
⁞
⁞
⁞
⁞
研究背景(テキストマイニング)
 TF-IDFベクトル


TFベクトルに重み(IDF:inverse document
frequency)を掛け合わせた特徴ベクトル
TFベクトルよりもテキストの特徴を強調する
𝑇:総テキスト数
TF
ベクトル
1
2
𝑇𝐹𝑤𝑡 : テキスト𝑡内で単語𝑤の出現した回数
1
𝐷𝐹𝑤 : 全テキストの中で、単語𝑤が含まれるテキスト数
0
𝑇
𝐼𝐷𝐹𝑤 = 𝑙𝑜𝑔
𝐷𝐹𝑤
𝑇𝐹𝐼𝐷𝐹𝑤𝑡 = 𝑇𝐹𝑤𝑡 𝐼𝐷𝐹𝑤
 重み𝐼𝐷𝐹𝑤 は、多くのテキストで現れる単語では小さくな
り、少ないテキストでしか現れない単語では大きくなる。
𝑇𝐹𝐼𝐷𝐹𝑤𝑡 が大きい⇒テキストの内容を表す重要な単語
TF-IDF
ベクトル
IDF
1
1
0
⁞
×
=
研究背景(研究概要)
 SparkのMLlib(ライブラリ)を用いると、簡単に
テキストをTF-IDFベクトルに変換できる

長所
• 高速に動作する

短所
• 正確さを犠牲にしている
• 分析の幅が狭くなる
 短所を改善し、かつ実行時間の増加を最小限
にとどめた計算手法を提案し、実装した
MLlibを用いたTF-IDF計算
 単語のリストからTFベクトルを生成

ベクトルの次元数Nを指定

ハッシュ関数により各単語を1~Nの整数に対応さ
せる

ハッシュ関数の特徴
TFベクトル
•
与えられた単語から1~Nの値を生成する
•
同じ単語からは必ず同じ値が生成される
1:hello
1
•
出力値の値から単語を求めることは出来ない
2:spark
2
3:world
1
単語リスト
4:word
0
[hello,spark,world,good,bye,spark]
5:good
1
6:bye
1
7:text
0
⁞
⁞
N:the
0
各単語
ハッシュ関数適用
1~N
(例)hash(“hello”)=1
MLlibを用いたTF-IDF計算
 TFベクトル計算
大量のテキスト
ファイル①
大量のテキストファイル
大量のテキスト
ファイル②
単語抽出
単語抽出
大量のテキスト
ファイル③
単語抽出
スレーブサーバ1
スレーブサーバ2
スレーブサーバ3
各テキストの単語リスト
各テキストの単語リスト
各テキストの単語リスト
リスト
・・・
リスト
リスト
・・・
リスト
リスト
・・・
TFベクトル
TFベクトル
TFベクトル
・・・
・・・
・・・
1→
2→
・
・
・
N→
リスト
マスターサーバ
MLlibを用いたTF-IDF計算
 TFベクトル計算
1つのテキストに対応
スレーブサーバ1
スレーブサーバ2
スレーブサーバ3
各テキストの単語リスト
各テキストの単語リスト
各テキストの単語リスト
リスト
・・・
リスト
リスト
・・・
リスト
リスト
・・・
TFベクトル
TFベクトル
TFベクトル
・・・
・・・
・・・
1→
2→
・
・
・
N→
リスト
マスターサーバ
MLlibを用いたTF-IDF計算
 IDF計算
スレーブサーバ1
スレーブサーバ2
スレーブサーバ3
TFベクトル
TFベクトル
TFベクトル
・・・
・・・
・・・
1→
2→
・
・
・
N→
マスターサーバ
MLlibを用いたTF-IDF計算
 IDF計算
スレーブサーバ1
スレーブサーバ2
スレーブサーバ3
TFベクトル
TFベクトル
TFベクトル
・・・
・・・
・・・
1→
2→
・
・
・
N→
マスターサーバ
DF
IDF
MLlibを用いたTF-IDF計算
 TF-IDF計算
各単語に対する
IDF
スレーブサーバ1
スレーブサーバ2
スレーブサーバ3
マスターサーバ
TFベクトル
TFベクトル
TFベクトル
各単語に対する
IDF
・・・
・・・
・・・
1→
2→
・
・
・
N→
MLlibを用いたTF-IDF計算
 TF-IDF計算
スレーブサーバ1
スレーブサーバ2
スレーブサーバ3
マスターサーバ
TF-IDFベクトル
TF-IDFベクトル
TF-IDFベクトル
各単語に対する
IDF
・・・
・・・
・・・
1→
2→
・
・
・
N→
MLlibを用いた手法の短所
 各次元がどの単語に対応しているのかを知る
ことが出来ない
⇒分析方法が制限される(特徴ベクトルから頻出単語・
重要単語の抽出が出来ない)
TFベクトル
1
1
2
0
3
8
4
0
5
1
⁞
⁞
N
2
 異なる単語が同じ次元に対応し、衝突する可
能性がある
TFベクトル
1
2
3
⇒正確さを要求する処理には使用できない
4
word1
ハッシュ関数適用
hash(word1) = hash(word2)
この頻出単語
は何か
5
⁞
word2
N
提案手法
大量のテキストファイル
 DF計算
大量のテキスト
ファイル①
大量のテキスト
ファイル②
単語抽出
単語抽出
大量のテキスト
ファイル③
単語抽出
スレーブサーバ1
スレーブサーバ2
スレーブサーバ3
各テキストの単語リスト
各テキストの単語リスト
各テキストの単語リスト
リスト
・・・
リスト
リスト
各リストから
重複を除く
重複
除いた
リスト
・・・
重複
除いた
リスト
・・・
リスト
リスト
各リストから
重複を除く
重複
除いた
リスト
・・・
重複
除いた
リスト
・・・
マスターサーバ
リスト
各リストから
重複を除く
重複
除いた
リスト
・・・
重複
除いた
リスト
各単語に対するDF
集約
単語
DF
word1
3
word2
7
⁞
⁞
提案手法
 各単語に通し番号を付与し単語辞書生成
スレーブサーバ1
スレーブサーバ2
スレーブサーバ3
マスターサーバ
各単語に対するDF
単語
DF
word1
3
word2
7
⁞
⁞
単語辞書
各スレーブサーバにコピー
単語
DF
通し番号
単語
DF
通し番号
単語
DF
通し番号
word1
3
1
word1
3
1
word1
3
1
word2
7
2
word2
7
2
word2
7
2
⁞
⁞
⁞
⁞
⁞
⁞
⁞
⁞
⁞
単語
DF
通し番号
word1
3
1
word2
7
2
⁞
⁞
⁞
提案手法
 単語リストと単語辞書からTF-IDFベクトル生成
スレーブサーバ1
スレーブサーバ2
スレーブサーバ3
各テキストの単語リスト
各テキストの単語リスト
各テキストの単語リスト
リスト
・・・
リスト
リスト
単語辞書
単語
DF
通し番号
・・・
リスト
リスト
単語辞書
単語
DF
通し番号
・・・
単語辞書
単語
DF
・
・
・
N→
通し番号
TF-IDFベクトル
TF-IDFベクトル
TF-IDFベクトル
・・・
・・・
・・・
1→
2→
リスト
マスターサーバ
スケーラビリティの比較
 用いたテキストデータ

エンロンコーパス
•
テキスト数:約500,000
•
言語:英語
•
総データ量:1.35GB
 評価方法
 2つのアプリケーションを用意し、スレーブサーバ1
~6台に対して、それぞれ100回ずつ実行し、平均
実行時間を比較する
 アプリケーション(仕様)
1.
テキストデータをスレーブサーバに分散して格納しておく
2.
アプリケーション実行開始
3.
すべてのテキストをTF-IDFベクトルに変換し、スレーブサ
ーバに格納する
4.
アプリケーション終了
結果・考察
 スケーラビリティ
70
60
50
平均実行時間
(秒)
40
30
20
10
0
1
2
3
4
スレーブサーバの数(台)
MLlib
提案手法
5
6
まとめ
 Sparkを用いたTF-IDF計算について
 MLlibを用いた手法
•
ハッシュ関数を用いて、正確さを犠牲に高速化を実現
する
•
TF-IDFベクトルから重要単語を抽出することが出来
ない
•
テキスト間の距離による分析にしか使えない
 提案手法
•
初めにDFを計算し、単語辞書を生成することにより、
正確な分析が可能
•
単語辞書を参照することにより、TF-IDFベクトルから
重要単語の抽出が可能(分析の幅が広がる)
•
スレーブサーバの台数を増やすことでMLlibを用いた
手法の速度に追いつく可能性がある
終わりです
~ご清聴ありがとうございました~