2016年4月9日土曜日

tf-idf

前回は、文書を分かち書きして形容詞を取り出し、その出現頻度を調べました。結果を見てわかると思いますが、案外、形容詞ってその文書の特徴を捉えているんですね。ということは、文書に出現する語句を調べると、その文書の特徴がわかるのではないか、という推測が成り立つわけです。これは直感的にも納得できます。例えば、あるの文書があったとして、その中に含まれる単語として「企業」とか「株価」とか「雇用」とかが含まれれば、その話題は経済かな、と推定されます。でも、単語の出現回数を数えただけだと、都合の悪いことがあります。どの文書にも出てくる単語があった場合、それがその文書を特徴付けるとは思われません。例えば、「彼」とか「それ」とかの語句は、文章を構成するとき頻出します。どの文書にも出てくるので、その文書を特徴付けるものにはなりません。
したがって、文書を特徴付けるのは、他の文書にあまり出てこない単語が何回も出てくる場合ということになります。そこで、そうした語句に重みを付けるようにします。このような手法の一つにtf-idfというのがあります。文書中の単語への重みづけを行い、文書の特徴を抽出するのに使われます。
tfはterm frequencyの頭文字をとったもので、単語の出現頻度を表します。定義は、tf =(文書dに含まれる単語tの出現頻度)/(文書dに含まれる全単語の出現頻度の和)です。idfはinverse document frequencyの頭文字をとったもので、多くの文書に出現する単語の重みを下げます。定義は、idf = log{(全文書数)/(単語tが出現する文書の数)}です。logを使っているのは、文書数に対する影響を少なくするためです。あと、log 0を避けるため、1を加える措置を施すことがあります。で、両者をかけ合わせたものが、tf-idfになります。
では、Rで試してみましょう。まず、以下のコマンドを打ち込んでみて下さい。ただし、前回やった青空文庫の「風の又三郎」が、ディレクトリ名NORUBYの中に「ルビなしファイル」として置いてあるものとします(前回のkazeまでやってある状態)。で、新たに「セロ弾きのゴーシュ」を読み込んで、両者を比較してみます。
> celo <- Aozora(url = "https://www.aozora.gr.jp/cards/000081/files/470_ruby_3987.zip")
> library(RMeCab)
> listTFIDF <- docMatrix("NORUBY", pos=c("名詞"), weight = "tf*idf" )
> head(listTFIDF, 20)
              docs
terms          kazeno_matasaburo2.txt serohikino_goshu2.txt
  アアハハハ                        2                     0
  アアハハハハ                      2                     0
  あい                             16                     0
  あいだ                            2                     0
  あいつ                            4                     0
  あかし                            2                     1
  あぐら                            2                     0
  あざみ                            4                     0
  あざらし                          2                     0
  あし                              2                     0
  あした                            4                     0
  あたり                            7                     2
  あたりまえ                        2                     0
  あちこち                          8                     0
  あっち                            6                     0
  あと                             17                     7
  あなた                            1                     2
  アルプス                          2                     0
  あん                              2                     0
  い                               12                     0
>

名詞だけを抽出して、各単語の重みを求めました。それぞれの作品では、どんな単語が重みづけられているでしょうか。注意点は、docMatrixはリスト形式で返されるということです。

0 件のコメント:

コメントを投稿