はじめまして、レバレジーズSEOチームの阪上です。
私達は自然言語処理を用いてSEO施策を行っています。
自然言語処理というのは、人間が普段使っている言語をコンピュータなどの機械に処理させることを指します。Googleなどの検索エンジンがWebページを理解するために用いていると考えられています。
今回は、自然言語処理を行うためのテキストマイニングの手法をいくつか紹介しようと思います。
■形態素解析とテキストマイニング
まず第一に、検索エンジンがWebページを読み込んで、そのページに何が書かれているのか・何を強調したいのか・どのような文脈なのかを人間のように理解することは一般的に難しいとされています。
とりわけ日本語の場合、The pen is made in German.など、
”The”,”pen”,”is”,”made”,”in”,”German”とスペースで区切られた英語とは異なり、「ドイツ製のペン」と単語が連続で続いており、コンピュータは文章を理解することができません。
そこで必要なのが形態素解析です。形態素とはそれ以上単語を意味的に分割できない単位の単語のことを指し、それを分かち書きで処理することを形態素解析と言います。
例えば、先ほどの「ドイツ製のペン」は「ドイツ」「製」「の」「ペン」と分解されます。その単語-文書ベクトルをもとに分析していくことをテキストマイニングといいます。
■テキストマイニングの分析手法
テキストマイニングの分析手法には様々な種類があり、SEOでは古典的なものから最先端のものまで幅広く用いることがあります。
古典的なものの例ではTF-IDF(Term Frequency- Inverse Document Frequency)やコサイン関連度、最先端の例ではLDA(Latent Dirichlet Allocation)やword2vecなどを用いたりします。
今回はTF-IDFとword2vecの紹介をしたいと思います。
●TF-IDF
まず、TF-IDF(Term Frequency- Inverse Document Frequency)というのは文書中の単語に関する重み付け手法の一種で、主に情報検索や文章要約などの分野で利用されます。
Term Frequency(以下、TF)というのは字面の通り、その文章に登場する単語の頻度のことを指します。数式で示すならば、TF=「ある単語の出現回数」÷「その文章の総単語数」となります。一方で、Inverse Document Frequency(以下、IDF)はある単語の文書間での単語利用頻度の逆数を指しています。
つまり、ある単語が複数の文書で観察されるほど、その逆数であるIDFの値は小さくなります。直感的には「珍しくない単語」、とみなすことができるでしょう。
数式で示すと、IDF=log(「総文書数」÷「ある単語が出現する文書数」)となっています。TF-IDFはTFとIDFの積として定義され、TF-IDF=TF・IDFとなります。非常にシンプルかつ計算が簡単な指標と言えます。
この指標を用いると、Google上位表示サイトの特徴的な単語が何かを分析することができます。
例えば、上位10位以内のサイトのTF-IDFの高い単語は何かがわかれば、そのキーワードでページを新しく作る場合に、どのような単語を含めるべきか参考になったりします。
漠然としているWebページのライティングにおいて、何を書けば検索エンジンに評価されやすいのかアプローチできるというのは面白いと思います。
カモノハシペリーのGoogle上位100位から抽出した単語
上の図は「カモノハシペリー」というキーワードでGoogle検索した際の、上位100位までのWebサイトの情報を抽出したもので、実際にTF-IDFを計算したものからなっています。見る限りディズニーのアニメ、フィニアスとファーブに登場するカモノハシペリーに関連した情報が抽出されているように思われます。
このように、単純な指標ながらもTF-IDFはテキストマイニングにおいて強力なツールとなりうるのです。
●word2vec
次に、最先端の分析手法としてword2vecを紹介します。
word2vecというのは2013年にTomas Mikolovらによって提案されたニューラルネットワークを用いた自然言語解析のオープンソースで、機械学習で言語の意味解釈を行おうという手法です。私達はPythonを用いて、word2vecの計算を実際に行っています。
word2vecはContinuous Bag-of-Words(CBOW)により、文章を0-1のベクトル表現にして単語に関する文章間の距離を計算したり、Skip-gramによりニューラルネットワークを用いて、ある単語の次に出現する単語を予測したりします。これにより、与えられた文章から「各単語の周辺に出現する単語」が得られます。
「各単語の周辺に出現する単語」が得られると、似たような単語が分布している単語、すなわち類義語が得られると考えることができます。
これは言語の意味を掴むに近いと考えることもできるでしょう。ただし、必ずしも類義語が得られるわけではありませんのでご注意下さい。より詳細を知りたい方は参考文献よりお調べ下さい。
実際に、Wikipediaのテキストデータ(2GB)から単語解析のトレーニングを行うために、Python27でword2vecのアルゴリズムを回したところ、2時間近くかけて計算を行うことができました。今回は似たような周辺単語分布を持つ類似語を求めています。
ここでは分析結果をいくつか示したいと思います。
まずは甲子園の類似語です。名古屋や後楽園、東京ドームなどは、前後に同じような単語が分布するワードとしては納得のいく結果と言えます。
ディズニーランドの類似語に関しては、なぜだかメトロやスカイツリータウンなども同じように使われているようですが、ディズニーシーやホテルミラコスタ・TDLなどが同じような単語を周辺に持つというのは納得がいきます。
ところで、word2vecはある単語からある要素を差し引いた場合の、その単語周辺に分布する単語を求めることができます。
ここでは、「ディズニーランド」から「夢」という単語を差っ引いたものを結果として返しています。
「ディズニーランド」から「夢」を差っ引いたら、「舞浜」や「ベイシティバス」が出現しています。これは、夢の国であるディズニーランドから夢が失われる場所、あるいは夢から覚める場所が舞浜やベイシティバスの中なのかもしれません。
弊社では、word2vecをまだ具体的な施策などに利用してはいませんが、類義語の発見など新しいキーワードの発見に繋がるかもしれませんので、今後も研究していこうと思います。
以上、テキストマイニングの古典的手法から最先端手法の説明でした。今後のブログ更新を楽しみにお待ちください。
———————————————————————————————
【参考文献】