【自然言語処理】word2vecとは何か?CBOWとskip-gramも解説
当ページのリンクには広告が含まれています。
本記事では、word2vecというものについてまとめてみます。
✓目次
word2vecは言葉をベクトル化するツール
word2vecは、分散表現を作成することができるツールです。
word2vecを活用すると、言語をベクトル化することができます。
ベクトル化することにより、定量的に単語同士がどれだけ似ているかを算出したり、数値計算のように、言葉を合成させたり、言葉を削除したりする、みたいなのができるようになります。
word2vecでは、下記2つのいずれかのニューラルネットワークが用いられます
CBOW(continuous bag-of-words)
skip-gram
そもそも、ニューラルネットワークとは何か、という方は、以下のUdemyのコースがおすすめです。※セールの時期は1000円前後で購入できます。
【視聴期限なし】現場で使えるChainerによるディープラーニング入門【30日間返金保証付き】
CBOW(Continuous bag-of-words)とは
CBOWとは、前後の単語から対象の単語を予想するニューラルネットワークです。
イメージレベルですが概略は以下のような具合です。
入力層、中間層、出力層があり、入力層と中間層の間と中間層と出力層の間に、重みが存在します。
図1において、青い長方形は、one-hot表現という単語を0と1からなるベクトルで表現されたものが当てはまります。
one-hot表現を「となりのととろ」という文章を例にあらわしてみると、以下のようになります。
「となり」、「の」、「ととろ」という風に単語ごとにIDが割り振られます。
one-hot表現は、該当する単語が位置している箇所を「1」と表して表現します。
各単語に割り当てられたIDで表現されるのではなく、あくまでもテーブル表の列の位置で表されている点がポイントです。
そして、one-hot表現を用いることで、単語をニューラルネットワークで扱いやすいベクトルの形にすることができるのです。
続いて図1において、黄色の長方形は分散表現というベクトルで表現されたものが当てはまります。
分散表現とは、単語を200個ほどの実数ベクトルで表現する方法です。
200個、のようにたくさんの値の個数で表現されていることを、高次元である、というので、分散表現をかっこよく説明したければ、「単語を高次元の実数ベクトルで表現する技術」と言えばよいです。
具体的なイメージは以下の通りです。
図3では、「男」、「東京」、「Ruby」という3つの単語があります。
これらは全く異なる単語なので、ベクトルは似ていません。もし、単語の類似度や関連性が高ければ、これらの単語同士の分散表現は、似たものになります。
この分散表現を活用すると、どのようなことができるかというと、例えば、
- 「王様」ー「男性」+「女性」=「お姫様」
という風に、単語同士の足し算や引き算が可能になり、かつ、類似度の高い単語を見つけることができます。
次に、オレンジ色の長方形は重みを表す行列です。
重みを表す行列とは、例えば、「となりのととろ」の真ん中の単語の「の」を予測できるように学習させた後に生成される、各単語の分散表現が並んだ行列です。
以上のように、CBOWは前後の単語から対象の単語を予測するようにして分散表現を作成するものです。
skip-gramとは
skip-gramとは、ある単語から前後の単語を予測するニューラルネットワークです。
CBOWとの違いは、入力が中央の単語で、出力がその前後の単語である点です。
そのため、CBOWとは逆に、中央の単語からその周囲の単語を予測するように学習が行われます。
skip-gramにおいても、CBOWと同様に学習によって、入力層と中間層の重みの行列は、分散表現のベクトルが並んだ行列になります。
CBOWとskip-gramの比較
この辺は別記事で実際に比較評価をしてみようと思います。
一般論としては、CBOWよりもskip-gram方が、学習に時間がかかるが精度がよい、とされているようです。
以下に記事にて、Word2Vecの実装方法をまとめております。実際にpythonを使って実装し、CBOWとskip-gramの比較検証をしてみてください。
自然言語処理を学びたい人へ
以下の、30日間返金保証付きのUdemyの講座を確認ください。30日以内であれば、無料(返金保証付き)です。
【視聴期限なし】自然言語処理とチャットボット: AIによる文章生成と会話エンジン開発【30日間返金保証付き】