Reeed

Reeed's Blog

github

NNLM:意外に誕生した単語埋め込みの神経ネットワーク言語モデル

n-gram の後の重要な技術は NNLM(Neural Network Language Model)であり、Yoshua Bengioらによって 2003 年に提案されました。元々は神経ネットワークを用いて言語モデルを改善しようとしただけでしたが、偶然にも単語埋め込みを発明しました。

表現の問題:順序エンコーディングから one-hot へ#

NNLM に入る前に、より基本的な問題を理解する必要があります:コンピュータに語彙を理解させるにはどうすればよいのでしょうか?

機械学習の初期段階では、研究者は根本的な問題に直面しました:コンピュータは数字しか理解できませんが、現実世界のデータは多くがカテゴリに分かれています。例えば、性別は男 / 女、色は赤 / 緑 / 青 / 黒などです。

最初の考えは非常に単純で粗暴でした:各カテゴリに数字を割り当てることです。例えば、性別カテゴリでは男 = 1、女 = 2、色カテゴリでは赤 = 1、緑 = 2、青 = 3 です。しかし、この順序エンコーディングには重大な問題があります —— それは、実体間の大きさや距離の関係を暗示してしまうことです。

例を挙げると、赤 = 1、緑 = 2、青 = 3 の場合、機械学習で距離計算を行うと:

  • 赤と緑の距離:|1-2|=1
  • 赤と青の距離:|1-3|=2
  • 緑と青の距離:|2-3|=1

モデルは赤と緑がより似ていると考え、赤と青の差が大きいと判断します。しかし、実際には赤、緑、青の三原色は等距離の関係にあり、誰が誰に近いということはありません。

このような意味の曖昧さの問題を解決するために、one-hot エンコーディングが登場しました。その核心的な考えは、ベクトルの直交性を用いてカテゴリの独立性を表現することです。赤、緑、青を例にとると:

  • 赤:[1, 0, 0]
  • 緑:[0, 1, 0]
  • 青:[0, 0, 1]

各カテゴリは直交ベクトルであり、互いの距離は等しく、暗黙の大きさの関係はありません。この考え方は線形代数の基ベクトルの概念に対応しています —— 各カテゴリは高次元空間における標準基ベクトルであり、互いに直交し、長さが等しいのです。

one-hot のジレンマ#

one-hot エンコーディングは順序エンコーディングの問題を解決しましたが、新たな悩みをもたらしました:

次元の呪い:10000 語の語彙を持つ場合、one-hot エンコーディングには 10000 次元のベクトル空間が必要です。現実の語彙はさらに大きく、エンコーディング空間は非常に巨大になります。

疎性:次元が大きすぎると、全体のベクトル中の有効情報が非常に少なくなります。10000 次元のベクトルの中で 1 つの位置だけが 1 で、残りは全て 0 という疎性は、計算や保存に不利です。

意味のギャップ:one-hot は実体間の真の関連性を完全に捨て去ります。例えば、「犬」と「猫」はどちらも動物であり、意味的には類似性がありますが、one-hot エンコーディングではそれらの距離は「犬」と「自動車」の距離と同じになります。

これらの問題は言語モデルにおいて特に顕著です。n-gram の正確なマッチング手法でも、神経ネットワークの one-hot エンコーディングでも、語彙間の意味的類似性を捉えることができず、モデルの一般化能力が低下します。

NNLM の解決策#

NNLM の登場は、n-gram の次元の呪いと one-hot エンコーディングの限界という二つの問題を同時に解決しました。

n-gram が直面する次元の呪い:テストする語の列が訓練データに一度も現れなかった場合、従来の方法では合理的な確率推定を行うことが難しいです。まるで暗記のように、見たことのある文のパターンしか覚えられず、新しい組み合わせに出会うと無力です。

NNLM のアイデアは非常に巧妙です:もし語の列が意味的に類似した語で構成されているなら、その列が一度も見たことがなくても、高い確率を得るべきです。例えば、モデルが「I love cats」を見たことがあれば、「I adore dogs」にも合理的な確率を与えるべきです。なぜなら、「love」と「adore」、「cats」と「dogs」は意味的に類似しているからです。

この能力を実現するために、モデルは語彙間の類似性を学ぶ必要があり、これは語彙を one-hot のような離散的な直交ベクトルではなく、何らかの連続的なベクトル空間として表現する必要があります。

NNLM の動作メカニズム#

NNLM のアーキテクチャは複雑ではなく、2 層の MLP で構成されています。これは同時に二つのことを学習します:各語のベクトル表現と、それらのベクトルに基づく確率予測です。

1748682900245

埋め込み層:疎から密への変換#

次の語を予測するために、NNLM は最初に前のいくつかの語(例えば最初の 3 つの語)の one-hot ベクトルを埋め込み行列 C を通じて低次元の密なベクトルに変換します:ai=CWia_i = CW_i
語彙のサイズが V=10000、埋め込み次元が d=300 の場合、C は 300×10000 の行列です。もし私たちがある語の one-hot ベクトルWiW_i(次元は 10000×1 で、j 番目の位置だけが 1 で、残りは全て 0)を持っている場合、行列の積CWiCW_iは実際には行列 C の j 列を取り出し、300 次元のベクトルを得ることになります。
言い換えれば、埋め込み行列 C の各列は語彙の中のある語のベクトル表現に対応しています。訓練が始まると、これらのベクトルはランダムに初期化されますが、訓練が進むにつれて、意味的に類似した語はこの 300 次元空間の中で徐々に集まっていきます。

連結層:文脈表現の構築#

次に、これらの語ベクトルを連結して完全な文脈表現を形成します:
X=concat(a1,a2,a3)X = \text{concat}(a_1, a_2, a_3)
各語ベクトルが 300 次元であれば、3 つの語を連結すると、XXは 900 次元のベクトルになります。

なぜ単純な連結であって、加算や他の操作ではないのか?
連結は語の順序情報を保持し、モデルが「A B C」と「B A C」のような異なる組み合わせを区別できるようにします。

隠れ層:非線形特徴抽出#

連結されたベクトル X は隠れ層に送られ、非線形変換が行われます:
h=tanh(W1X+b1)h = \tanh(W_1X + b_1) この隠れ層の役割は、より高次の特徴を抽出することです。線形変換W1X+b1W_1X + b_1は 900 次元の入力を隠れ層の次元(例えば 500 次元)にマッピングし、その後tanhtanh活性化関数が非線形性を導入します。

なぜ非線形が必要なのか?
活性化関数がなければ、全体のネットワークは一連の線形変換の組み合わせに過ぎず、単層の線形モデルと同等になり、表現能力が大幅に低下します。tanh 関数はモデルが語の組み合わせの複雑なパターンを学習できるようにします。

出力層:確率分布の計算#

最後に、隠れ層の出力は語彙のサイズのベクトルにマッピングされ、softmax を通じて確率分布が得られます:
P(w4w1,w2,w3)=softmax(W2h+b2)P(w_4|w_1,w_2,w_3) = \text{softmax}(W_2h + b_2)
ここでW2W_2は 500×10000 の行列で、隠れ層の 500 次元の出力を 10000 次元(語彙のサイズ)にマッピングします。softmaxsoftmax関数はすべての語の確率の合計が 1 になることを保証します:
P(wi)=exp(zi)j=1Vexp(zj)P(w_i) = \frac{\exp(z_i)}{\sum_{j=1}^{V} \exp(z_j)}
ここでziz_iは i 番目の語に対応する logit 値(スコア)です。

パラメータの更新#

訓練時には交差エントロピー損失関数が使用され、目標は正しい語の確率を最大化することです。逆伝播はすべてのパラメータを同時に更新します:W1,b1,W2,b2W_1, b_1, W_2, b_2、そして最も重要な埋め込み行列 C も更新されます。

埋め込み行列 C の更新は最も重要な部分です。次の語をより良く予測するために、勾配は「意味的に類似した」語がベクトル空間でより近くなるように「奨励」します。例えば、「cat」と「dog」が似た文脈で頻繁に出現する場合、それらのベクトル表現は徐々に近づいていきます。

次元変化の完全なプロセス
全体のプロセスにおける次元の変化は次のようになります:

入力:3 つの 10000 次元の one-hot ベクトル
埋め込み後:3 つの 300 次元の密なベクトル
連結後:1 つの 900 次元のベクトル
隠れ層:1 つの 500 次元のベクトル
出力層:1 つの 10000 次元の確率分布

このようなアーキテクチャは意味的類似性を学習できるのは、モデルが限られた埋め込み空間の中で各語に適切な位置を見つけることを強いられ、予測タスクが自然に似た文脈に出現する語を集めるからです。

思わぬ収穫#

当時、Bengio たちの主な目標は言語モデルの改善でしたが、モデルを訓練した後、埋め込み行列 C が非常に興味深いことを学習したことがわかりました。類似した語は確かにベクトル空間で集まっており、これらのベクトルは数学的な演算も行えることがわかりました。例えば、有名な式である king - man + woman ≈ queen です。

この発見は one-hot エンコーディングの 3 つの主要な問題を一挙に解決しました:

  • 次元の問題:10000 次元から数百次元に減少
  • 疎性の問題:密なベクトルに変化
  • 意味のギャップの問題:類似語が空間で近くに位置する

当時はまだ「単語埋め込み」という専門用語はありませんでしたが、このアイデアはすぐに他の研究者に注目されました。2008 年、Collobert と Weston は事前学習された単語ベクトルが下流タスクでの威力を証明しました。2013 年には、Mikolov らが Word2Vec ツールキットを発表し、単語ベクトルを学習するためのものとして、単語埋め込み技術が本格的に普及しました。

Word2Vec は NNLM のアーキテクチャを簡素化し、2 つのモデルを提案しました:CBOW(文脈に基づいて目標語を予測)と Skip-gram(目標語に基づいて文脈を予測)。Skip-gram は小さなデータセットや希少語においてより良いパフォーマンスを発揮し、CBOW は訓練が速く、頻繁に出現する語に対してより良い結果を出します。

NNLM の利点と限界#

n-gram と比較して、NNLM の最大の利点は一般化能力です。Bengio たちの実験では、NNLM は 2 つのテキストコーパスで当時の最先端の trigram モデルを大幅に上回りました。また、単語埋め込みという「副産物」は後に非常に大きな価値を持つことが証明されました。

しかし、NNLM にも多くの問題があります。

まずは計算の複雑さです。神経ネットワークの訓練は単純な n-gram のカウントよりもはるかに遅いです。次に、マルコフ仮定の制約を受けなくなったものの、固定長の履歴しか見られず、任意の長さの文脈を処理することはできません。また、各語には 1 つの固定されたベクトル表現しかなく、多義語の問題を処理できません。

さらに、実際の問題として大規模な語彙に対する softmax の計算が非常に遅いということがあります。

これらの問題は後続の研究にインスピレーションを与えました。

一部の考察#

表現学習の観点から見ると、NNLM は良い表現が問題解決の鍵であることを証明しました。順序エンコーディングから one-hot、そして単語埋め込みへと、各ステップはデータの表現方法を最適化しており、表現の改善はしばしばパフォーマンスの顕著な向上をもたらします。

技術の進歩は漸進的であり、各世代は前の世代の基盤の上に問題を解決しています。順序エンコーディングは基本的な数値化の問題を解決し、one-hot は意味の曖昧さの問題を解決し、単語埋め込みは疎性と意味的類似性の問題を解決しました。そして、時には結果がそれほど重要ではなく、むしろプロセスが最も重要であることもあります。NNLM から派生したWord2Vecのように。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。