オムライスの備忘録

数学・統計学・機械学習・プログラミングに関することを記す

【自然言語処理】Word2Vec

  • こんな方におすすめ

深層学習・ディープラーニングでも必要な「Word2Vec」の基本的な内容について知りたい。



キーワード・知ってると理解がしやすい



ニューラルネットワーク yhayato1320.hatenablog.com

分散表現 yhayato1320.hatenablog.com

Index

出典

2013 年 Mikolov らによって提案された手法.

「word2vec」とは

単語 (Word) をベクトル (Vector) として表現、変換するための手法の1つ

Word To Vector


単語に対して、文脈非依存の分散表現を学習するモデル. 単語に文脈非依存の分散表現を与えることを、単語埋め込み (Word Embedding)という.

単語の分散表現

単語を固定長のベクトルで表現することを「単語の分散表現」(Word Embedding) と呼ぶ.
word2vec も単語の分散表現を取得する手法の1つ.

単語の分散表現

分布仮説

「単語の意味は周囲の単語によって形成される」という前提・アイディア・考え.

分布仮説

「カウントベース」と「推論ベース」

ここでは、カウントベースについては言及しませんが、自然言語処理において、単語の分散表現を取得する手法としては、大きく分けて2つある.
1つは「カウントベース」と言われる手法で、1つは「推論ベース」と言われる手法.
word2vec は、「推論ベース」に含まれる手法.

推論ベース

推論ベース

推論ベースという名称なので、この手法は、
ある「入力」から何かを「出力=推論結果」するような形式をとる.
どんな入力からどんな出力を推定するモデルなのかがポイントになる.

ニューラルネットにおける単語の処理方法

ニューラルネットで単語を処理するには、それを「固定長のベクトル」に変換する必要がある. そのための方法のひとつは、単語を one-hot 表現 / ベクトルへの変換する.

word2vec のモデル

word2vec で使用されるモデルは、ニューラルネットワーク (NN) を用いられることがスタンダードで、有名なモデルは2つある.

  • CBOW モデル
  • skip-gram モデル

word2vec

2つのモデルを紹介.

CBOW モデル

Continuous Bag-of-Words (CBOW) は、「コンテキスト」から「ターゲット」を推測するNNモデル. (ターゲットは文章中の一単語、その周囲の単語がコンテキスト)

CBOW モデルへの入力は、コンテキストの one-hot ベクトル集合で、出力は単語の予測スコア. 以下の図のようなイメージ.


CBOWモデル

ここでは、コンテキストは予測する単語(ターゲット)の前後をコンテキストとしているため、2つの入力があるような図に見える、、、
しかし、入力が複数ある場合は、入力を複数にする.


入力層から中間層への変換に利用している重み  W_{in}分散表現となる.  W_{in} は (語彙の数) x (変換後のベクトルの次元数) となり、この分散表現を利用すれば、語彙に含まれる 単語 one-hot ベクトルが 変換したい次元のベクトルに変換できることがわかる.



事後確率を利用して、確率モデルとして考えると以下のようになる.

CBOW の確率モデル

 P(w_{t} | w_{t-1}, w_{t+1})

skip-gram モデル

skip-gram モデルは、CBOW モデルとは逆で、「ターゲット」から「コンテキスト」を推測するNNモデル. つまり、ある単語(ターゲット)から周囲の単語(例えば前後の単語など = コンテキスト)を予測するモデル.


skip-gramモデル

入力は、ターゲットとなる単語の one-hot ベクトルで、 出力は、コンテキストとなる複数の単語 の one-hot ベクトルの集合となる.


CBOW と同様、コンテキストは予測する単語(ターゲット)の前後をコンテキストとしているため、2つの出力があるような図に見えるが
出力が複数ある場合は、出力を複数にする.


事後確率を利用して、確率モデルとして考えると以下のようになる.

skip-gram の確率モデル

 P(w_{t-1}, w_{t+1} | w_{t})

分散表現としての利用

二つのモデルとも目的は、単語の分散表現を取得すること.
では、上のモデルで学習を行い、パラメータ (上図での W_in と W_out)が最適化されたとして、どのように分散表現と利用するのか?
それは、、、W_in (または W_out と両方)を分散表現のベクトルして利用する.

分散表現としての利用

問題点

Word2Vec の「各単語に対して一意に分散表現を与える」という性質は、 多義語を扱う際に問題になる.


  • 彼は舞台の上手に立った。
  • 彼は料理が上手だ。
上の二つの文章では異なる意味の「上手」が使われている. しかし、Word2Vec では、「上手」という単語に与えれられる分散表現は一意に定まるため、 このような「文脈に応じた意味の変化」を扱うことができない.


また、単語の分散表現を利用して、文章をベクトルで表現することを考える.
その場合、文中の単語の分散表現の(重み付き)平均を利用することがあるが、 そうなると、文章の語順が考慮されないことになる.


  • ジョンはボブに本を貸した。
  • ボブはジョンに本を貸した。
上の場合、各単語を分散表を利用してベクトル化した後、(同じ重みで)平均をとり、文章ベクトルを作成したとき、 同じ値になってしまう.


そこで、ELMo のような文脈化単語埋め込み (Contextualized Word Embedding)が利用される.

参考