word2vecまたはGloVeに2つの行列が必要な理由


10

Word2vecとGloVeは、最もよく知られている2つの単語埋め込み方法です。多くの研究は、これらの2つのモデルは実際には互いに非常に接近しており、いくつかの仮定の下では、コーパス内の単語の共起のppmiの行列因数分解を実行することを指摘しました。

それでも、これらのモデルに2つの行列(1つではなく)が実際に必要な理由を理解できません。UとVに同じものを使用できませんか?勾配降下の問題ですか、それとも別の理由がありますか?

誰かが私に言ったのは、1つの単語の埋め込みuとvは、単語がそれ自体のコンテキストでめったに出現しないという事実を表現するのに十分なはずであるためです。しかし、それは私にはわかりません。


それらの寸法は異なります。どのように同じマトリックスを使用できますか?しかし、彼らは同じ潜在的な空間に住んでいます。
Emre 2018年

1
それらは同じ次元(語彙の単語数x埋め込み次元)を持っています
Robin

回答:


6

あなたが求めている答えではないかもしれませんが、私はまだ挑戦します:

まず、word2Vecを簡単に確認します。スキップグラムを使用していると仮定します。

典型的なWord2Vecトレーニング可能なモデルは、1つの入力レイヤー(たとえば、10000のロングワンホットベクトル)、1つの非表示レイヤー(たとえば、300ニューロン)、1つの出力(10000ロングワンホットベクトル)で構成されています。

  • 入力:10 000
  • 非表示:300
  • 出力:10 000

入力-非表示の間に行列Eがあり、ワンホットを埋め込みにする重みを記述します。各列(または、優先表記に応じて行)は、それらの300ニューロンの事前活性化(対応する着信1ホットベクトルへの応答)を表すため、マトリックスは特別です。

これらの300個のニューロンでアクティブ化を実行する必要はなく、それらの値をすぐに将来のタスクの埋め込みとして使用できます。


ただし、ワンホットを300次元の表現に圧縮するだけでは十分ではありません。意味があるはずです。そして、追加の2番目の行列を使用して、この意味が正しいことを確認します。これは、非表示を出力に接続します

実行時にアクティベーション関数は必要ないため、非表示レイヤーをアクティブにしたくありませんが、その場合は、非表示から出力に向かう2番目のマトリックスが必要になります。

この2番目のマトリックスは、埋め込みとはまったく異なるワンホットになります。そのようなワンホットは、元のワンホットの近くに(文脈上)存在する可能性が最も高い単語を表します。つまり、この出力は元のワンホットではありません。

そのため、2番目の行列が必要です。出力では、分類問題と同様に、ソフトマックスを実行します。

これにより、関係 "word"-> embedding-> "context-neighbor-word"を表現できます。

これで、バックプロパゲーションを実行して、入力非表示の重み(最初の行列E)を修正できます。これらは、私たちが本当に気にしている重みです。これは、Matrix Eをランタイム中に使用できるため(おそらく)、最初の完全に接続されたレイヤーとして一部のリカレントニューラルネットに接続されているためです。

その場合、これ使用しません

これらの300個のニューロンでアクティブ化を実行する必要はなく、それらの値をすぐに将来のタスクの埋め込みとして使用できます

代わりに、ランタイム中に、そのマトリックスから適切な列(または希望の表記に応じて行)を取得します。この方法の利点は、ワンホットで機能するように設計された、非常に安価な事前トレーニング済みの完全接続レイヤーが得られることです。通常、最初のレイヤーのトレーニングには最も時間がかかります。


トレーニング中に2番目のマトリックスが必要な理由:

繰り返しますが、非表示のレイヤーにはアクティブ化はありません。

元の「入力ワンホット」に応じて「ワンホット」が作成されたはずのネットワークを指示でき、正しい答えを生成できない場合はネットワークを罰することができます。

埋め込みに変換するメカニズムを呼び出すことに関心があるため、隠れ層の直後にsoftmaxを配置することはできません。これはすでに最初の行列Eの責任です。したがって、出力レイヤーで異なるが類似の(コンテキストごとの)隣接語について結論を形成するための十分な余地を与える追加のステップ(追加の行列)が必要です。

ランタイム中に、2番目のマトリックスを破棄します。ただし、戻ってモデルのトレーニングを続ける必要がある場合に備えて、完全に削除しないでください。


word2vecの場合、実際には、コンテキスト出力層から埋め込みを介して入力単語層への勾配降下を実行します。しかし、追加の行列と呼ばれるものに対して同じ行列を持つことを妨げるものは何もありません。さらに、埋め込みを計算するときに、これらの2つの行列を実際に合計(または連結)することができ、一部の論文ではさらに優れた埋め込みが得られると報告されています。あなたが神経モデルを考えるならば、これはすべて理にかなっていると私は同意しますが、なぜそれらを2つの異なるエンティティにする必要があるのか​​説明が必要です。
Robin

つまり、次のようにモデルを作成できます。入力レイヤー*埋め込みマトリックス=>埋め込み/埋め込み*寝具マトリックスの転置=>出力レイヤー
Robin

その場合、それが本当に可能であれば、私はこの情報に興味があります。5人の著者全員に個別にメールを送って問題を説明することをお勧めします。ここからの著者アプローチが実行可能であるかどうか結果を教えてください
カリ

多分それは(すべての反復で)逆行列を計算するコストに関連しています-それは私が推測するかなり大きいでしょう
Kari

1
転置は逆ではありません。debzsudが提案する唯一の非標準的なことは、レイヤー間のウェイト共有であるため、共有ウェイトを使用してバックプロパゲーションを計算する必要があります-これは実行可能でなければなりません。同じ問題を解決するために2倍少ないパラメーターで十分かどうかは、唯一の疑問だと思います。自分自身を実装して比較することはそれほど難しくないはずです。
Valentas

3

これらのモデルに実際に2つの行列(1つではない)が必要な理由。UとVに同じものを使用できませんか?

原則として、あなたは正しいです。しかし、パラメーターの数を増やすことは実際には有益であるため、したくありませんが、ベクトルの意味はどうでしょうか?

論文は何を言っていますか?

Word2vec:変数を紹介するためだけの入力/出力ベクトルについての言及は1つだけです。

GloVe:「単語と文脈単語の区別は任意であり、2つの役割を自由に交換できること」

弱い正当化:

(ターゲット、ソース)または(出力、入力)とも呼ばれるベクトルのペア(単語、コンテキスト)は、1つの単語が果たす2つの異なる役割を反映するために使用されます。ただし、単語は同じ文で「ターゲット」と「コンテキスト」の両方の役割を果たすため、正当化は不十分です。たとえば、「ディープラーニングが大好き」という文では、Pdeep|leargdeep ターゲットですが、次に Plearg|deep、それはコンテキストですが、 deep文全体で同じ意味を持っています。この分離はデータに裏付けされていないと結論付けることができます。

したがって、単語の埋め込みの場合、この分離は、パラメーターの数を増やすことによって得られるパフォーマンス向上のための単なる物語であり、それ以上深くはありません。

正当な理由:

ただし、有向ネットワークに埋め込まれるノードのようなタスクでは、役割がデータレベルで反映されるため、正当化は確実です。たとえば、リンクの場合aba リンクの受信側にあるのとは意味的に異なるソースです b。ソースノードは、別のリンクのターゲットでない限り、「ターゲット」の役割を果たすことはありません。したがって、ターゲット(ソース)ノードにターゲット(ソース)表現を使用することで、意味論の意味のある分離が期待できます。無向グラフの場合、単語の埋め込みと同じように、この正当化は失敗します。

一部の論文では、作成者はエンティティがデータレベルで果たす追加の役割に基づいて4つの表現を選択することさえしています。これは、意味的に正当化可能であり、パフォーマンスをさらに向上させます。

結論:

全体の前提は、「パラメータ数の増加が報われる場合は、それを実行します。意味的に正当化できる場合は、さらに良い」です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.