【自然言語処理】単語の意味を計算できる「Word2Vec」を噛み砕いて説明してみた

文章の要約を実装したいと思って調べていると、Word2Vecという手法に辿り着きました。この記事では、自分なりに「Word2Vecとは何か?」を説明してみます。

Word2Vecとは?

Word2Vecとは、単語の意味をベクトル表現(分散表現)する手法です。

ざっくり言うと、単語の意味を数値化して、コンピューターで計算できるようにするための手法です。

ベクトル化することで

  • 単語同士の意味の計算
  • 意味の類似度の判定

等ができるようになります。

つまり、単語同士で、「王様」- 「男」+ 「女」= 「女王」のような計算 ができます。

  • 国王:[ 0.4, 0.1, 0.9, 0.4 ]
  • 女王:[ 0.5, 0.2, 0.3, 0.4 ]
  • 男性:[ 0.1, 0.0, 0.8, 0.2 ]
  • 女性:[ 0.2, 0.1, 0.2, 0.3 ]

どうやって単語をベクトル化するのか?

ベクトル化とは、単語同士の意味的な類似度を数値化すると言う事です。

Word2Vecでは単語の意味の類似度を数値化するのに、意味の類似度を知りたい単語が、文章中で置き換え可能を判定基準にしています。

置き換え可能とは?

例えば「本」と「漫画」は、「私は図書館で、〇〇 を借りて読みました」 の「〇〇」にどちらも当てはまります。

ある単語が置き換え可能かは、人間なら文章を読んで推測できます。Word2Vecでは、対象単語の前後に出てくる単語の一致率で、置き換え可能か判定します。

前後に出てくる単語とは、以下のようなものです。

[ 私, は, 図書館, で、,を, 借りて, 読み, ました ]

単語の一致率の学習方法

「対象単語の前後に出てくる単語の一致率」を学習するために、Word2Vecでは以下のニューラルネットワークのモデルを使用しています。

1. CBoW (Continuous Bag-of-Words)

前後の単語を学習して、対象の単語が出現する確率が高い条件を学習する手法です。

例えば、推測単語が「本」「漫画」の場合、上の前後の単語リストに加えて、「私は、本屋で〇〇の新刊を購入しました」のような文章を追加学習させると、

[ 私, は, 本屋, で、, の, 新刊, を, 購入, しました ]

のような単語リストも作成できます。このように学習する文章を追加していき、推測単語が出現する確率の高い前後の単語リストを作っていく手法です。

2. Skip-gram

CBoWとは逆に、ある単語から前後の単語リストを推測する手法です。

これは、「本」や「漫画」という単語から、前後の単語リストを推測します。

[ 私, は, 図書館, で、,を, 借りて, 読み, ました ]
[ 私, は, 本屋, で、, の, 新刊, を, 購入, しました ]

CBoWとの違いとしては、このような特徴があるそうです。

Skip-gramは学習データが少なくてもある程度の精度がでるとされている。 そして、CBoWよりもSkip-gramの方が実験では意味的な精度が高くなる

https://deepage.net/bigdata/machine_learning/2016/09/02/word2vec_power_of_word_vector.html

まとめ

Word2Vecでは以上の2つの手法を用い単語の意味のベクトル表現を取得します。

CBoWとSkip-gramで抽出した「ある単語の前後に出現する単語リスト」からベクトル表現(単語の意味的な近さ)を計算する手法と、筆者は理解しています。

参考

自分ならどう実現するか?

例:

  • 私 / は / お正月 / に / お餅 / を / 食べ / ました。
  • 私 / は / クリスマス / に / ケーキ / を / 食べ / ました。

文脈での使われ方は、抽出できるかも「お正月」と「クリスマス」は、季節・時期で、「お餅」「ケーキ」は食べ物。