Top Banner
トトトトトトトトトトトトト トトトトトトトトトトト Oisix トトトトトトト 2017 ト 1 ト 30 ト
28

トピックモデルでテキストをクラスタリングしてみた

Feb 08, 2017

Download

Data & Analytics

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: トピックモデルでテキストをクラスタリングしてみた

トピックモデルでテキストをクラスタリングしてみた

Oisix ・機械学習勉強会 2017 年 1 月 30 日

Page 2: トピックモデルでテキストをクラスタリングしてみた

今回のゴール

Page 3: トピックモデルでテキストをクラスタリングしてみた

ニュース記事をいい感じにカテゴライズした

い!

Page 4: トピックモデルでテキストをクラスタリングしてみた

どう達成する?

Page 5: トピックモデルでテキストをクラスタリングしてみた

機械学習を使うってことは

ディープラーニングね!

Page 6: トピックモデルでテキストをクラスタリングしてみた

機械学習はディープラーニングだけじゃ

ない

Page 7: トピックモデルでテキストをクラスタリングしてみた

これ!やってみよう!

Page 8: トピックモデルでテキストをクラスタリングしてみた

トピックモデルとは?

ある文章は複数のトピックを持つと仮定そのトピックを抽出するモデル

Page 9: トピックモデルでテキストをクラスタリングしてみた

文書データ

トピック抽出

政治・経済

スポーツ 科学・技術国会

内閣GDP

アジア民主主義安全保障不景気民主党

野球サッカーゴール優勝

ボールオリンピック練習怪我

人工知能IoT進化

スマホ通信

ノーベル賞法則

自然現象

イメージ

Page 10: トピックモデルでテキストをクラスタリングしてみた

なんだ!単純そうだ!よゆー ( ^∀^ )

じゃなかった・・・・orz

Page 11: トピックモデルでテキストをクラスタリングしてみた

ディリクレ分布・カテゴリ分布・ユニグラムモデル・混合ユニグラムモデル・最尤推定・ベイズ推定・ EMアルゴリズム・変分ベイ

ズ・ギブスサンプリング・ラグランジュの未定乗数

法・特異値分解・潜在意味解析 (LSA) ・潜在ディリク

レ配分法 (LDA)

Page 12: トピックモデルでテキストをクラスタリングしてみた

諦めて勉強します

Page 13: トピックモデルでテキストをクラスタリングしてみた

開発環境

言語 : Python 3.5.2 Anaconda 4.2.0 (x86_64)

ライブラリ : gensim 0.13.4

マシン : MacBook Pro      プロセッサ: 2.9 GHz Intel Core i5      メモリ: 16 GB

Page 14: トピックモデルでテキストをクラスタリングしてみた

ワークフロー

1 .データ(文書群)を用意する

2 .文書を単語に分ける ( 形態素解析 )3 .単語辞書を定義

4 .文書のベクトル化 (bag of words)5 . LDA のモデルに投入

Page 15: トピックモデルでテキストをクラスタリングしてみた

1 .データ(文書群)を用意する

IT 関連・スポーツ記事を 500 ずつ

http://headlines.yahoo.co.jp/rss/list

Page 16: トピックモデルでテキストをクラスタリングしてみた

2 .文書を単語に分ける ( 形態素解析 )オープンソース形態素解析エンジン MeCab を

使う

辞書がかなり重要!

Page 17: トピックモデルでテキストをクラスタリングしてみた

3 .単語辞書を定義import gensimdictionary = gensim.corpora.Dictionary(docs)dictionary.filter_extremes(no_below=1, no_above=0.6)

出力形式word_id word frequency

1382 人工知能 6

1383 人間 4

1384 人 8

・・・

データの前処理

単語の出現が1文書以下のときor

単語が 60% 以上の文書に登場したとき

除外

Page 18: トピックモデルでテキストをクラスタリングしてみた

4 .文書のベクトル化 (bag of words)corpus = [dictionary.doc2bow(doc) for doc in

docs]出力形式

・・・

doc_id word_id frequency

5 1382 5

5 1395 2

5 1402 1

5 1405 3

辞書の単語数次元のベクトルに変換

単語の順序は無視(文脈は加味しない)

Page 19: トピックモデルでテキストをクラスタリングしてみた

5 . LDA のモデルに投入lda = gensim.models.LdaModel(corpus=corpus, id2word=dictionary, num_topics=10)

結果①各トピックの単語分布

結果②各ドキュメントのトピック分布[(0, 0.0011494875610395532), (1, 0.0011495216687281548), (2, 0.0011496757886118457), (3, 0.0011495369772548966), (4, 0.0011494898792352231), (5, 0.0011495350667500301), (6, 0.0011494309427501576), (7, 0.0011495365332948294), (8, 0.0011494727694675608), (9, 0.98965431281286775)]

topic_0: [(' 機能 ', 0.012867980011525922), (' 情報 ', 0.012866562485143618), (' 参加 ', 0.012864776822333324), (' 組織 ', 0.01286474405616749), (' サービス ', 0.0097301626205478289), (' 提供 ', 0.009729611435667529), (' 日立 ', 0.0097275009231823951), (' 情報共有 ', 0.0097274642885800313), (' サイバー攻撃 ', 0.0097273991777577958), (' コミュニティ ', 0.0097272270792)]

Page 20: トピックモデルでテキストをクラスタリングしてみた

LDA ってなに?

Latent Dirichlet Allocation

潜在的ディリクレ配分法

Page 21: トピックモデルでテキストをクラスタリングしてみた

ちょっとイメージだけ・・

LDA は、文書集合の潜在トピック座標単体上への射影であ

る。

Page 22: トピックモデルでテキストをクラスタリングしてみた

music

game play

LDA の幾何学的解釈 ( 3単語しかない世界 )

play game music

文書 A における単語分布

play game music

文書 Bにおける単語分布単語座標単体

各文書は単語座標単体上の座標

基底ベクトルは単語分布

潜在トピック座標単体文書 d

文書を単語空間 (3次元 )からより低次元のトピック空間 (2次元 )へ射影している

分布に偏りがある

1

2

Page 23: トピックモデルでテキストをクラスタリングしてみた

Topic0 Topic1 Topic2 Topic3 Topic4

孫社長 ドル Google 充電 AQUOS PHONE

孫正義 売上高 ロゴ 画面 スマホ発言 増 トップページ Excel ドコモ

孫 違法コピー AI クリック スタンダードTwitter プラチナバン

ド検索 タブ ARROWS

つぶやき サウンド 友達 Word GALAXY S

投資 株 ZOTAC iQON IQ

ソフトバンクグループ

騎手 GeForce GTX 表示 澤活発 宇佐美 不審 虎の巻 坂田

 各トピックの単語分布 (Topic0 〜4)

Page 24: トピックモデルでテキストをクラスタリングしてみた

Topic5 Topic6 Topic7 Topic8 Topic9

投資 アプリ 格闘技 ホームラン 監督ダル 機能 武田 長谷部 氏

ガッツポーズ 技術 K-1 坂本 選手筆記体 バッテリー ニコニコ町会

議チップ 試合

井端 対応 戦国 キャッチャー やる浮気 搭載 SUPP 川島 日本代表

ドーピング 容量 違法コピー 修正 W 杯複利 通信 プロレス K−1 サッカーXPS 募集 プラチナバン

ドZALMAN チーム

  各トピックの単語分布 (Topic5 〜9)

Page 25: トピックモデルでテキストをクラスタリングしてみた

  各ドキュメントのトピック分布Topic Number Distribution

0 0.000301217

1 0.000301208

2 0.818409556

3 0.000301233

4 0.010190877

5 0.000301223

6 0.163988078

7 0.000301223

8 0.005604168

9 0.000301214

Page 26: トピックモデルでテキストをクラスタリングしてみた

クラスタリングできた?

もう1ステップ!

Page 27: トピックモデルでテキストをクラスタリングしてみた

Kmeans でクラスタリング

vec_list = []for n in range(len(corpus)): vec_list.append([lda[corpus[n]][i][1] for i in range(10)])result = KMeans(n_clusters=10).fit_predict(vec_list)

Page 28: トピックモデルでテキストをクラスタリングしてみた

・ AI で合併症リスクを予測、 NTT データがスペインで実証実験を開始・ AI 記者がニュース原稿作成、 NTT データが実証実験・“ IoT 熱”は一段落? 本命は AI か・ AI 記者が気象ニュース原稿を作成する実証実験 --NTT データが実施・ Alphabet ( Google の親会社)、“その他”部門の営業損失 10 億ドルで利益 が予測に届かず・ HTC のハードウェア責任者が Google の「 Daydream 」チームに・グーグル、「 Daydream 」アプリの配信をすべての開発者に開放 etc.

・ 2 年ぶり復帰の鈴木軍が大暴れ みのるがオカダを圧倒 = 新日本・ IWGP王者ヒロム失態…ドラゴン・リー襲撃も返り討ち = 新日本・ 【新日本・後楽園】みのる大胆予告!新日の全ベルト強奪・キングス3連敗 Bリーグ、地元沖縄で新潟に74-82・千葉が川崎を下して初の日本一 = 全日本バスケ・大仁田がカシンに王道マットでの電流爆破マッチ提案 etc.