Jubatus
Hackathon
2016.11.12
発言小町からのプロファイリング
分析目的
 発言小町を発言者カットで見てみて発言者のペルソナを分析してみたい
 可能であれば発言者のペルソナの時間軸上での変遷を見てみたい
入力データ
 発言小町
 User ID
 User Name
 Date
 Title
 Url
 Topic Id
 Group
 Message
 Votes
 Responses
 Face
 n_response
 n_favorite
 発言小町からとってきたデータ
 とりあえず、約10,500件
k-Meansによるクラスターの頻度分布
6 48.78154
2 22.20186
3 13.48933
0 7.709726
7 3.493638
1 2.792754
5 1.52038
4 0.010783
クラスターの解釈
クラスター
番号 6 2 3 4
の 1.19 4.78 2.77 4.72
こと 0.71 1.22 1.45 5.66
私 0.66 1.27 5.31 2.79
よう 0.58 1.19 1.09 1.99
方 0.53 0.80 0.65 0.85
ない 0.46 0.97 1.00 1.37
人 0.38 0.80 1.17 1.48
何 0.30 0.55 0.67 0.76
ん 0.29 0.45 0.68 0.60
分析設計
 発言小町のデータのMessageからBag of wordsを作成
 Bag of wordsを元にクラスタリング
 User IDごとに各発言の分類されたクラスタIDを集計
 クラスタごとの合計を総発言数で除してスコアを作成
 これをそのユーザのペルソナとする
データ加工
 文章をMeCabで形態素解析して単語を抽出
 単語は品詞として名詞、形容詞、副詞を分析対象とする
 MeCabで特殊扱いされている*を表層とするものは解析対象から外す
 同様にが、の、に、をのような単語も分析対象としない
 形態素解析後
 30000変数ぐらい
 変数数を削減
 出現頻度のあまりにも少なすぎる変数や外れ値と考えられる記号などが単独で
抽出された変数を削除するなどクレンジングを実施
 削減後7000位に
クラスタリング
 Jubatusでクラスタリングを実
施する
 クラスタリング手法としては
DBSCAN(Density-Based Spatial
Clustering Applications with
Noise)を使用する
 本データの場合、クラスタ数が
不明、加えてクラスタとして超
球面を仮定するのは妥当ではな
いため、k-Means法の使用は妥
当ではない
Jubatusに入れてみるテスト
 jubaclustering --configpath
/opt/jubatus/share/jubatus/example/config/clustering/dbscan.json
 ハイパーパラメータはExampleそのもので
 df = jubaClient.push(batch)
 res = jubaClient.get_core_members()
Error!
 msgpackrpc.error.RPCError: b'clustering is not performed yet‘
What?
Use the source,
Luke!
 Jubatus coreのソース読む
 get_clusters綾しい
 If (clusters.empty()) {
 throw
JUBATUS_EXCEPTION(not_perfo
rmed());
 }
 なぜに空っぽ!ガンガンガン!
 ドキュメントがあるわけでもな
く謎
ハイパーパラメー
タを洗ってみる
 eps : 2.0,
 min_core_point : 3
 Density-Based Spatial Clustering
Applications with Noise
 EpsとMinPtsの二つのハイパーパラ
メータ
 とりあえず怪しくなさそう
困った

発言小町からのプロファイリング