単語埋め込み [word2vec]

0

1. 概要

単語埋め込み(Word Embedding)とは,ある語彙の単語やフレーズ群を分散表現(Distributed Representation)に写像するニューラルネットを学習する特徴選択手法,あるいはその学習されたニューラル言語モデルおよび埋め込み自体をさす.単語埋め込みでは,one-hotベクトルで表現された語彙中の各単語を,300次元程度の低次元ベクトル表現(=単語埋め込み)に変換する.この際,埋め込み上には,学習に用いた大規模文章群における「各単語の意味的な距離感」に習った単語単語ベクトル空間を,教師なしで学習することができる.

単語埋め込みのニューラル言語モデルは,初期のものはモデルの複雑さやSoftmaxの学習計算コストの高さのハードルがあり,なかなかスケールしづらい実用的にはまだ使いづらい手法であった.それが2010年代に入り,NCE(Noise Contrastive Embedding)[6][7]を応用することによる計算効率化や,効率的で簡素な新モデルの提案などの改善が相次いだ.そして最終的に,2013年にTomas Mikolovらが提案したword2vec [1]により,大規模語彙から単語埋め込みを効率よく計算できる手法が提案され,高レベルの言語処理タスクを解く際の単語ベクトル表現として有用さも確認されていった結果,word2vecおよびその改善のGlove[2]が,NLPにおける単語表現のデファクトスタンダードとして用いられている.

この記事では,それらの単語埋め込みの代表格2つの「word2vec [1]」について主にまとめ, その改善版であるGloVe [2]についても最後に触れる.一方で,「単語」埋め込みに話を限定するので,word2vecからインスパイアされて登場した「単語以外の基本単位をベクトル空間化するxxx2vec」については本記事では触れない(例えば,Skip-Thoughtsのようなセンテンスの埋め込みや,フレーズ埋め込みなど).

以下の1.1節で準備として,まずは単語埋め込みが「コンテキスト」を用いてどのように学習を行うかについての直感的な導入を行う.そののちに,各節でword2vec(2節)とGloVe(3節)についてそれぞれ述べる.

1.1 コンテキストを用いた教師なし表現学習

word2vecの学習フェーズでは,学習データセットのテキスト群に対して,前後N単語の窓内において,注目単語から見て周辺にどの単語が配置されているかの「コンテキスト」を予測するモデルを学習する.この際に,品詞などの各単語に対するクラスラベルなどを一切用いることなく,与えられた文章データ中の窓内の出順のみを利用してword2vecを学習するので,「教師なし」表現学習手法である.その手段としては,予測したいターゲット単語と,それ以外多くの単語の2クラスを識別する問題を解く,負例サンプリング(2.3節)を利用する.

word2vecの学習の結果,ネットワークには,中間層のベクトル表現(300次元程度)が獲得できる.[1] のFigure 2「国名-首都のペアの単語埋め込み」にも可視化されているように,連携して同じ位置関係で出てくる単語同士は,単語埋め込み上でも同じ距離感に埋め込まれる).例えば vec(“Madrid”) – vec(“Spain”) + vec(“France”) が vec(“Paris”)の近くに来る.更に,図1に[10]の図例を示す.

図1 単語埋め込み後のベクトル空間における単語の配置例([10]のFigure 2).

図1の単語埋め込みでは,類似概念や対となる概念同士が,元の意味通りの配置でうまく埋め込まれていることがわかる.例えば,図1左側では“King -Man + Woman”は “Queen.”に近いベクトルになっており,図1右側では,単数系と複数形のペアが共に同じ位置関係に埋め込まれていることがわかる.

このように,大量の文を用意するだけで文法的なラベル付けやその他の言語学的なラベル付けはなしに,データドリブンに単語間の距離関係を単語ベクトル空間上に学習できる.この単語埋め込みは,様々な言語処理タスクで高い性能を発揮することがわかり,自然言語処理ではword2vecが広く利用されるようになった.

[参考] 近年のBERTへの移行

2019年現在では,よりGlobalなコンテキストを考慮して,なおかつ文ごとの登場位置による単語の意味の違い(つまりは文脈による意味の変化)も加味できる「BERT」が,word2vecの代わりに言語表現として使用されるケースが増えている.

2. word2vec

2.1 概要

word2vecに用いるニューラルネット構造には,[2]で提案されたSkip-gramContinuous Bag-of-Words (CBOW)の2種類がある.両モデルとも,「(多くとも前後5単語くらいの)窓内の近隣の単語同士が,どのような配置で登場するか」のコンテキストを学習する「単語入力-単語出力」の予測モデルを学習する.その結果,予測モデルであるニューラルネットの中間層に,低次元の単語埋め込みを得ることができる.skip-gram/CBOWのネットワークの中間層は300次元程度に設定する.この300次元のベクトル空間モデル(vector space model)上に学習された中間表現は,語彙中の全ての単語が分散表現(distributed representation)[8]として埋め込まれる.

word2vecで予測するのは語彙中の単語のどれか1つなので,softmax層で$V$クラス識別問題として解きたい.しかし,超大量クラスの識別問題なので.softmax関数をまともに計算すると分母の計算コストが高すぎて破綻してしまう.そこで,効率的に計算するためにword2vecの学習では,(1)階層的Softmaxと,(2)負例サンプリング[1] の2つの「softmax近似手法」を用いた計算効率化を行う戦略を取る(2.3節).

2.2 モデル構造:skip-gramとCBOW

Mikolovら[2]は,word2vec向けのニューラルネットワークモデルとして,Skip-gramと,その入出力が逆向きのモデルであるContinuous Bag-of-Wordsの2つのモデルを提案している.

1世代前のLSA(Latent Semantic Analysis)など用いた「共起」ベースのNeural Language Model手法では,入力単語から出力単語への変換に使用する巨大な(密)行列の計算が必須であり,計算コストが高かった.その前世代のものと比べると,CBOW/Skip-gramは変換部分が簡略され効率的になっているところに利点がある.

2.2.1 Continuous Bag-of-Words (CBOW)モデル : 周辺単語リストから中心単語を予測

CBOW [2]は,ターゲット単語を周辺の単語群をコンテキストとして用いて予測するモデルであり,次の節のskip-gramの反対向きモデルである.(skip-gramと同じ共通しているが) CBOWは入力の$V$次元one-hotから300次元程度の$H$次元単語埋め込みベクトルに埋め込んだあと,予測単語の$V$次元one-hotベクトルに変換する「Encoder-Decorder構造」のネットワークである.前半の全結合層のパラメータ行列$\bm{W}$により入力単語の単語埋め込みベクトルが推定され,そのあと後半の全結合層のパラメータ行列$\bm{W}ˆ{\prime}$により埋め込みベクトルから出力単語が推定される.

図2 CBOWモデル (窓サイズN= 2の場合).

図2が窓サイズ2の場合の例である.周辺コンテキストの単語の$V$次元one-hotベクトル群から,まず前半は埋め込み行列$W$を用いて,中間層の平均埋め込みベクトル$\tilde{\bm{h}}$が計算される.この平均ベクトルはCBOWの単語埋め込みであり,入力した周辺単語の平均表現である.後半は,平均ベクトルを用いて全結合層$Wˆ{\prime}$によりターゲット単語のone-hotベクトルを予測して出力する.

2.2.2 Skip-Gramモデル: 入力単語から周辺単語を予測

CBOWと予測の方向が真逆なのがskip-gram[1][2]モデルである.skip-gramでは,ある1つの単語を入力として,その周辺の窓内(前後N個ずつ)のコンテキスト単語を予測するモデルを学習する.

図3 skip-gramモデル.(窓サイズN=2の場合).

図3の窓サイズ前後$N=2$のskip-gramでは,$\bm{w}_t$を入力として,入力単語の周辺$N \times 2=4$個の単語$\bm{w}_{t-2}, \bm{w}_{t-1}, \bm{w}_{t+1},\bm{w}_{t+2}$の4クラスの確率が高くなるように,出力単語クラス確率を予測するモデルを学習する.skip-gramでも学習によりCBOWと同じく,$H=300$次元程度の単語埋め込み$\bm{h}_t$が中間表現として手に入る.

入力単語$c$のone-hotベクトルは,前半の全結合層の重み行列$\bm{W}$によって埋め込みベクトルに変換され,その後,$\bm{W}^{\prime}$を用いて出力単語$w$のone-hotベクトルである$\bm{w}$に変換される.

Skip-gramは,入出力ベクトルのほとんどの次元が「0」であることから,パラメータ行列$\bm{W},\bm{W}^{\prime}$は入力ベクトルと以下のような対応関係を持つ(※このあとロス関数の定式化時にこの話が関わってくる):

  • $\bm{W}$の各$i$列のベクトル$\bm{v}_i$は,入力one-hotベクトルの$i$次元($i$番目の単語)に対応している.
  • $\bm{W}^{\prime}$の各$j$列のベクトル$\bm{v}^{\prime}_j$は,出力のone-hotベクトルの$j$次元($j$番目の単語)に対応している.

2.3 ロス関数

CBOW/skip-gramを用いる際に,予測関数はlog-bilnearモデルで表現されており,出力はsoftmax層を用いて,出力単語が,語彙中の$V$個の単語のうちどの1つのクラスであるかを識別したい.しかし,一般に英語などの語彙数$V$は数千~数万のオーダーであり膨大であるので.softmax関数の分母(正規化目的の定数)を素直に$V$クラス全部計算していくと計算コストが膨大になってしまい実用的に破綻してしまう.そこでword2vecでは,softmaxの近似計算を行うことによる計算効率化が行われる.

2.3.1 word2vecの目的関数

Skip-gramモデルにおいて,単語埋め込みネットワーク= 単語予測ネットワークを学習するための目的関数がどういったものなのかを考えていきたい.

ある入力単語$c$を入力として,周辺の単語$w$を予測する条件付き確率モデルの出力を,以下のようにSoftmax関数で定義する:

\begin{equation} p(w|c)= \frac{\exp(\bm{v}^{\prime}_w {}^T\bm{v}_c)}{\sum_{i=1}^{V}\exp((\bm{v}^{\prime}_w {}^T\bm{v}_c))} (1)\end{equation}

ここで,$\bm{v}^{\prime}_w$ および,$\bm{v}_c$は,学習したい全結合層の,$w$と$c$の単語に対応する部分のベクトルであり,それらの類似度の内積を語彙中の全単語$V$に対して計算した「Softmax予測単語確率」である.

word2vecなどのニューラル言語モデルでは,このSoftmax関数は$V$クラス識別問題なので素直にCross-Entropy Lossを用いて学習したい:

\begin{align} \mathcal{L}_{\theta} = -\log p(w|c) \end{align}

ここで,先程の(1)の右辺softmaxを代入すると,対数の割り算を分解した結果,2項の和の形に変形できる:

\begin{align} \mathcal{L}_{\theta} = -\log \frac{\exp(\bm{v}^{\prime}_w {}^T\bm{v}_c)}{ \sum_{i=1}^{V}\exp(\bm{v}^{\prime}_w {}^T\bm{v}_c)}= -\bm{v}^{\prime}_w {}^T\bm{v}_c+ \log \sum_{i=1}^{V} \exp(\bm{v}^{\prime}_w {}^T\bm{v}_c) (2)\end{align} 

この2項目にSoftmaxの分母(俗に分配関数)が生き残っているせいで,語彙$V$が非常に大きい自然言語の語彙を対象にこの分母を毎回計算すると,計算コストが膨大すぎて実用的ではない.そこで,NCE (2.3.2-1節)では分母の分配関数$Z$も推定対象のパラメータとすることで,$V$個の語彙だけ分解関数をまじめに推定するのをスキップする戦略で,Softmax出力の計算高速化をはかる.

ちなみに,ニューラル言語モデルおよびword2vecでは,このsoftmax計算を近似で済ませて高速化するため,以下の2系統のsoftmax近似が提案されてきた:

  • softmaxベースの手法:階層化ソフトマックス [4], [5]
  • サンプリングベースの手法:NCEを応用[8], 負例サンプリング [1] (2.3.1節)

この記事では階層化ソフトマックスの説明は割愛し,ここからはNCEとその簡素化手法である負例サンプリングについて述べたい.

2.3.2 NCEのニューラル言語モデル学習への応用

NCEは,確率密度関数が正規化されていない「unnormalizedな分布」でもフィットさせることが可能である「(サンプリングベースの)効率的な条件付き予測分布のフィッティング手法」である [6,7].

過去の生成モデルの確率密度推定では,MCMCなどを用いて数値計算近似を行うので,大量のサンプルを生成する必要もあり,予測分布が確率なので,正規化項の大規模な計算により,計算コストが非常に高くなってしまっていた.

そこでNCEでは,主に以下の2つの工夫を行っている:

  • 工夫1:ロジスティック回帰を用いた「ターゲットサンプルとノイズサンプル間の2クラス識別問題」に推定問題を削減する(生成モデルへのフィッティング問題を,識別ロスで解くように変換).
  • 工夫2:予測分布の分解関数(分母の正規化項)$Z$もパラメータとして変数化し,パラメータ集合$\theta = {W, W^{\prime} }$と共に推定するようにする.これにより分配関数の実質的な計算がスキップできる.

NCEは任意の分布に対して適用できる手法であるが,MinhとTeh[8]の言語モデル向けの応用あたりから,ニューラル言語モデル・Word2vecでも条件付き予測分布の推定目的で応用されるようになった.(※近年では,Visual Self-supervised LearningにおいてもNCEがよく用いられている)

工夫1をword2vecの事例で改めて述べて,イメージを具体化しておこう.NCEは元の問題である「入力コンテキストからの,$V$クラス識別によるターゲット単語を予測する分布を推定する」を「予測単語の正しい単語クラスの分布 v.s. ノイズ分布(予測単語以外のネガティブ$V-1$クラス)の2クラス識別」に差し替えて,識別ロスで代わりにパラメータの学習を行う.すなわち,「入力($x$),正解単語($y_{pos}$)」と「入力($x$),正解以外のノイズ単語($y_{neg}$)」のどちらのペアなのかの識別する識別器学習する.

以上で概要は述べたので,具体的な定式化と学習の詳細についてみていきたい.

2.3.2-1 詳細とロス関数

NCEでは,「データサンプルの分布」と「ノイズサンプルの分布」の2つの分布の混合分布から複数単語をサンプリングし,それらをロジスティック回帰で識別できるようにすることを通して,データ分布$P(w|c)$のパラメータ$\theta$を学習する.

まず,サンプルがデータ分布とノイズ分布からそれぞれ以下のようにランダムサンプリングされるとする.

  • (1) ($d=1$)のデータサンプル:データ分布$p(w|c)$からサンプリングする.
  • (2) ($d=0$)のノイズサンプル:ノイズ分布$q(\tilde{w})$からサンプリングする(※$q(\tilde{w})$はフリーパラメータで自分で良い分布を探す)

これら2つの分布の混合分布からデータサンプルの単語$w$が生成されると仮定する.またGutman ら(2012) [7]に基づき,データサンプルに対してノイズサンプルの方が$k$倍だけ生成確率が高く,$1: k+1$ の比率で,それぞれの分布からサンプルが生成されると仮定する.すなわち,各学習サンプルは,入力単語$c$と正しい対応するポジティブの出力$w$,そしてノイズ分布からサンプリングされた$K$個のネガティブ単語から構成される事になる.

この仮定のもとで,NCEではノイズ分布から$K$個の負例(ノイズ)をサンプリングして選択する際に,$d$の条件付き尤度が最大化されるように2クラス識別問題を解くことで,パラメータ$\theta$を最適化する.すなわち,バイナリー識別問題としてのロス関数が以下のようになる:

\begin{align}\mathcal{L}_{\theta} = -[\log p(d=1|w,c) + \sum^{K}_{w_i \sim \mathcal{Q}} \log p(d=0|w_i,c)] (3)\end{align}

入力のコンテキスト単語$c$が与えられた際の$d$の条件付き尤度は,それぞれ以下のように表せる:

\begin{align} p(d,w|c)=\begin{cases} \frac{1}{k+1} p(w|c) & (d = 1) \\ \frac{k}{k+1} q(w) & (d= 0) \end{cases}\end{align}

これら2つの確率の和が1であることから,以下の通り,この2式を更に展開していくことができる:

\begin{eqnarray} p(d=1|w,c) = \frac{p(d=1|w,c)}{p(d=1|w,c)+p(d=0|w,c)}= \frac{p(w|c)}{p(w|c) + K q(\tilde{w})} \\p(d=0|w,c) = \frac{p(d=0|w,c)}{p(d=1|w,c)+p(d=0|w,c)}=\frac{K q(\tilde{w})}{p(w|c)+K q(\tilde{w})}\end{eqnarray}

以上を用いて,(3)式のロス関数は以下のように変形できる:

\begin{eqnarray}\mathcal{L}_{\theta} = -\log [\frac{p(w|c)}{p(w|c) + k q(\tilde{w})} + \sum^{K}_{w_i \sim \mathcal{Q}} \log\frac{K p(w|w_i)}{p(w|c)+k q(\tilde{w})}](4)\end{eqnarray}

ただ,既に述べたとおり,このロス関数では第2項のネガティブサンプル$K$個側に,分母に$p(w|c)$が含まれており計算コストが高い,

そこでNCEでは,以下のように,(1)の条件付き分布のうち,分母の正規化項を分離してそこもパラメトリックモデル化し,unnormalized化された分布のパラメータ$\theta^{0}$だけでなく,正規化項のパラメータ$\phi$も推定するように問題設定を変更する:

\begin{align} p_{\theta}(w|c)=p_{\theta^{0}}(w|c0)\exp(\phi) \end{align} 

ただ[8]では,この分配関数$Z$に相当する$\exp(\phi)$も,$Z=1$として学習しても十分よい推精度が達成できることが実験的に判明した.

ということで$\phi$の推定もことはやめて$Z \approx 1$と固定すると,$p(w|c) \approx \exp(\bm{v}^{\prime}_{w} {}^T\bm{v}_{c})$となり,これを(4)式に代入することで,最終的に以下のNCEロス関数が手に入る:

\begin{align}\mathcal{L}_{\theta} \approx -[\log \frac{ \exp(\bm{v}^{\prime}_{w} {}^T\bm{v}_{c})}{\exp(\bm{v}^{\prime}_{w} {}^T\bm{v}_{c})+ K q(\tilde{w})} + \sum^{K}_{w_{i} \sim \mathcal{Q}} \frac{K q(\tilde{w})}{\exp(\bm{v}^{\prime}_{w} {}^T\bm{v}_{c})+K q(\tilde{w})}] (5)\end{align}

この(4)式を用いることで,分配関数の計算を避けて,skip-gramを効率的に学習できる.

2.3.3 負例サンプリング

負例サンプリング [1]は,高品質の単語埋め込みを獲得できる範囲で,更にNCEを簡略化し計算効率化をはかったword2vec(のskip-gramモデル)の学習手法である.実装もNCEより単純でなおかつ学習も速い.負例サンプリングも,NCEと同様に「ターゲット(正解の予測単語) v.s それ以外全ての単語(ランダムにサンプリングした$K$個の負例の予測単語)」の2クラス識別学習を行うまでは同じである.

負例サンプリングがNCEと異なるのは,以下のように,2クラス識別器の出力をロジスティック回帰により近似する簡略化を行っている点にある:

\begin{align} p(d=1|w,c) &= \sigma (\bm{v}_{w} {}^T\bm{v}_c) \\ p(d=0|w,c) &= 1 – p(d=1|w,c) = \sigma (-\bm{v}^{\prime}_w {}^T\bm{v}_c)\end{align}

これにより,負例サンプリングのロス関数は以下のとおり計算できる:

\begin{align} \mathcal{L}_{\theta} &\approx – [\log p(d=1|w,c) + \sum_{i=1}^{K} \log p(d=0|w_i,c)] \\&= -[\log \sigma (\bm{v}_w {}^T\bm{v}_c) + \sum^{K}{w_i \sim \mathcal{Q}}\sigma_(\bm{v}_w {}^T\bm{v}_c)] \\ &= -[\log \frac{\exp(\bm{v}^{\prime}_w {}^T\bm{v}_c)}{\exp(\bm{v}^{\prime}_w {}^T\bm{v}_c) +1} + \sum_{w_i \sim \mathcal{Q}}\frac{1}{\exp(\bm{v}^{\prime}_w {}^T\bm{v}_c) +1} ]\end{align}

ノイズ分布$\mathcal{Q}$には,実験的に精度の良かった「ユニグラム分布を3/4乗したもの」が利用されている[1].

4. GloVe

メイン記事 : Glove (Gloval Vectors)

3節までに紹介したword2vec論文での「周辺$K$単語の窓内」のlocal コンテキスト予測に加え,旧来の言語モデルのごとくコーパス全体でのGlobalな単語間の共起もモデル化することで改善したものが, GloVe(Global Vectors)[2]である.

5. まとめ

この記事では,教師なしで大量の文章中の語彙の並びから,低次元のベクトル空間表現を学習する単語埋め込み(word2vec)のモデルと学習方法を紹介した.

事前学習済みのword2vecおよびその改善版のGloVeによる300次元ベクトルの表現は,自然言語処理やVision and Languageの様々な問題で使用されており,今日の深層学習では非常に重要な構成要素の1つである.

ただし,2018年~2019年以降は,Transformrsベースの「BERT」や,「GPT」など,更に進化した教師なし言語埋め込み手法が登場した.これにより,word2vecやGloveの代わりにBERTやGPTで得られた言語埋め込みを用いることが多くなってきていることには注意されたい.

  • [1] Tomas Mikolov, Ilya Sutskever, Kai Chen, Greg Corrado, and Jeffrey Dean. “Distributed representations of words and phrases and their compositionality.” Advances in neural information processing systems. 2013.
  • [2] Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean. “Efficient estimation of word representations in vector space.” arXiv preprint arXiv:1301.3781 (2013)
  • [3] Jeffrey Pennington, Richard Socher, and Christopher Manning. “Glove: Global vectors for word representation.” Proc. Conf. on empirical methods in natural language processing (EMNLP). 2014.
  • [4] Frederic Morin and Yoshua Bengio. “Hierarchical Probabilistic Neural Network Language Model.” Aistats. Vol. 5. 2005.
  • [5] Mnih, Andriy, and Geoffrey E. Hinton. “A scalable hierarchical distributed language model.” Advances in neural information processing systems. 2009.
  • [6] Michael Gutmann and Aapo Hyvärinen. “Noise-contrastive estimation: A new estimation principle for unnormalized statistical models.” Proc. Intl. Conf. on Artificial Intelligence and Statistics. 2010.
  • [7] Gutmann, Michael U., and Aapo Hyvärinen. “Noise-contrastive estimation of unnormalized statistical models, with applications to natural image statistics.” Journal of Machine Learning Research 13.Feb (2012): 307-361.
  • [8] Andriy Mnih and Yee Whye Teh. A fast and simple algorithm for training neural probabilistic language models. In Proceedings of the 29th International Conference on Machine Learning, pages 1751–1758, 2012.
  • [9] Bengio, Yoshua. “Learning deep architectures for AI.” Foundations and trends® in Machine Learning 2.1 (2009): 1-127.
  • [10] Mikolov, Tomáš, Wen-tau Yih, and Geoffrey Zweig. “Linguistic regularities in continuous space word representations.” In, NAACL-HLT 2013.
  • Kamath, Uday, John Liu, and James Whitaker. “Distributed Representations.” Deep Learning for NLP and Speech Recognition. Springer, Cham, 2019. 203-261.

外部リンク

0