Oops! It appears that you have disabled your Javascript. In order for you to see this page as it is meant to appear, we ask that you please re-enable your Javascript!
スポンサーリンク

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

スポンサーリンク
素性ベクトル feature vector 特徴ベクトル ストップワード コサイン類似度 正規化 Normalization クラスタリング クラスター分析 アルゴリズム
素性ベクトル feature vector 特徴ベクトル ストップワード コサイン類似度 正規化 Normalization クラスタリング クラスター分析
スポンサーリンク
スポンサーリンク

前回は、クラスター分析で必要な素性ベクトル(特徴ベクトル)をつくる際のポイント

「表記ゆれ」

と、それを解決するアルゴリズムである

「ステミング」

をご紹介しました↓

第4回『テキストマイニングなどのクラスター分析で必要な「素性ベクトル」をつくりたいあなたが知らないと損をする必須のテクニックとは?』(他の過去記事は下にございます)

 

 

今回は、素性ベクトル作成時の、必須テクニックを2つご紹介します。

 

 

素性ベクトルをつくるには、まず、文書を単語に分割しました。

 

前回の例をもう一度挙げると、

 

(文書1): 自然言語処理 / は /、 /人間 / が / 日常的に / 使っている / 自然言語 / を / コンピュータ / に / 処理させる / 一連 / の / 技術 / であり / 、 / 人工知能 / と / 言語学 / の / 一分野 / である / 。/

 

(文書2): 人工知能 / とは / 、 / 人工的 / に / コンピュータ / 上 / など / で / 人間 / と / 同様 / の / 知能 / を / 実現させよう / という / 試み / 、 / 或は / そのため / の / 一連 / の / 基礎技術 / を / 指す / 。 /

 

という感じに単語に分割できます。

 

テク①:文書の特徴を際立たせるテクニックとは?

文書例の中には、”の” ”は” ”が” ”、” ”。” といった単語があることがわかります。

 

これらの単語はどんな文書にも含まれています。

 

なので、文書の特徴を表したいときにはあまり意味がありません。これらを素性ベクトルに加えても、データ容量が大きくなるだけでクラスター分析にはメリットがないんです。

 

このように、文書の特徴を表さないようなどの文書にも出現する単語を「ストップワード」といいます。

 

このストップワードを取り除くことで、文書の特徴をより際立たせることができます。

 

つまり、素性ベクトル作成の際の2つめのテクニックは、「ストップワードを除去すること」になります。

 

具体的にどうするかというと、とてもシンプルで、

 

あらかじめこれはストップワードにしよう!

 

というリストを作っておいて、

単語頻度を数える前に、それに該当する単語は取り除くということを行えばオッケーです。

 

こうすれば、素性ベクトルをより特徴的にでき、かつ、データの量も減らすことができます。

 

ちなみに、素性ベクトルの中から不要と思われる部分を取り除くことを「素性選択」ともいいます。

この素性選択はそれだけで多くの論文があるほどで、大量の文書を精度よく扱いたいあなたには必須の項目となっています。

 

 

 

 

 

 

 

なるほど〜 ストップワードの除去ね!

 

ん?でも、どれをストップワードにするかってどう決めるの?

 

と思われるかもしれません。

 

その通りです。どれをステップワードにするかは、明確な基準はありません。

 

あえていうなら、そもそもの目的は各文書の特徴を明確にすることだったので、

それをより明確にできるようにステップワードを決めればいい、

ということになります。

 

よし、ステップワードを除けばいいんだ!

でも、長い文書と短い文書では、単語の頻度を同じに考えていいのかな?

同じ10回の出現頻度でも、長い文書より短い文書の方が、より多く出現してる気がするんだけど・・・

長さの違う文書同士を比べるときにはどうするんだろう・・・?

 

というわけで、文書はそれぞれ長さが違いますが、これまではその影響を考えていませんでした。

ここからは、文書の長さを考慮した、素性ベクトルを洗練する方法をご紹介しますね。

 

 

 

 

 

 

「コサイン類似度」とは?

素性ベクトルをつくる目的は、類似度を計算するためでした。類似度を使うことでクラスター分析をすることができるからです。

 

ここで一度、類似度の計算を考えてみましょう。

 

類似度にはいろいろな計算方法があるんですが、

ここでは文書クラスタリングの類似度でよく使われる

コサイン類似度

を考えてみます。

(他の類似度についても、今後本連載でまとめたいと思います)

 

コサイン類似度は以下の計算式で求められます。

 

いま類似度を求めたい2つの素性ベクトルを、v1, v2とすると、

 

(コサイン類似度) = (v1・v2)/ { (v1の大きさ) * (v2の大きさ) }

 

として求めることとします。

 

ちなみに、ベクトルの内積は、ベクトルの各成分同士の積の総和で計算されます。

(1, 2, 3)・(4, 5, 6) = 1*4 + 2*5 + 3*6 = 32

(・は内積、*は掛け算を表しています)

という感じです。

また、ベクトル (1, 2, 3)の大きさは、

(ベクトル(1,2,3)の大きさ)= √(1^2 + 2^2 + 3^2) = √(1 + 4 + 9) = √14

となります。

ちなみに、ベクトルが苦手だなぁ〜と思われる方にはこちらの記事もございます↓

「ベクトル」を学びたい・復習したい方にチェックしてほしい良書、10冊はこちらです

 

(コサイン類似度) = (v1・v2)/ { (v1の大きさ) * (v2の大きさ) }

の意味を考えてみます。

まず、右辺でv1, v2の大きさで割っていますが、これはベクトルの長さを1に揃えるという意味をもっています。

ベクトルの長さをそろえることで、大きさのちがうベクトルを比較でるようになるメリットがあります。

下の「正規化」で詳しく説明しています。

また、内積(v1・v2)は、v1とv2が似ているほど大きな値を表します。

このように、類似度を(大きさをそろえた)ベクトルの内積で表現できるわけです。

 

ちなみに、考えたい問題によっては、似てない度合い(非類似度)を使うと便利なときもあります。

そういうときには、以下のようにできます。

(コサイン非類似度) = 1 − (v1・v2)/ { (v1の大きさ) * (v2の大きさ) }

1から内積の項を引いておくことで、この非類似度は、2つのベクトルが似ているほど値が0に近づき、似ていないほど1に近づくようにできます。

 

このように、コサイン類似度を計算することで、

文書が似ている・似ていないを数値化することができることがわかりました。

 

ここで、上で少し触れたベクトルの長さを揃えるところについて少し補足します。

 

 

 

 

 

 

テク②:長さの異なる文書を比較するためのテクニックとは?

ここからは、「文書の長さ」と「類似度」の関係を考えてみます。

 

まず、文書が長くなれば、(当たり前ですが)各単語の出現頻度も多くなることがわかります。

すると、その文書の素性ベクトルの各成分は大きな値になります。

なので、長い文書に関する素性ベクトルの内積(=類似度)は、大きくなりやすいわけです。

 

あれ、長い文書同士の方が、短い文書同士より、似ているってなっちゃう??

 

そうなんです!

 

今知りたいのは、文書が似ているか・似てないかですが、

それをベクトルの内積によって評価しようとしています。

でも、内積は、文書の長さによって変わってしまいます。

 

こまった!

 

でもご安心ください〜

この欠点を補正するテクニックがあるんです^^

 

それは、各文書の素性ベクトルの長さを1にすることで、

これをベクトルの「正規化」と呼びます。

 

全部、長さが1のベクトルにそろえてから比べればいいじゃない

 

ということなんです。

 

ん?ちょっとわかりずらいなぁ〜

 

と思われるかもしれませんが、次で説明したいと思います。

 

 

 

 

 

 

「ベクトルの正規化」の意味とは?

 

たとえば、東京都と大阪府でどちらがサービス業が盛んか?について考えるとします。

(ここでは分かりやすいように、数値は実際のものと異なっています)

たとえば、サービス業に東京都では8万人従事し、大阪府では6万人従事しているとします。

ここから東京都の方がサービス業が盛んだと言えるでしょうか?

東京都の就業人口は約800万人で、大阪府では約400万人とすると、

東京都では就業人口の1%が、大阪府では1.5%がサービス業に従事しています。

なので、同じ人口がいたとすると、大阪府の方がサービス業に従事する人が多い、といえます。

 

このように、全体数との比率を考えることで、大きさの違うものを同じ土俵で比べることができるわけです。

 

ベクトルの正規化も同じことなんです。

 

ベクトルの正規化は、ベクトルの長さ(全体数に相当します)を1にする手順のことで、

もともと長さの異なるベクトルを、

同じ土俵にして、比べやすいようにしている

わけです。

 

なるほど〜

じゃあ具体的には、どう、計算するの?

 

と思われるかもしれません。

 

 

 

 

 

「ベクトルの正規化」の手順は以下の通りです

 

ベクトルの正規化は、ベクトルの各成分をベクトルの長さで割ることを行います。

 

(1, 2, 3)を例にすると、

ベクトルの長さは、(1の2乗 + 2の2乗 + 3の2乗)の平方根で求まります。

この場合、√14 がこのベクトルの長さになります。

(もし、?って方はベクトルを復習されてみてください。「ベクトルの大きさ」で調べるとわかるかと思います)

なので、(1, 2, 3)を正規化したベクトルは (1/√14, 2/√14, 3/√14) となります。

 

 

正規化した素性ベクトルを用いることで、文書の長さに関係なく、類似度を適切に評価することができるようになります。

 

めでたしめでたし^^

 

 

というわけで、今回はクラスター分析をする際に使う素性ベクトルの作成について、「ストップワード」と「正規化」についてまとめました。

 

 

次回は、「テキストマイニングでよく使われる、素性ベクトルの作成方法」をご紹介します↓

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

 

 

 

過去記事はこちらです↓

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

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

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

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

 

 

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

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

 

 

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

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

 

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

 

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

 

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

 

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

 

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

 

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