100
テキストマイニング講習会 松村真宏 大阪大学大学院経済学研究科 [email protected] http://mtmr.jp/

テキストマイニング講習会本日のアジェンダ •「分析」そのものは各種ソフトウェアを使えば誰でも 簡単にできますが,分析結果を読み解くためには分析

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

テキストマイニング講習会

松村真宏大阪大学大学院経済学研究科[email protected]://mtmr.jp/

簡単な自己紹介

• 1975年東大阪市生まれの瓢箪山育ち• 八尾高、阪大、東大院をへて博士(工学)• 現在は大阪大学大学院経済学研究科の准教授• 専門は人の言動や社会現象の分析とモデル化• データマイニング、テキストマイニング、   フィールドマイニング

2

本日のアジェンダ

• 「分析」そのものは各種ソフトウェアを使えば誰でも簡単にできますが,分析結果を読み解くためには分析手法の理論的背景を理解する必要があります

• 本講習では,まずテキストマイニングの基本的な考え方と基礎的な理論を説明します(pp. 4~26)

• その後に実践的知識の習得を目指して、TTMを使った分析を各自で行ってもらいます(pp. 27~47)

• 時間があれば分析事例を紹介します(pp. 48~98)• まとめと宣伝(pp. 99~100)

3

テキストマイニングの登場

• テキストデータのような定性データは,大量のデータを分析することで安定した傾向が見いだせますが,人手で大量のテキストデータを分析することは現実的にはほとんど不可能でした

• テキストマイニングの登場によって,大量のデータを統一的な視点・基準から少ない労力で分析することが可能になりました

• テキストマイニングは,世の中で流行っている話題や,人々のニーズや不満を定量的に把握する手段として徐々に使われ始めています

4

テキストマイニングの登場した背景

• テキストマイニングが登場したのは,以下の条件が出そろった1990年代後半です

- 計算機・ストレージの高性能化・低価格化- さまざまなテキストデータの蓄積- 自然言語処理研究の進展- 機械学習研究の進展

5

テキストマイニングの応用事例

• インターネットはクチコミの豊かな情報源- 評判情報,ユーザ属性の推定        (性別,職業,家族構成,居住地域,年代…)

- マーケティングの効果測定

• アンケートの自由記述回答文- 回答の特徴や傾向を把握する

• 経済指標の予測• 著者や執筆時期の推定

6

商用ソフトウェア(の一部)

• Text Mining for Clementine (SPSS)• IBM SPSS Text Analytics for Surveys (SPSS)• Text Mining Studio (数理システム)• TRUE TELLERテキストマイニング(野村総研)• ConceptBase (JustSystems)• KeyGraph (構造計画研究所)他にもいろいろありますが,           どれもそこそこのお値段がします…

7

フリーソフトウェア

• TTM (by 松村@大阪大学)• KH Coder (by 樋口耕一氏@立命館大学)• RMeCab, RCaboCha (by 石田基広氏@徳島大学)• Polaris (KeyGraph) (by 岡崎直観氏@東京大学)

自作してる人はたくさんいるのに,        公開している人はあまりいません…

8

テキストマイニングの主な基盤技術

• 自然言語処理- 形態素解析,構文解析

• 統計解析- 多変量解析,仮説検定

• データマイニング- 分類器,予測器

9

テキストマイニングの内側

• テキストマイニングの処理は,         「前処理」と「後処理」に大別できます

• 前処理(テキストデータならではの処理)- 語の切り出しと集計- これが面倒…

• 後処理(多変量解析やデータマイニングと同じ処理)- 集計データの統計処理- 従来の手法が流用できます!

10

テキストデータの特徴 (1/4)

• 語彙や表現の揺れ(漢字・仮名・カタカナ・大文字と小文字・全角と半角・誤字・新語)が多い

- 「内閣総理大臣」と「首相」- 「打ち合わせ」と「打合せ」- 「インタフェース」と「インタフェイス」- 「税金」と「血税」- 「スナナレ」「もしドラ」- 「ドコモ」と「DoCoMo」と「docomo」

11

テキストデータの特徴 (2/4)

• 日本語は文法も曖昧- クロールで泳いでいる彼女を見た- 望遠鏡で泳いでいる彼女を見た- プールで泳いでいる彼女を見た- 先生とお酒を飲む- ビールとお酒を飲む

12

テキストデータの特徴 (3/4)

• 語の境界に曖昧性がある- 「そこではきものをぬげ」

‣ そこで/はきもの/を/ぬげ

‣ そこでは/きもの/を/ぬげ

• うなぎ文- 「ぼくはウナギだ」

• こんにゃく文- 「こんにゃくは太らない」

13

テキストデータの特徴 (4/4)

• 意味の文脈依存性- 「学校で遊ぶ」

‣ このときの「学校」は場所としての学校

- 「学校が談話を発表した」

‣ このときの「学校」は法人的側面を表す

14

形態素解析

• 形態素解析は,自然言語で書かれた文章を語(形態素)に分割する処理のことです

• Chasen (奈良先端大),MeCab (工藤拓氏),JUMAN (京都大学) が公開しているオープンソースのソフトウェアが有名です

• 新聞記事を対象とした場合の精度は99%以上ありますが,話し言葉を対象とすると精度は下がります(が十分実用に耐える精度です)

• 常に新しい言葉が生まれているので,未知語(辞書に載っていない語)問題はなかなかやっかいです

15

形態素解析の実行例

• 「親譲りの無鉄砲で子供の時から損ばかりしている。」を MeCab にかけた結果です

親譲り 名詞,一般,*,*,*,*,親譲り,オヤユズリ,オヤユズリの 助詞,連体化,*,*,*,*,の,ノ,ノ無鉄砲 名詞,一般,*,*,*,*,無鉄砲,ムテッポウ,ムテッポーで 助詞,格助詞,一般,*,*,*,で,デ,デ子供 名詞,一般,*,*,*,*,子供,コドモ,コドモの 助詞,連体化,*,*,*,*,の,ノ,ノ時 名詞,非自立,副詞可能,*,*,*,時,トキ,トキから 助詞,格助詞,一般,*,*,*,から,カラ,カラ損 名詞,一般,*,*,*,*,損,ソン,ソンばかり 助詞,副助詞,*,*,*,*,ばかり,バカリ,バカリし 動詞,自立,*,*,サ変・スル,連用形,する,シ,シて 助詞,接続助詞,*,*,*,*,て,テ,テいる 動詞,非自立,*,*,一段,基本形,いる,イル,イル。 記号,句点,*,*,*,*,。,。,。

16

解析結果の比較

• 形態素解析器が変われば結果も変わります.左から MeCab,Chasen,JUMAN の出力結果です

親譲り 名詞-一般の 助詞-連体化無鉄砲 名詞-形容動詞語幹で 助動詞子供 名詞-一般の 助詞-連体化時 名詞-非自立から 助詞-格助詞損 名詞-一般ばかり 助詞-副助詞し 動詞-自立て 助詞-接続助詞いる 動詞-非自立。 記号-句点

親譲り 名詞 普通名詞の 助詞 格助詞無鉄砲で 形容詞 ナ形容詞子供 名詞 普通名詞の 助詞 接続助詞時 名詞 副詞的名詞から 助詞 格助詞損 形容詞 ナ形容詞ばかり 助詞 副助詞して 動詞 サ変動詞いる 接尾辞 動詞性接尾辞。 特殊 句点

親譲り 名詞,一般の 助詞,連体化無鉄砲 名詞,一般で 助詞,格助詞子供 名詞,一般の 助詞,連体化時 名詞,非自立から 助詞,格助詞損 名詞,一般ばかり 助詞,副助詞し 動詞,自立て 助詞,接続助詞いる 動詞,非自立。 記号,句点

MeCab ChaSen JUMAN

17

形態素解析の仕組み

• 語の使われやすさを表す「生起コスト」と,語と語のつながりやすさを表す「連結コスト」からなる辞書を用いて,生起コストと連結コストの総和が最も小さくなるような語の区切りを,動的計画法の一種であるViterbiアルゴリズムで見つけています

• コストの設定が精度と直結しています.JUMAN はコストを手動で付与,ChaSen と MeCab は学習用データから自動的に学習させています

• MeCab の ver.0.90 以降では異なるアルゴリズム(条件付き確率場)が採用されています

18

コストは 120

コストは 225

形態素解析の動作例

文頭

譲り

親譲り

の180

10

10

110 90

100

510

10

19

※値は適当です

機能語と内容語

• 語は,助詞や助動詞といった「機能語」と,名詞,形容詞,動詞,副詞といった「内容語」に大別できます

• 機能語は,それ単体では意味を持たない語なので,文章の内容を理解する際の助けにはなりません

• 内容語は,名称,性質,動作,状況など,文章の内容の一部を表しているので,内容を理解する際の助けになります.しかし,名詞と結びつかないと意味が特定できない場合が多いです

• したがって,名詞は必須で,分析の目的に応じて形容詞,副詞,動詞を用いることが多いです

20

未知語について

• 形態素解析器の辞書に登録されていない語は「未知語」として出力されます

• 未知語の品詞推定は研究レベルでは実装されていますが,まだ実用レベルには達していません

• 未知語は,単なるゴミであることも多いのですが,世の中の流行を反映した「新しい語」(例えば「婚活」や「H1N1」など)が含まれていることもあるので油断なりません

• なので,取り敢えず未知語は分析対象に加えて,不便があれば臨機応変に対応することが多いです

21

構文解析

• 構文解析は,語と語の係り受け関係を分析する処理のことです

• CaboCha (工藤拓氏),KNP (京都大学) が公開しているオープンソースのソフトウェアが有名です

• 新聞記事を対象とした場合でも精度は80%くらいなので,けっこう間違いも含まれてしまいますが,確からしい結果だけを利用すれば十分使えます

• 特定の語と関係する語(例えば,「美味しい」の係り受け先など)を見たいときなど,用途を限定した場合にも十分使えます

22

構文解析の実行結果

• 「親譲りの無鉄砲で子供の時から損ばかりしている。」を CaboCha と KNP にかけた結果は以下のようになります

親譲りの──┐  無鉄砲で──┤ 子供の──┐   │  時から──┤  損ばかり──┤  している。

親譲りの-D 無鉄砲で-------D 子供の-D ¦ 時から---D 損ばかり-D している。

CaboCha KNP

23

構文解析の仕組み

• 構文解析は,文節 Bi が文節 Bj に掛かることを Di = j を表すと,文節列 B={Bi} (i=1,2,…n) に対する係り受け列 D={Dj} (j=1,2,…n-1) の条件付き確率 P(D|B) を最大化する係り受けパターン Dbest を見つける処理になります

• ここで,係り受け関係が互いに独立だとすると,P(D|B) は以下の式で表されます

• P(Di=j|fji) は,文節 Bi と Bj が言語的な素性集合 fij(文節間の主辞の距離,品詞,語形の活用形,句読点など)をもつときに Bi が Bj に係る確率で,大量のコーパスから自動的に学習されます.また,D は,文末以外の各文節は後方に係り受け先を必ず持つ,係り受け先は交差しない,ことを満たすと仮定しています

Dbest = argmaxDP (D|B)

P (D|B) =n−1�

i=1

P (Di = j|fij)

24

キーワードの抽出

• 語の出現分布はZipsの法則(出現頻度がk番目に大きい要素が全体に占める割合が1/kに比例するという経験則)に従うことが知られています

25

キーワードの抽出

• 高頻度語には一般的な語も多いので,相対的な頻度の高さを加味してキーワードとすることが多いです

• TFIDFや相互情報量やジャッカード係数といった指標がよく用いられます

• TFIDFは以下の指標で求まります

• 「坊っちゃん」に登場する「赤シャツ」は,出現頻度TF=168,出現件数DF=91,総データ件数N=470なので、TFIDF=566になります

26

TFIDF (w) = TF (w)�

1 + logD

DF (w)

の紹介

• 「形態素解析は分かった,構文解析も分かった,それで,どうすればいいの?」という皆さんの心の声に答えるために  を作りました

•   はテキストデータを形態素解析器,構文解析器にかけて,その分析結果を読み込んで集計し,CSVファイルを出力するフリーソフトです

•   はテキストマイニングの前処理に特化していますので,ここまでしか行いません.後処理は,みなさんの使い慣れたソフトウェアに読み込ませて,好きなように分析してもらいたいと思っています

27

スクリーンショット (1/2)

28

スクリーンショット (2/2)

29

の特徴 (1/4)

• CSV 形式の「タグ付きテキスト」を読み込みます

30

• キーワード,同義語,不要語を指定できます

の特徴 (2/4)

31

の特徴 (3/4)

• 品詞,係り受け解析の設定もできます

32

の特徴 (4/4)

• 6種類の出力ファイルを提供します

33

のインストール

• http://mtmr.jp/ttm/ から ttm.exe をダウンロードするだけで  本体のインストールは終わりです

• 形態素解析を実行するためのソフトウェア MeCabを別途インストールする必要があります(構文解析を行うときは CaboCha もインストールします).詳細は http://mtmr.jp/ttm/ をご覧ください

34

サンプルデータ

• 「あなたにとって『Yahoo! 知恵袋とはどんな場ですか.自由にお書きください」に対する自由記述文(回答者数 4060名)のうち,ランダムサンプリングした1000名分のデータを分析対象とします(http://mtmr.jp/ttm/ からダウンロードできます)

35

sample_chiebukuro.csv

タグの内訳は1…男性・短期利用群(304名)2…男性・長期利用群(172名)3…女性・短期利用群(395名)4…女性・長期利用群(129名)

36

分析条件

• 次の条件で  で sample_chiebukuro.csv を分析してみましょう

- 出力する品詞は「名詞,形容詞,動詞,副詞」- オプションファイルは「設定せず」- 出現頻度/出現件数の最小値は「10」- 係り受け解析は「なし」

37

sample_chiebukuro_ttm1.csv

38

語のタグ別集計(出現頻度)

sample_chiebukuro_ttm2.csv

39

語のタグ別集計(出現件数)

sample_chiebukuro_ttm3.csv

40

語×タグのクロス集計 (出現頻度)

sample_chiebukuro_ttm4.csv

41

語×タグのクロス集計 (出現件数)

sample_chiebukuro_ttm5.csv

42

語×語のクロス集計  (出現件数)

sample_chiebukuro_ttm6.csv

43

テキスト×語のクロス集計(出現件数)

オプションファイルの設定

44

抽出された126語

• 名詞(61語)                          質問 場 回答 人 自分 場所 知識 知恵袋 意見 情報 便利 気軽 疑問 暇つぶし 非常 利用 答え 解決 他 参考 他人 それ 私 知恵 勉強 考え 役 悩み 気 何 検索 考え方 相談 サイト 意味 必要 掲示板 コミュニケーション 簡単 ここ 身近 削除 解答 活用 感じ 参加 誰 好き 問題 不快 投稿 生活 友達 残念 存在 心 アドバイス 誰か みんな 頼り 変 大変 ジャンル 確認 趣味 気持ち

• 複合名詞(7語)                        質問|者 回答|者 情報|源 人|たち 情報|交換 貢献|度 情報|収集

• 動詞(48語)                          する ある 思う なる 知る 教える いる 得る 聞ける 聞く 見る 困る 答える 助かる 調べる 持つ 言う もらえる 使う いう 考える 感じる 助ける 違う 選ぶ たつ 出る 書く 減る 増える 荒らす 悩む 高める 来る 言える ふざける 知れる なくなる 励ます

• 形容詞(14語)                         多い ない 楽しい いい 嬉しい 面白い ありがたい すごい 少ない 詳しい うれしい 新しい 無い 早い

• 同義語(5語)                         できる わかる よい いろいろ 役に立つ

45

「役に立つ」の係り受けは?

46

原文に立ち返ってみます

47

応用事例~文学作品の執筆時期の分析~

出典:「テキストデータの統計科学入門」(金明哲,岩波書店)

執筆時期の推定

• 日本古典文学の最高峰といわれている「源氏物語」には,複数著者説や,巻序の順序と執筆順序について疑問が呈されている

• 文章の特徴の時系列変化を捉えることで,これらの仮説を検証することができる

• テキストの内容を分析する場合には名詞や形容詞が重要であるが,執筆者の特徴を捉えるには助詞や読点の打ち方が重要になる(文章の内容やジャンルの影響が小さいから)

49

芥川龍之介

• 芥川龍之介の明治時代の作品かつ1000文字以上の作品の250編を分析してみるとどうなるか?

50

主成分分析

51

第1主成分得点の年代別変化

52

第1主成分の項目別グラフ

53

!"#$%

!"#&%

!"#'%

!"#(%

"%

"#(%

"#'%

"#&%

"#$%

が)格助詞

読点

て)接続助詞

と)接続助詞

まで)副助詞

から)格助詞

ながら)接続助詞

で)格助詞

から)接続助詞

が)接続助詞

ば)接続助詞

ども)接続助詞

など)副助詞

より)格助詞

を)格助詞

の)格助詞

も)係助詞

しも)副助詞

は)係助詞

に)格助詞

が(格助詞)の使用率の年代別変化

54

!"

!#!$"

!#!%"

!#!&"

!#!'"

!#("

!#($"

("

(("

$("

)("

%("

*("

&("

+("

'("

,("

(!("

((("

($("

()("

(%("

(*("

(&("

(+("

('("

(,("

$!("

$(("

$$("

$)("

$%("

が!格助詞

に(格助詞)の使用率の年代別変化

55

!"

!#!$"

!#!%"

!#!&"

!#!'"

!#("

!#($"

!#(%"

!#(&"

!#('"

("

(("

$("

)("

%("

*("

&("

+("

'("

,("

(!("

((("

($("

()("

(%("

(*("

(&("

(+("

('("

(,("

$!("

$(("

$$("

$)("

$%("

に!格助詞

回帰分析

lm(formula = y ~ 読点 + は_係助詞 + に_格助詞 + が_格助詞 + の.準体助詞 + か_係助詞 + ば_接続助詞 + や_係助詞 + で_接続助詞 + へ_格助詞 + まで_副助詞 + ばかり_副助詞 + が_接続助詞 + から_接続助詞 + とも_接続助詞 + さへ_副助詞 + ど_接続助詞, data = akuta)

Residual standard error: 1.822 on 232 degrees of freedom Multiple R-squared: 0.7685, Adjusted R-squared: 0.7516   F-statistic: 45.31 on 17 and 232 DF, p-value: < 2.2e-16

56

  (Intercept) 1917.6   読点 -10.5  は_係助詞 32.5  に_格助詞 28.7  が_格助詞 -50.2   の.準体助詞 -31.4  か_係助詞 58.6  ば_接続助詞 32.3    や_係助詞 42.4  で_接続助詞 58.5  へ_格助詞 72.2  まで_副助詞 -120.0  ばかり_副助詞 -230.3  が_接続助詞 122.7  から_接続助詞 132.2  とも_接続助詞 -283.8  さへ_副助詞 -255.1  ど_接続助詞 -175.4

応用事例~経済市場の動向の分析~

出典:「人工市場とテキストマイニングの融合による市場分析」(和泉潔et al., 人工知能学会論文誌 22(4): 397-404)

経済市場の動向

• 金融市場のトレーダー達は,市場に影響を及ぼす多様な情報を取捨選択し,現在の市場の状況を分析・予測している

• テキスト情報を分析することで,市場動向を予測できる可能性がある

58

国際金融情報センター

• 市場解説記事(毎週発行)• 1000~1500文字の分量で,その週の金融市場の関連したと思われる経済ニュースをまとめたテキスト

• 指標の発表内容など実際に起きた出来事だけでなく,当時の市場の観測に関する情報も記述されている

59

形態素解析

60

キーワード変換ルール

61

トークン化

62

ドキュメント特徴量の抽出

63

予測

• 1992年から1995年のテキストデータをコーディング• 1992年から1994年の3年間(156週)のデータから予測モデル(決定木)を作成

• 1995年の指標を予測• 予測指標は14カテゴリ(景気,物価,金利…)の動向(0, ±1, ±2, ±3 の7段階)

64

決定木

65

予測精度

66

応用事例オンラインコミュニティの分析

出典:松村らの過去の研究

mixiのユーザ像

68

mixiのユーザ像

69

2ちゃんねるが盛り上がるメカニズム

70

2ちゃんねるが盛り上がるメカニズム

71

「幸せ」言及マップ

72

「幸せ」言及マップ

73

74

ブログ考現学

75

ブログ考現学

76

ブログ考現学

77

Rを使った分析事例

を使ってみます

• 統計解析のフリーソフトウェアです• いろんな人が便利な関数やパッケージを公開している(2009年6月17日現在,CRANには1849ものパッケージが登録されています)ので,コレ一つで大抵のことはできます

• 形態素解析や構文解析を行うパッケージもあります• データマイニングのパッケージもあります• たくさんの書籍が出版されているので,マニュアルも充実しています

79

R用入力ファイルを作ります

• まずTTMで前処理をします

- 出現件数の最小値は50(言及率が5%未満の語をカット)

- 同義語リストはスライド〈37〉と同じ

- 不要語リストは「する」「できる」「ある」「なる」「いる」「場」「場所」「知恵袋」

• テキスト×語のクロス集計ファイル (sample_chiebukuro_ttm6. csv) を開き,

- 不要な情報(2行目の品詞と3行目の品詞細分類)を削除

- A列目を回答者のID (ID1~ID1000) に変換

をしてからファイル名を princomp.csv として保存します

80

R用入力ファイル

81

主成分分析 (1/4)

• まず,ファイルを読み込みます

• 群馬大学の青木繁伸先生が作成した主成分分析のパッケージをダウンロードします

• 主成分分析を実行します

82

> tmp <- file("/Users/matumura/Desktop/princomp.csv", open="r", encoding="Shift-JIS")> chie1 <- read.csv(tmp, header=T, row.names=1)

> source("http://aoki2.si.gunma-u.ac.jp/R/src/pca.R", encoding="euc-jp")

> chie1.pc <- pca(chie1)

> chie1 <- read.csv(“C:/path/to/princomp.csv”, header=T, row.names=1)

Macの場合

Winの場合

主成分分析 (2/4)

• 主成分負荷量を表示します

83

> chie1.pc$factor.loadings

PC 1 PC 2 PC 3 PC 4 PC 5質問 -0.623014969 -0.259959399 -0.220673981 -0.130994404 -0.1665951581回答 -0.581820606 -0.170760597 -0.123462494 -0.151421658 -0.1007598511人 -0.542911247 0.083085663 -0.006127801 0.219076670 0.1858571610思う -0.630872619 -0.175691335 -0.094503730 0.089845666 0.0639490058自分 -0.498185605 0.487123576 -0.030865625 -0.053734346 0.1274557907知る -0.287073486 0.652387397 -0.067824651 0.218739730 -0.1680974148知識 -0.215465313 0.366826318 0.067147876 -0.432614599 0.2791747065わかる -0.217362017 0.152263968 -0.347042677 0.238117785 -0.1837722352意見 -0.370713484 -0.025050760 0.531166251 0.314586034 0.0499343200便利 0.002558317 -0.247000029 0.032015943 -0.009362999 -0.3038268007情報 -0.247168406 0.225804955 0.348300358 -0.380717983 -0.0618569342教える -0.109609406 0.526495924 -0.284256924 0.359686850 -0.3038122255よい -0.355646682 -0.175180677 -0.075887740 -0.173078308 -0.0930558442多い -0.392971233 -0.210027392 -0.218703044 -0.110794955 0.0006999885気軽 -0.110328663 -0.214377201 -0.021198758 0.212492055 -0.2849607221ない -0.280283200 -0.196650279 -0.072412486 0.009060280 -0.3411003616疑問 -0.156382988 -0.005957664 0.050691516 0.217712694 0.3322206320いろいろ -0.159122334 0.005612273 0.464707711 0.117797962 -0.2016271285得る -0.320680011 0.144265744 0.255539091 -0.527158259 -0.0300418007聞ける -0.201493764 -0.083296138 0.564682158 0.322871381 -0.1002459899聞く -0.247358107 -0.102919235 0.115442235 0.312540402 0.3108644904暇つぶし 0.106489726 0.064191092 -0.153415079 -0.105416226 -0.1123785086非常 -0.271218489 -0.251103406 -0.057153240 0.090997342 0.2891139217利用 -0.269810023 -0.142658330 -0.187518290 -0.028886219 0.2880359311見る -0.318878904 0.050570826 0.085830351 -0.132526632 -0.1471888013役に立つ -0.176919191 0.017303530 -0.233573625 0.096959361 0.2093929352困る 0.067701136 0.048424395 -0.073711762 0.085821366 0.2470244209楽しい -0.107263922 -0.025873082 0.041501597 -0.061899658 -0.3125814962

主成分分析 (3/5)

• 寄与率を表示します

84

> chie1.pc$contribution

PC 1 PC 2 PC 3 PC 4 PC 5 PC 6 PC 710.667993 5.843609 5.339395 5.182398 4.614024 4.480498 4.107133 PC 8 PC 9 PC 10 PC 11 PC 12 PC 13 PC 14 3.853864 3.769984 3.694340 3.567649 3.540955 3.428369 3.304603 PC 15 PC 16 PC 17 PC 18 PC 19 PC 20 PC 21 3.220741 3.125227 3.112565 2.919451 2.862851 2.732052 2.574938 PC 22 PC 23 PC 24 PC 25 PC 26 PC 27 PC 28 2.471283 2.350973 2.109488 2.004526 1.899890 1.687521 1.533681

累積寄与率が20%未満

(10.67+5.84) なので主成分分析には適さないデータ

• 散布図を描いてみます

85

主成分分析 (4/4)

> plot(chie1.pc$factor.loadings[,1:2], type="n")> text(chie1.pc$factor.loadings, colnames(chie1))

クラスター分析 (1/2)

• 成分負荷行列を chie2 に格納します

• 距離行列を算出します

• ウォード法で階層的クラスタリングを行います

86

> chie2 <- chie1.pc$factor.loadings

> chie2.d <- dist(chie2)

> chie2.hc <- hclust(chie2.d, "ward")

• 樹形図を描いてみます

クラスター分析 (2/2)

87

> plot(chie2.hc)

多次元尺度構成法 (1/2)

• 多次元尺度構成法のコマンドを打ち込みます

88

> chie2.cmd <- cmdscale(chie2.d)

[,1] [,2]質問 -0.510686069 -0.11674946回答 -0.436355122 -0.16621635人 -0.140900825 -0.16129412思う -0.429201509 -0.10818130自分 0.067473993 -0.57012597知る 0.465838592 -0.38735118知識 0.140139064 -0.41796552わかる 0.154960162 -0.05104755意見 -0.036712634 0.15129852便利 0.097565594 0.43511940情報 0.138786826 -0.15756738教える 0.505243680 -0.21187661よい -0.285831593 -0.04130151多い -0.326080520 -0.04182757気軽 0.004028444 0.32974927ない -0.127499840 0.16952988疑問 0.063548196 0.10318250いろいろ 0.162804825 0.24447954得る 0.022374165 -0.18372047聞ける 0.120080272 0.37644567聞く -0.033140640 0.18289005暇つぶし 0.325696846 0.16328426非常 -0.145533072 0.23089364利用 -0.168978689 0.01623230見る -0.076479202 -0.12605548役に立つ 0.075343125 0.03693517困る 0.276495684 0.17311814楽しい 0.097020248 0.12812211

多次元尺度構成法 (2/2)

• 各語をプロットしてみましょう

89

> plot(chie2.cmd, type="n")> text(chie2.cmd, rownames(chie2.cmd))

対応分析用のデータを作ります

• まずTTMで前処理をします

- 出現件数の最小値は50(言及率が5%未満の語をカット)

- 同義語リストはスライド〈37〉と同じ

- 不要語リストは「する」「できる」「ある」「なる」「いる」「場」「場所」「知恵袋」

• 語×タグのクロス集計ファイル (sample_chiebukuro_ttm4.csv) を開き,

- 不要な情報(2列目の品詞と3列目の品詞細分類)を削除

をしてから,ファイル名を corresp.csv として保存します

90

対応分析用入力ファイル

91

対応分析 (1/4)

• まず,ファイルを読み込みます

• パッケージ MASS を読み込みます•

92

> tmp <- file("/Users/matumura/Desktop/corresp.csv", open="r", encoding="Shift-JIS")> chie3 <- read.csv(tmp, header=T, row.names=1)

> library(MASS)

> chie3 <- read.csv(“C:/path/to/corresp.csv”, header=T, row.names=1)

Macの場合

Winの場合

対応分析 (2/4)

• 対応分析を実行します

• 固有値を求めます

• 固有値を表示します

• 固有値から寄与率を求めます

• 寄与率を表示します

93

> chie3.eig <- chie3.ca$cor^2

> chie3.ca <- corresp(chie3, nf=4)

> round(chie3.eig, 3)[1] 0.026 0.009 0.007 0.000

> chie3.prop <- round(100*chie3.eig/sum(chie3.eig),2)

> chie3.prop[1] 62.98 21.18 15.84 0.00

次元数は2で良さそう

対応分析 (3/4)

• 次元数を 2 として対応分析を行います

• 列得点を出力します

• 行得点を出力します

94

> chie3_1.ca <- corresp(chie3, nf=2)

[,1] [,2]X1 -1.3614971 0.3009687X2 -0.5106691 -1.9694733X3 0.6378705 0.7599440X4 1.3518437 -1.2548151

[,1] [,2]質問 -0.1863853 0.69645209回答 -0.4010919 -0.16758722自分 -0.8783464 -0.54104752思う 0.4176592 0.46408128人 0.8601333 1.51505696知る -0.2991064 0.54244692知識 -2.2944395 0.05744779わかる 1.0017124 0.66835718意見 1.8445622 0.10836778便利 0.5302728 -1.75932369教える 0.4052086 -0.45950594情報 -1.7110761 0.49206402よい -0.9116448 -1.04019819気軽 0.3000924 -1.12243136疑問 -0.1928348 -1.94487705いろいろ 1.4451623 -1.57220019多い -0.8876336 0.36127627得る -1.5034695 2.20504822ない -0.5727480 -2.16679911見る 1.1937006 0.34483488暇つぶし -1.0218067 -0.64345795非常 -0.5084105 -1.36887880聞ける 1.1219211 -0.05053885役に立つ 0.6611073 -0.75580704利用 -0.4235386 0.71826391聞く 1.7214983 -0.02896937困る 1.9810135 -1.29183491楽しい 0.7417456 1.75973907

> chie3_1.ca$cscore

> chie3_1.ca$rscore

対応分析 (4/4)

• 散布図を出力します

95

> biplot(chie3_1.ca)

• データマイニングのフリーソフトウェアである Weka にもデータを読み込ませることができます

• テキスト×語のクロス集計ファイル (sample_chiebukuro_ttm6.csv) を開き,

- 不要な情報(A列目の原文,2行目の品詞,3行目の品詞細分類)を削除

- 「TAG」列のタグを名義変数にする(そのままだと数値属性と判断されてしまう)

をしてからファイル名を weka.csv として保存します

96

作成したWeka用入力ファイル

97

Wekaスクリーンショット

98

まとめ

• テキストマイニング               =〈前処理〉+〈多変量解析 or データマイニング〉

• テキストマイニングは語や表現の揺れが大きいので,それを如何に吸収するかが重要になります

• 前処理さえ済めば,あとはRやWekaといった各自の得意な土俵に持ち込んで勝負すればいいのです

• テキストマイニング恐るるに足らず!

99

宣伝

「人文・社会科学のためのテキストマイニング」  松村真宏・三浦麻子著,誠信書房 (2009) 2,520円      

目次第1章 序第2章 TTMと関連ソフトウェアのインストール第3章 TTMによるテキストデータの分析第4章 Rを併用したテキストデータの統計解析第5章 Wekaを併用したテキストデータのデータマイニング第6章 テキストマイニングの応用事例第7章 テキストマイニングの基盤技術

100