2011年11月30日水曜日

tf-idfを実装した結果

【これまでの流れ】
① はてぶのようなサイトから持ってきた文書群と
任意の文書を比較して、似ているものをランク付けする
プログラムを書いている。

② 大まかな流れは、文書群から単語を抽出し、
  それを変数とした特徴ベクトルを文書毎に作成する。
  そして、比較したい文書の特徴ベクトル間のコサインをとり、
文書間の関連性とする。

③ この文書比較の精度を上げるため、
  tf-idfを使って文書毎に重要な単語を抽出し、
  特徴ベクトルの変数としてみる。


【今回やったこと】
今回、tfidfを実装してみたので、以下を載せる。
① tfidfによって抽出される重要単語の確認。
② tfidfを利用した場合としなかった場合の文書比較結果

※ 対象にした文書群
lifehackerの記事 : 15件
スゴレンの記事 : 11件
「原子力」って調べたときの検索結果 : 10件

※ ちなみに抽出された単語のフィルタリングは、
高い順にソートし累積値が全体の35%になった時点で切り捨てた。



【tfidfによって抽出される重要単語の確認】
まずは、この記事。
風知草:曲がり角からどこへ?

抽出された重要そうな単語はこれ。
0.17808383571585        もんじゅ
0.10330111288117        政策
0.084143345761451       原発
0.076321643878219       細野
0.06351958877225        円
0.050881095918813       現実
0.050881095918813       仕分け人
0.050881095918813       首相
0.050881095918813       表面
0.050881095918813       抜本
0.050881095918813       トン
0.050881095918813       核のゴミ
0.050881095918813       ムダ
0.050881095918813       使用済み燃料
0.050881095918813       曲がり角
0.043022928448548       基本

うん。確かにそれっぽい単語をとってきている。

つぎはこれ。
女の子の「あなたに興味がない!」という遠回しなNGサイン9パターン

抽出された重要そうな単語はこれ。
0.21558386420146        ナシ
0.21558386420146        脈
0.20183899990487        女の子
0.10091949995243        興味
0.094058059817577       女性

わかりやすいw。
そして前の例と比べて、計算されたtfidf値が高い。
つまり、
文書を見てみると、「脈ナシ」って単語が10個あった。
1つ目の記事に「もんじゅ」は10個。
つまり、ほかの文書に「脈ナシ」って単語が少なかったため、
重要だと判断されたと。
あと、単語が分割されてしまった。mecab辞書をもっとよくしなきゃ。


最後はこの記事。
寝る前の飲酒を控えて、いびきをストップ!?

抽出された重要そうな単語はこれ。

0.34947279038974        いびき
0.11649093012991        びき
0.054531940325175       酒
0.054531940325175       空気
0.038830310043305       適切
0.038830310043305       生理学
0.038830310043305       身体
0.038830310043305       通り道
0.038830310043305       睡眠時無呼吸症候群
0.038830310043305       医療機関
0.038830310043305       症状
0.038830310043305       医学
0.038830310043305       空気抵抗

いびきのtfidf値が高い。
記事を見ると「いびき」という単語が27個出てきている。
このせいか。




【tfidfを利用した場合としなかった場合の文書比較結果】
抽出した重要単語を変数とした特徴ベクトルを作成し、
記事と似た文章を、文書群のなかから抽出してみる。
コサインが0.7以上のものを抽出。
比較対象として、tfidfを利用しない場合も載せる。

まずは、この記事。
風知草:曲がり角からどこへ?

(1) tfidfを利用しない場合。
0.92011443      東芝が原発機器輸出へ、米34年ぶり原発新設再開 | Reuters
0.90298215      契約更新しない!第1原発1月に保険切れ - 経済ニュース : nikkansports.com
0.87446821      原子力防災など強化分野 エネ研拠点化会議で確認 福井・敦賀 - MSN産経ニュース
0.74048286      原子力は重要な電源=橋下氏の原発縮小路線に―関電社長 - WSJ日本版 - jp.WSJ.com
(2) tfidfを利用した場合。
0.9941724       原子力は重要な電源=橋下氏の原発縮小路線に―関電社長 - WSJ日本版 - jp.WSJ.com
0.98811356      原子力安全高度化へ技術開発を JEMA会長が必要強調 - 産業・技術 - ニュース - 電気新聞
0.9902511       契約更新しない!第1原発1月に保険切れ - 経済ニュース : nikkansports.com
0.9833529       外部電源で2回線以上 原子力安全委が喪失対策 - MSN産経ニュース
0.97699438      原子力防災など強化分野 エネ研拠点化会議で確認 福井・敦賀 - MSN産経ニュース
0.96333347      東芝が原発機器輸出へ、米34年ぶり原発新設再開 | Reuters

どちらも似通った記事をとってきていることがわかるが、
tfidfを利用した場合のほうが、コサインが顕著に分かれている。


もうひとつ、この記事。
女の子の「あなたに興味がない!」という遠回しなNGサイン9パターン

(1) tfidfを利用しない場合。(0.7以上が全然なかったので、0.1以上を表示)
0.67150338      「これを始めたらモテ出した」というモテる男の行動習慣9パターン|スゴレン
0.3456989       クリスマス当日に、滑り込みで女の子を誘う口実9パターン|スゴレン
0.23763611      女性が「ひそかに自信をもっている個性」をさりげなく褒める一言9パターン|スゴレン
0.15194308      「私に告白してよ!」という裏メッセージが含まれている女性のセリフ9パターン|スゴレン
0.14351136      女性がグラッとくる男性のスペック9パターン|スゴレン

(2) tfidfを利用した場合。
0.76842209      「これを始めたらモテ出した」というモテる男の行動習慣9パターン|スゴレン
0.43482185      クリスマス当日に、滑り込みで女の子を誘う口実9パターン|スゴレン
0.30439966      [Androidアプリレビュー]子どもの成長記録に便利!?(浮気の追及にも!?) 寝言を録音できる『NEGOTO Recorder』 #TABROID
0.27703564      女性が「ひそかに自信をもっている個性」をさりげなく褒める一言9パターン|スゴレン
0.27239949      失敗した時は、うまくいく方法を見つける過程だと考えよう [gReader]
0.20112109      「私に告白してよ!」という裏メッセージが含まれている女性のセリフ9パターン|スゴレン
0.18463171      女性がグラッとくる男性のスペック9パターン|スゴレン

意外にコサインの値が低くなる。
特徴ベクトルの変数を「重要単語」に絞ったため、
近い変数が少なくなったのかな。
なんで、Androidアプリレビューが入ってるんだw。


ついでにこの記事も。
寝る前の飲酒を控えて、いびきをストップ!?

(1) tfidfを利用しない場合。
0.91099372      コワーキングを楽しむ3つのススメ [gReader]
0.90791908      [Androidアプリレビュー]子どもの成長記録に便利!?(浮気の追及にも!?) 寝言を録音できる『NEGOTO Recorder』 #TABROID
0.89963271      聞いている音楽にぴったりのカクテルレシピを教えてくれる新感覚サイト「Drinkify」 [gReader]
0.85027147      失敗した時は、うまくいく方法を見つける過程だと考えよう [gReader]
0.83635293      90分の「集中タイム」と30分の「完全な休憩」を交互に取る生産性向上メソッド [gReader]
0.78096475      不眠症を回避するための一日の過ごし方
0.72454513      ソーシャルゲームがパチンコよりも優れている理由 - ぼくはまちちゃん!(Hatena) [gReader]

(2) tfidfを利用した場合。
0.94035399      コワーキングを楽しむ3つのススメ [gReader]
0.81401848      プログラマーは"一線"を超えると急激に伸びる - Linux/Ruby 小崎氏(後編) | エンタープライズ | マイナビニュース [gReader]

いまいちつながりがわからん。



【思ったこと】
1、重要単語に絞ったため、特徴ベクトルが一致しにくくなった。
コサインの値が高くなるかどうかは、特徴ベクトルの変数がどれだけ近くなるかによる。
つまり、同じ単語が一切なければ、
ゴミ単語が多いと精度は下がる。しかし特徴を表す単語が少なくても精度は下がる。

より文書の特徴をうまく反映した単語を抽出するために。

① mecab辞書
やっぱりゴミみたいな単語まで含まれている。
mecab辞書の見直しと抽出する品詞を限定しよう。

② ifidfの重要単語の基準値
tfidf値から重要単語を判断する基準値はどうしよう?
今回適用に全体の35%としたが。

③ 別の重要単語の抽出方法
統計情報に基づき重要語を抽出もやってみたい。

④ 単語間の意味的つながり
単語どうしの意味的なつながりを加味する。

(1) 単語同士の意味的なつながりを表すデータを準備しておいて、
重みづけをする際、それを加味する。
全然やり方検討つかんけど。
論文探してみよう。

(2) 特異値分解をしているから、
2つの文書間に直接共通する単語がなくても、
それらをつなぐ文章があれば意味的なつながりは加味されるはず。

じゃ、抽出したい文書群に加え、
単語同士の意味的なつながりを表す文書群を加えては?。


2、文章群の範囲をもうすこし考えよう。
「原子力」や「スゴレン」のようにテーマがはっきり決まっているものは、
うまく抽出できるが、「ライフハッカー」のように1つ1つの記事のテーマがばらばらだと
うまく抽出できてない。文書の範囲を狭くしたほうがいいのかな。
でも逆に、「母数がすくないから、似たような記事がなかった」とも考えられる。
それに、文書の範囲を狭めると文書の差異が細かくなって、区別するのが難しいかも。
要検討。


3、もう少し定量的に結果を比較する方法がほしいな。

0 件のコメント:

コメントを投稿