テキストマイニングでも使う!文章の単語変換方法と文章同士の類似度

こんにちは!
IT企業に勤めて、約2年間でデータサイエンティストになったごぼちゃん(@XB37q)です! 

このコラムでは、テキストデータを数値データへ変換する際の加工方法や、テキストデータの分析方法を紹介します。

コンピュータは数値しか理解することが出来ません。そのため、データを分析するためには、必ず数値へ変換する必要があります。

それでは、テキストデータはどのようにして変換を行っているのでしょうか?

BoW

BoWのイメージ
BoWのイメージ

1番簡単な変換方法は、Bag of Wordsと呼ばれる手法です。各英単語の頭文字をとってBoWとも呼ばれます。

まず初めに、文章を形態素解析し単語へ分割します。その後、BoWを使って各単語がその文に出現したかどうかを(0 or 1)のフラグ型で表すことができます。このフラグ型で表すことを、ワンホットベクトルとも呼びます。

BoWの考え方
BoWの考え方

BoWのイメージとしては、単語の集合体を想像し、その集合体から文章ごとに出現している単語だけをとってくるというイメージです。

TF-IDF

次に、BoWを少し工夫したTF-IDFを紹介します。珍しい単語が何回も出現するようであるならば、その単語の重要度を高くするという考え方の方法です。2つの指標からこのTF-IDFを算出しています。それは、tfとidfという指標です。tfという概念とidfという概念を組み合わせたものと解釈をしてください。

「tf」は(Term Frequency)の略です。 直訳すると「単語の出現頻度」で、「各文書においてその単語がどのくらい出現したのか」を意味します。 (よく出現する単語は、その文書の特徴を判別するのに有用!)

「idf」は(Inverse Document Frequency)の略です。 これは「逆文書頻度」と呼ばれており、珍しい単語の場合は値を高く、多くの文章に出現する珍しくない単語の場合は低い値を与えます。つまり、珍しい単語は、その文章の特徴として重要度を高くするという解釈になります。

それぞれの指標は下記の式から導くことが出来ます。

BoWとTF-IDFの算出式
BoWとTF-IDFの算出式

IDFの算出式で、logをとっている理由として、文書数の規模に応じた変動影響を緩和するためです。
また、IDFが0になってしまう場合を防ぐために、右辺に1を足して計算している場合もあります。

つまり「tf-idf」は(文書においてどの単語がどれくらい出現したのか)×(各単語のレア度)

といった指標になります。

また、pythonでTF-IDFは計算が可能であり、sklearn内のTfidfVectorizerというメソッドがよく使われます。

Cos類似度

各文書・各単語の「tf-idf」を計算することで、文章間の類似度を計算することができます。この「文書間の類似度」を算出する1つの方法が、コサイン類似度です。簡単にコサイン類似度を紹介すると「各文書ごとにベクトル形式でデータをもった状態で内積を計算し正規化することで各文書の類似度を測る」​​ というものです。

2つのベクトルが全く同じ方向を向いていればcos(0°)=1となり、全く逆方向を向いていればcos(180°)=-1となります。
つまり、文章が類似していれば類似しているほど、この値は大きくなると言えます。

ここで、コサイン類似度を求める前に、文章同士の角度を求めればいいと思われる方もいらっしゃるかもしれません。しかし、コンピュータは角度を計算するより、角度のΘ、つまりコサインを計算する方が楽なんです。コサインというのはコンピュータの得意な足し算・掛け算だけで計算可能だからです。

コサイン類似度の計算式は下記の通りです。

コサイン類似度の算出式
コサイン類似度の算出式

ベクトルの向きがどの程度同じ方向を向いているか?という指標で、-1~1の範囲をとります。

このように文章間の類似度を計算することによって、類似している文章を検索するなどが可能です。類似している文章を探す方法は他のコラム「クラスター分析」でも可能ですが、文書の場合は類似度を計算することでも、クラスタリングすることなく類似している文書を探すことが出来ます。

最後に、コサイン類似度の欠点について紹介します。

コサイン類似度は同じ種類の単語が複数の文章に出現しているかといった情報をもとに、文章間の類似度を確認しています。そのため、次の2つの文章は類似していると判断してしまう場合もあります。

  • 私はITの会社員です。
  • 私はアパレルの会社員です。

意味としては似ていませんが、文章に出現している単語の種類数が多いため、文章間の類似度が高くなってしまうことがあります。
コサイン類似度では、その単語の意味を解釈することができません。

最新のアルゴリズムである「word2vec」や「doc2vec」ではそのような単語の意味を解釈できるとも言われています。