テキストマイニングの「クラスター分析」などで使われる、知らないと恥ずかしい「素性ベクトル作成の定番的方法」とは?

素性ベクトル 作成方法 feature vector 特徴ベクトル クラスタリング クラスター分析 2 アルゴリズム

前回は、「クラスター分析」で必要となる「素性ベクトル(特徴ベクトル)」を洗練するための2つのテクニックをご紹介しました。

第5回『クラスター分析で必要な「素性ベクトル」を洗練する2つのテクニックとは?

(他の過去記事は下にございます)

 

今回は、テキストマイニングの「クラスター分析」などで使われる「素性ベクトル作成の定番的方法」をご紹介します。

 

本記事の概要

これまでの素性ベクトル作成の手順

これまでの連載では、素性ベクトルを作成するには、

①、文書を単語に分割する

②、単語データを「ステミング」する

③、「ストップワード」を除去する(素性選択)

④、単語の出現頻度を数えて、ベクトルデータにする

⑤、ベクトルを「正規化」して「素性ベクトル」とする

ということを説明してきました。②は第4回、③、⑤は第5回で詳しく書きました。

 

このやり方では、③のストップワード除去で、なにをストップワードにするか?について明確な基準がわかりにくい問題がありました。

(ちなみに現実的なシステムではデータ量も膨大になるので、ストップワードだけでなく多くのデータが除去されて運用されています)

 

そもそもステップワードを除去するのは、文書の特徴を際立たせるためでした。

なので、文書の特徴を際立たせることができるなら、他の方法でもいいわけです。

それが今回ご紹介する手法になります。

 

 

 

 

 

 

その文書に特徴的な単語をえこひいきする手法とは?

その手法とは、単語の出現頻度がどのくらい特徴的かという値を使って、各単語をえこひいきする方法なんです。

 

え?えこひいきするの?

 

えこひいきというと悪いイメージもあるかもしれません。

 

でも、たとえば企業の売上の内訳をみたときに、大口の取引先であればその企業にとって重要なはずです。

お客様は平等ではありますが、小口の方よりも大口の取引先を重視して経営判断をするのは理にかなっている面がありますよね。

 

それと同じで、クラスター分析の際に大きな貢献をする単語は、ある文書と他の文書の違いをはっきり表してくれる単語なんです。

言い換えると

「その文書だけに現れる単語であればあるほど重要な単語なので、その単語を重要視しましょうね」

という考え方なんです。

 

 

 

 

 

 

コンピュータにえこひいきをさせてみる

この考え方に基づいて、コンピュータで処理できる形で言い換えてみます。

まず、知りたいのは、その単語がどれだけ役に立つか?という値です。

これを以下のような2つの項のかけ算で表してみます。

 

(単語の出現頻度)×(その単語の重要度)・・・①

=(単語の出現頻度)×(全文書の数 / その単語が現れた文書の数)・・・②

 

え?なにこれ?

 

と思われた方もおられるかもしれませんが、これから説明しますので大丈夫です。安心してください。

 

①式は、多く現れて、かつ、特徴的な単語ほど、役に立つ単語だと判断するということを表しています。

(単語の出現頻度)は、これまで見てきた通り、文書を単語に分割して各単語が何回現れたかを数えたものです。

(その単語の重要度)というのが、上で説明した「その文書だけに現れる単語であればあるほど、文書の特徴を表している重要な単語」を表現する部分になります。

そしてそのために書き直したのが②で、

(全文書の数 / その単語が現れた文書の数)

となっています。

 

ん?なにこれ?

 

となった方もおられるかもしれませんので、まずは、この逆数を考えてみましょう。

(その単語が現れた文書の数 / 全文書の数)・・・③

が逆数です。

たとえば、全文書が100で、そのうち、”コンピュータ”という単語は20の文書に現れていたら、③は 20 / 100 = 0.2 となります。全体の20%に”コンピュータ”という単語が使われていたということです。

では、”自然言語処理”という単語が、4つの文書に現れていたら、4 / 100 =0.04で、全体の4%に”自然言語処理”という単語が使われていたことになります。

 

できるだけ少ない文書に現れる単語の方が、ある文書の特徴をあらわすのに重要だといいました。

なので、”コンピュータ”という単語よりも”自然言語処理”の方が、文書の特徴を表す能力が高いと考えることができますよね。

 

ほんとうにそうなっているか調べてみましょう。

③の部分は、”コンピュータ”は0.2、”自然言語処理”は0.04でした。

どちらの単語も100回出現していたとすると、

(単語の出現頻度)×(その単語の重要度)

・100×0.2 =20 ←コンピュータ

・100×0.04=4  ←自然言語処理

となり、ほんとうなら”自然言語処理”の方が大きな値で重要だと表現したいんですが、

コンピュータの方が、大きな値で重要だという表現になってしまいます。

つまり、重要度の関係が逆転しています。

 

なので、②式のように③の逆数を使うことで解決します。

(単語の出現頻度)×(その単語の重要度)

=(単語の出現頻度)×(全文書の数 / その単語が現れた文書の数)

・100×100/20=500  ←コンピュータ

・100×100/4 =2500 ←自然言語処理

となり、”自然言語処理”の方が重要だ、ということを表現することができています。

めでたしです。

 

ただ今のままでは定義が曖昧なので、もう少しキッチリ書いてみます。

ある単語の出現頻度は、どの文書のどの単語か、の関数になりますので、①や②式は以下のようになります。

 

出現頻度(文書Doc, 単語Term) ×(全文書数N / 単語Termが現れた文書数)

 

つまり、ある文書(Doc)中のある単語(Term)の出現頻度は、その単語の重要度(特徴的な度合い)によって、重みづけされているわけです。

そしてその重みは、いま考えている全文書の中でどのくらいの文書に現れたかの逆数で決めています。

これを「逆文書頻度」と呼んでいます。

 

ちなみに、単語の出現頻度は、Term Frequency、

逆文書頻度は、Inverse Document Frequency なので、

この手法を「 TF-IDF法」と呼びます。

 

実際の数式としては、どの文書にも現れない単語もあると、IDF項の分母がゼロになってしまうので、分母には1を足しておきます。

これであんしんです。

 

加えて、IDF項において文書数が膨大になると、IDF = 100000/ 1 とかになり、その単語の重要度を高く評価しすぎてしまいます。

これを抑えるために、対数をとっておきます。文書数の増大に対して重要度の変化をマイルドにしておくことができるわけです。

 

IDF =  – log ( (その単語が現れた文書の数+1) / 全文書の数 )

となっていて、これよく見ると、

情報理論でいう「情報量」の考えを元にしていることがわかります。

「情報量を多くもっているものを重視する」という情報理論の考え方に沿った定式化となっています。

 

ちなみに、情報量はTF-IDFだけでなくさまざまなところで重要で、

例えば、データマイニングだと、「決定木」のアルゴリズムでも使われていたりします。

 

 

以上から、

 

TF-IDF( t, d ) = TF(t, d) × IDF(t, d)

= TF(t, d) × log( N / (DF(t, d) + 1) )

 

と書くことができます。

各単語ごとにTF-IDF値を計算してベクトル形式で保存すれば、素性ベクトルの出来上がりというわけです。

 

 

 

 

 

 

ここで思い出してほしいのですが、

どこにでも現れる単語はストップワードとして除去する話がありました。

ストップワードはどの文書にも現れるので、

必然的にIDF値が小さくなります。

するとTF-IDF値も小さくなり、TF-IDF値を用いた類似度の計算において、ストップワードの影響は無視できるようになります。

 

つまり、人間がストップワードを選ぶ必要がないわけです。

うれしいですよね!

 

もちろん、特徴的な単語はIDF値が大きくなるので、文書の特徴的な単語はシッカリ高い値として評価してくれます。

 

なのでTF-IDF法はとっても優秀な特徴量の計算方法であることがわかっていただけるかと思います。

 

 

というわけで、今回はテキストマイニングの「クラスター分析」などで使われる「素性ベクトル作成の定番的方法」をご紹介しました。

 

次回は、素性ベクトルを活用した、グラスター分析のやり方についてまとめています↓

第7回『「クラスター分析」ってどうやるの?クラスター分析のやり方、具体的な3つのステップはこちらです

 

 

 

 

 

過去記事はこちらです↓

第5回『テキストマイニングなどの「クラスター分析」で必要な「素性ベクトル」を洗練する2つのテクニックとは?

第4回『テキストマイニングなどのクラスター分析で必要な「素性ベクトル」をつくりたいあなたが知らないと損をする必須のテクニックとは?

第3回『テキストマイニングなどのクラスター分析でも重要な「素性ベクトル」を作るための3つのステップとは?

第2回『テキストマイニングの「クラスター分析」でも必要な「素性ベクトル」とは?なぜ必要なの?

第1回『「クラスター分析」とは?膨大な情報の内容を、ラク〜にサクッと理解したいあなたはこちらをどうぞ

 

 

本連載では、クラスター分析について定期的に更新しています。

Twitterなどフォローしてもらえると、更新情報が届くので便利です!

 

 

 

こちらもございます↓

 

 

 

 

 

こちらの記事もございます

『「テキストマイニング」の記事まとめはこちらです

 

「多変量解析」の記事まとめはこちらです

 

「機械学習」に入門したいあなたにチェックしてほしい良書、10冊はこちらです

 

『「データマイニング」を勉強したいあなたにチェックしてほしい良書、10冊はこちらです』

 

「エクセル」で「データ分析」できるようになりたいあなたにチェックしてほしい良書10冊はこちらです

 

「データ分析」を活用したい!けど分からないことだらけの方、その悩みを解決する良書10冊はこちらです

 

「アンケート調査」をしたいあなたにチェックしてほしい良書、8冊はこちらです