前回は、クラスター分析で必要な素性ベクトル(特徴ベクトル)をつくる際のポイント
「表記ゆれ」
と、それを解決するアルゴリズムである
「ステミング」
をご紹介しました↓
第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のベクトルにそろえてから比べればいいじゃない
ということなんです。
ん?ちょっとわかりずらいなぁ〜
と思われるかもしれませんが、次で説明したいと思います。
「ベクトルの正規化」の意味とは?
この先は会員限定になります。
会員の方はログインをお願いいたします。
登録がまだの方は、会員登録をお願いします。
>>> 会員登録はこちら
↓こちら無料で読めます
(Kindle Unlimited にご登録ください)