word2vec (単語埋め込み)

記事を共有する:

1. word2vec (単語埋め込み) とは [概要]

word2vec とも呼ばれる 単語埋め込み(Word Embedding) とは,ある語彙の単語やフレーズ群を分散表現(Distributed Representation) へと写像するニューラルネットを学習しておき,その埋め込み後ベクトルを入力として各種の機械学習予測を行うための,特徴選択手法のことを指す.あるいは,その学習済みの(狭いローカル窓内の)ニューラル言語埋め込みEncoderや,そのEncoderで埋め込んだ先の「低次元隠れベクトル変数空間」のことをさす.

この記事では,単語埋め込み手法の代表格である Word2vec [1] について主にまとめる(2節).word2vecの改善版であるGloVe [2]についても最後に触れる(3節).一方で,単語埋め込みに話を限定するので,word2vecからインスパイアされて登場した「単語以外の基本要素をベクトル空間化するxxx2vec」については本記事では触れない(例: 文章埋め込みや,フレーズ埋め込みなど).

単語埋め込みでは,one-hotベクトルで表現された語彙中の各単語を,Auto-Encoding型のニューラルネットを用いて,その中間層の300次元程度の低次元ベクトル表現(= 単語埋め込みベクトルの空間)へと変換する.この際,埋め込み上には,学習に用いた大規模文章群における「各単語の意味的な距離感」に習った単語単語ベクトル空間を,教師なし学習することができる.

2015年頃以降に定番化した系列対系列変換ネットワーク (Transformerなど)では,トークン埋め込み層が内部に既に統合されていることが多いが,昔のWord2VecやGloVeは,埋め込みEncoderを別のモデルとして独立に学習・使用していた.

初期の単語埋め込み向けニューラル言語モデルは,モデルの複雑さやSoftmaxの学習計算コストの高さのハードルがあり,なかなかスケールしづらく,実用的にはまだ使いづらい手法であった.それが2010年代に入り,NCE(Noise Contrastive Estimation) [6][7] を応用した計算の近似効率化や,効率的で簡素な新モデルの提案などの改善が相次いだ.

そして最終的に,2013年にTomas Mikolovらが提案した word2vec [1] において,大規模語彙から単語埋め込みをMLP(多層パーセプトロン)へ効率よく計算できる手法が登場した.その後,高レベルの言語処理タスクを解く際の単語ベクトル表現として,word2vecの有用さが確認されていった結果,word2vecおよびその改善のGloVe [2] などが,NLPにおける,単語特徴ベクトルのデファクトスタンダードとして用いられている.

以下の1.1節では,まず前準備として,単語埋め込みが周辺単語コンテキストを用いてどのようにベクトル空間として単語表現の学習を行うかについて,直感的な導入を行う.その前準備が終了した後,2節で本題であるword2vecについて述べていきたい.

1.1 記事の構成

2節以降では,以下の構成でword2vecのモデルとその学習方法について紹介する.

  • 2節 : Word2vec
    • 2.1 概要
    • 2.2 word2vecモデルのネットワーク構造:Skip-gramモデルとCBOWモデル
    • 2.3 word2vecの学習:負例サンプリング
  • 3節: 改善版のGloVe (詳細は別記事にて)

1.2 準備:コンテキストを用いた教師なし表現学習

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

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

Word2Vec:単語埋め込み空間での単語の配置例
図1. Word2Vec:単語埋め込み空間での単語の配置例 ([10] のFigure 2 ).

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

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

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

2019年現在では,よりGlobalなコンテキストを考慮して,なおかつ文ごとの登場位置による単語の意味の違い(つまりは文脈による意味の変化)も加味できる「BERT」「GPT-2, GPT-3」などが,word2vecの代わりに,「事前学習型の言語モデル」として使用され,各タスクに転移学習するケースが増えている.

2. word2vec

2.1 word2vec の概要

word2vecに用いるニューラルネット構造には,[2]で提案されたSkip-gramContinuous Bag-of-Words (CBOW)の2種類がある.両モデルとも「(多くとも前後5単語くらいの)窓内の近隣の単語同士が,どのような配置で登場するか」のコンテキストを学習した「単語入力 – 単語出力」間の予測モデルを3層MLPに学習する.学習の結果,MLPの中間層に,低次元の単語埋め込みを得ることができる.

skip-gram・CBOWのネットワークの中間層は300次元程度に設定する.この300次元のベクトル空間モデル(vector space model)上に学習された中間表現は,語彙中の全ての単語が分散表現(distributed representation) [8]として埋め込まれる.

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

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

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

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

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

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

CBOW [2]は,ターゲット単語を周辺の単語群をコンテキストとして用いて予測するMLPモデルである(図2).次の節のskip-gramの反対向きモデルである.

(skip-gramと同じ共通しているが) CBOWは入力の $V$次元one-hotベクトルから,300次元程度の $H$次元単語埋め込みベクトルに埋め込み,その後予測単語の $V$次元one-hotベクトルに変換する構成の Encoder-Decorderモデルである.

前半の全結合層のパラメータ行列$\bm{W}$により入力単語の単語埋め込みベクトルが推定され,そのあと後半の全結合層のパラメータ行列 $\bm{W}^{\prime}$により埋め込みベクトルから出力単語が推定される.

図2は,窓サイズ2の場合のCBOWモデルの例である.周辺コンテキストの単語の$V$次元one-hotベクトル群から,まず前半は埋め込み行列$\bm{W}$を用いて順伝搬したものの平均を計算し,Encoder-Decoderの中間層の$\bar{\bm{h}} \in \mathbb{R}^{H}$が計算される.

この $\bar{\bm{h}}$が,CBOWモデルの単語埋め込みベクトルで,入力した周辺単語の平均表現として,分散表現が学習に使用した文章群から学習される.そして,ネットワーク後半では,平均ベクトルを用いて全結合層$W^{\prime}$によりターゲット単語のone-hotベクトルを予測して出力する.

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

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

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

図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も,$H=300$次元程度の単語埋め込み$\bm{h}_t$が中間表現として手に入る.

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

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 word2vec の学習:負例サンプリング

2.2節ですでに見てきたように,CBOWおよびskip-gramのニューラルネットは,出力がSoftmaxで3層MLPの対数バイリニアモデルで表現されている.

出力層では,語彙中の $V$個の単語のうち,どの1つ単語(クラス)に出力の単語が属するかを識別したい.しかし,一般に英語などの語彙数 $V$ は数万以上のオーダーであり膨大である.したがって,Softmax関数の分母(正規化目的の定数)を素直に$V$クラス全部計算していくと,計算コストが膨大になり,実用性的には破綻してしまう.

そこでword2vecではSoftmaxの近似計算を導入した計算効率化が行われる.

2.3.1 word2vec の目的関数

Skip-gramモデルにおいて,word2vecの単語埋め込みネットワーク(= 局所コンテキスト内の単語予測ネットワーク)を学習するための目的関数が,どういった関数なのか見ていきたい.

Skip-gramの入力コンテキストである単語を$w_C$とした際に,その周辺の単語のうち$w_o$を予測する条件付き確率モデル$p(w_o \mid c)$の出力は,以下のようにSkip-gramネットワークの出力層(図3)のSoftmax関数である:

\begin{equation}
p(w_o \mid c)= \frac{\exp(\bm{v}^{\prime}_{w_o} {}^{\top}\bm{v}_c)}{\sum_{j=1}^{V}\exp(\bm{v}^{\prime}_{w_j} {}^{\top} \bm{v}_c)} \tag{2.1}
\end{equation}

ここで,$\bm{v}^{\prime}_{w_o}$ は出力単語 $w_o$ を担当している「重み行列$\bm{W}$中の$j$列目にある列ベクトル」であり,$\bm{v}_{c}$は入力コンテキスト単語$c$に対応している「重み行列$\bm{W}^{\prime}$中の$i$行目にある行ベクトル」である.

word2vecのSoftmax出力を変形していく

さて,損失関数について考え始めたい.式(2.1)は,予測単語 $w_j$ のSoftmax出現確率である.word2vecは対数バイリニア型のニューラル言語モデルなので,損失関数としては,素直に負の対数尤度(交差エントロピー)を用いて学習したい:

\begin{align} \mathcal{L}_{\theta} = -\log p(w_o \mid c) \tag{2.2}\end{align}

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

\begin{align}
\mathcal{L}_{\theta}
&= – \log \frac{ \exp(\bm{v}_{w_o}^{\prime} {}^{\top} \bm{v}_c) }{ \sum_{j=1}^{V} \exp(\bm{v}_{w_j}^{\prime} {}^{\top} \bm{v}_c)}\\
&= -\bm{v}^{\prime}_{w_o} {}^{\top}\bm{v}_c + \log \sum_{j=1}^{V} \exp(\bm{v}^{\prime}_{w_j} {}^{\top} \bm{v}_c) \tag{2.3}
\end{align} 

しかし,(2.3)式の2項目にはSoftmaxの分母(俗に分配関数)が残っている.このせいで,語彙$V$が非常に大きい自然言語の巨大語彙を対象にこの分母を毎回計算すると,学習の計算コストが膨大になりすぎて実用的でなくなる.

そこで,NCE (2.3.2-1節)では,分母の分配関数$Z$も推定対象のパラメータとすることで,$V$個の語彙だけ分解関数をまじめに推定するのをスキップする戦略で,Softmax出力の計算高速化をはかる.

Softmax近似の2路線

ニューラル言語モデルおよび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 = {\bm{W}, \bm{W}^{\prime} }$ と共に推定するようにする.これにより分配関数の実質的な計算がスキップできる.

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

※ 近年では,Self-supervised Visual Representation Learning 向けの対照学習においても,NCE やその情報量版のInfoNCE がロス関数に用いられている.

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

すなわちニューラル言語向け(ここではword2vec)にNCEを用いることで,(入力 $x$ ,正解単語 $y_{pos}$)もしくは(入力 $x$ ,正解以外のノイズ単語 $y_{neg}$)のうち,どちらのペアなのかの2クラス識別を予測する識別器を学習する.以上で概要は述べた.次は定式化と学習の詳細について見ていきたい.

2.3.1.1 NCEの詳細,およびその損失関数

NCE (Noise Contrastive Estimation)はポジティブデータしかない場合に,自分でつくった分布からサンプリングさせたノイズネガティブとの識別を行う,2クラス識別器を学習することを通じて,(ポジティブな)データサンプルを生成する分布 $p(w \mid c)$ のパラメータ $\theta$ を学習する仕組みである.Word2Vecの場合だと,具体的には,「データサンプルの分布 (= ポジティブクラス)」と「ノイズサンプルの分布(ネガティブクラス)」の混合分布から,複数単語をサンプリングし,それら2つの分布から生成されたデータが識別できるよう,バイナリロジスティック回帰を学習する.

言い換えると,ネガティブサンプルを生成するノイズ分布との対照損失(Contrastive Loss)を用いて,生成モデルのパラメータを推定するという,教師なし対照表現学習(Contrastive Representation Learning)の一種である.

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

  1. [ポジティブクラス] $d=1$ のデータサンプル:データ分布 $p(w_o \mid c)$からサンプリングする.
  2. [ネガティブクラス] $d=0$ のノイズサンプル:ノイズ分布 $q(\tilde{w}) \sim \mathcal{Q}$からサンプリングする(※ $q(\tilde{w})$ はフリーパラメータであり,ユーザーが良い分布を設計して探す)

これら2つの分布の混合分布からデータサンプルの単語 $w$ が生成されると仮定する.

すなわち学習サンプル群は,入力単語 $c$ から条件付け生成されるポジティブクラスの単語 $w \sim p(w \mid c)$と,ノイズ分布 からサンプリングされた $K$ 個のネガティブクラスの単語 $\{\tilde{w}_1, \tilde{w}_1, \ldots \tilde{w}_K \} \sim \mathcal{Q}$ から構成される.

NCEはこの仮定のもとで,ノイズ分布から$K$個の負例(ノイズ)をサンプリングして選択する際に,$d$ の条件付き尤度が最大化されるように,2クラス識別問題をロジスティック回帰で解くことにより,パラメータ $\theta$ を最適化する.つまりは,(無理やり)ネガティブクラスに相当するデータを生成するノイズ分布を用意することで,生成モデルの学習を2クラス識別器の学習の問題へと変化させている.

具体的には,以下のように,ロジスティック回帰による2値識別問題として損失関数を設定する:

\begin{align}
\mathcal{L}_{\theta} = – \left[\log p(d=1 \mid w,c) + \sum^{K}_i {}_{w_i \sim \mathcal{Q}} \log p(d=0 \mid \tilde{w}_i,c) \right] \tag{2.4}
\end{align}

ここでは,Gutman ら(2012) [7]に基づき,データサンプルに対してノイズサンプルの方が $k$ 倍だけ生成確率が高く,$1: k+1$ の比率で,それぞれの分布からサンプルが生成されると仮定している.

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

\begin{align}
p(d,\textcolor{red}{w} \mid c) =
\begin{cases} \frac{1}{k+1} p(w \mid c) & (d = 1) \\
\frac{k}{k+1} q(\tilde{w}) & (d= 0) \end{cases}\tag{2.5}
\end{align}

この式(2.5)の,2つの確率の和は1であることから,以下の通りに更に展開できる:

\begin{align}
p(d=1 \mid w, c)
&= \frac{p(d=1,\textcolor{red}{w} \mid c)}{p(d=1,\textcolor{red}{w} \mid c)+p(d=0,\textcolor{red}{w} \mid c)}\\
&= \frac{p(w \mid c)}{p(w \mid c) + K q(\tilde{w})} \\
p(d=0 \mid w,c)
&= \frac{p(d=0,\textcolor{red}{w} \mid c)}{p(d=1,\textcolor{red}{w} \mid c)+p(d=0,\textcolor{red}{w} \mid c)}\\
&= \frac{K q(\tilde{w})}{p(w \mid c)+K q(\tilde{w})} \tag{2.6}
\end{align}

以上より,式(2.4)の損失関数は,式(2.6)を用いて以下のように変形できる:

\[
\mathcal{L}_{\theta} = -\log \left[\frac{p(w \mid c)}{p(w \mid c) + K q(\tilde{w}_i)} + \sum_{i,\tilde{w}_i \sim \mathcal{Q}}^{K} \log\frac{K q(\tilde{w}_i)}{p(w \mid c)+K q(\tilde{w}_i)} \right]\tag{2.7}
\]

word2vec論文における更なる問題の変更:正規化項もパラメータ化してNCE.

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

そこでNCEでは以下のように,式(2.1)の条件付き分布のうち,分母の正規化項を分離して,パラメトリックモデル化を行う:

\[
p_{\theta}(w \mid c) =p_{\theta^{0}}(w \mid c_0 )\exp(\phi) \tag{2.8}
\]

すなわち,unnormalized化された分布のパラメータ$\theta^{0}$だけでなく,正規化項の分母のパラメータ $\phi$ も推定するように,最適化対象を拡大する.

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

\[
p(w \mid c) \approx \exp(\bm{v}^{\prime}_{w} {}^T\bm{v}_{c})\tag{2.9}
\]

となる.この式(2.9)を式(2.7)に代入すると,以下の最終的なNCE損失関数が手に入る:

\begin{align}
\mathcal{L}_{\theta}
\approx -\left[\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}_{i, \tilde{w}_i \sim \mathcal{Q}} \frac{K q(\tilde{w}_i)}{\exp(\bm{v}^{\prime}_{w} {}^T\bm{v}_{c})+K q(\tilde{w}_i)} \right]\tag{2.10}
\end{align}

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

2.3.3 負例サンプリング

負例サンプリング [1] は,高品質の単語埋め込みを獲得できる範囲で,更にNCEを簡略化し,計算効率化をはかったword2vec(のskip-gramモデル)の学習手法である.NCEより実装も単純であり,なおかつ学習も速い.

負例サンプリングも,NCEと同様に「ターゲット(正解の予測単語) v.s それ以外全ての単語(ランダムにサンプリングした$K$個の負例の予測単語)」の2クラス識別学習を行う点は同じである.

負例サンプリングがNCEと異なるのは,以下のように,2クラス識別の出力を,シグモイド関数で近似する簡略化をおこなう点にある:

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

NCEでは式(2.7)式(2.9)のように,2クラスモデルの出力を真面目にロジスティック回帰でモデル化していたが,負例サンプリングでは式(2.11)のようにシグモイド関数で出力を近似している.

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

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

式(2.10)のNCE損失関数と比べると,式(2.12)の負例サンプリングの方が単純な計算式であるので,学習が効率化できる.

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

3. GloVe

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

4. まとめ

この記事では,教師なしで大量の文章中の語彙の並びから,低次元のベクトル空間表現を学習する単語埋め込み(word2vec)のモデル(CBOW, skip-model)と学習方法(負例サンプリング)を紹介した.事前学習済みのword2vec,およびその改善版のGloVeによる300次元ベクトル程度の表現は,V-LやNLPの様々な問題で,単語特徴ベクトル(分散表現)として使用されていた.また,埋込み層を言語モデルの単語入力部分に学習するようになって以降も,その初期パラメータとしてword2vecやGloVeを用いる.今日の深層学習では,これらの分散表現ネットワークは,非常に重要な構成要素の1つである.

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

word2vecやGloVeは,言語モデルや言語変換モデルと分離して学習していた.それが,TransformerやBERT/GPTでは,トークン埋込み層も言語モデルと同時にいっぺんに学習するところが異なる.

References

  • [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.

参考書籍

外部参照リンク

関連記事