以下の論文を読んでいて、ネガティブサンプリングの概念を理解するのに問題があります。
http://arxiv.org/pdf/1402.3722v1.pdf
誰か助けてもらえますか?
回答:
のアイデアはword2vec
、テキスト内で(互いにコンテキストで)近くに表示される単語のベクトル間の類似性(内積)を最大化し、そうでない単語の類似性を最小化することです。リンク先の論文の式(3)では、べき乗を少し無視します。あなたが持っている
v_c * v_w
-------------------
sum(v_c1 * v_w)
分子は基本的に単語c
(文脈)とw
(ターゲット)単語の類似性です。分母は、他のすべてのコンテキストc1
とターゲット単語の類似性を計算しw
ます。この比率を最大化すると、テキスト内で互いに近くに表示される単語は、そうでない単語よりも類似したベクトルを持つことが保証されます。ただし、コンテキストが多数あるため、これの計算は非常に遅くなる可能性がありますc1
。ネガティブサンプリングは、この問題に対処する方法の1つですc1
。いくつかのコンテキストをランダムに選択するだけです。最終的な結果は、その場合cat
のコンテキストに表示されfood
、その後のベクトルfood
のベクトルとより類似しているcat
のベクターよりも(それらのドット積によって測定されるように)いくつかの他のランダムに選択された単語(例えばdemocracy
、greed
、Freddy
)、代わりの言語のすべて言い換えれ。これによりword2vec
、トレーニングがはるかに高速になります。
word2vec
と、任意の単語について、それに類似する必要のある単語のリスト(ポジティブクラス)がありますが、ネガティブクラス(ターガーワードに類似していない単語)はサンプリングによってコンパイルされます。
Softmax(現在のターゲット単語に類似している単語を判別する関数)の計算は、一般に非常に大きいV(分母)のすべての単語を合計する必要があるため、コストがかかります。
何ができるの?
ソフトマックスを概算するために、さまざまな戦略が提案されています。これらのアプローチは、softmaxベースのアプローチとサンプリングベースのアプローチにグループ化できます。Softmaxベースのアプローチは、softmax層をそのまま維持するが、そのアーキテクチャを変更して効率を向上させる方法です(階層型softmaxなど)。一方、サンプリングベースのアプローチは、softmax層を完全に排除し、代わりにsoftmaxを近似する他の損失関数を最適化します(softmaxの分母の正規化を、計算が安価な他の損失で近似することによってこれを行います。負のサンプリング)。
Word2vecの損失関数は次のようなものです。
どの対数が分解できるか:
いくつかの数学式と勾配式(詳細は6を参照)を使用すると、次のように変換されます。
ご覧のとおり、二項分類タスクに変換されています(y = 1ポジティブクラス、y = 0ネガティブクラス)。二項分類タスクを実行するにはラベルが必要なので、すべてのコンテキストワードcを真のラベル(y = 1、正のサンプル)として指定し、コーパスからランダムに選択されたkを偽のラベル(y = 0、負のサンプル)として指定します。
次の段落を見てください。ターゲットワードが「Word2vec」であると仮定します。3のウィンドウで、私たちのコンテキストの言葉は、次のとおりThe
、widely
、popular
、algorithm
、was
、developed
。これらの文脈語はポジティブラベルと見なされます。ネガティブラベルも必要です。我々は、ランダムにコーパスからいくつかの単語を選ぶ(produce
、software
、Collobert
、margin-based
、probabilistic
)と負のサンプルとして、それらを考慮してください。コーパスからランダムに例を選んだこの手法は、ネガティブサンプリングと呼ばれます。
参照:
ネガティブサンプリングに関するチュートリアル記事をここに書きました。
なぜネガティブサンプリングを使用するのですか?->計算コストを削減する
バニラスキップグラム(SG)およびスキップグラム陰性サンプリング(SGNS)のコスト関数は次のようになります。
これT
がすべてのボーカブの数であることに注意してください。と同等V
です。言い換えれば、T
= V
。
p(w_t+j|w_t)
SGの確率分布はV
、コーパス内のすべてのボーカに対して次のように計算されます。
V
Skip-Gramモデルをトレーニングする場合、簡単に数万を超える可能性があります。確率は計算V
時間である必要があり、計算コストが高くなります。さらに、分母の正規化係数には追加のV
計算が必要です。
一方、SGNSの確率分布は、次のように計算されます。
c_pos
は正の単語のW_neg
単語ベクトルでありK
、は出力重み行列のすべての負のサンプルの単語ベクトルです。SGNSの場合、確率はK + 1
時間のみ計算する必要がありますK
。通常は5〜20です。さらに、分母の正規化係数を計算するために追加の反復は必要ありません。
SGNSを使用すると、各トレーニングサンプルの重みの一部のみが更新されますが、SGは各トレーニングサンプルの数百万の重みすべてを更新します。
SGNSはどのようにしてこれを達成しますか?->複数分類タスクを二項分類タスクに変換する。
SGNSを使用すると、中心単語の文脈単語を予測することによって単語ベクトルが学習されなくなります。実際の文脈の単語(ポジティブ)とランダムに描かれた単語(ネガティブ)をノイズ分布から区別することを学習します。
実際の生活の中で、あなたは通常、守らないregression
ようなランダムな言葉でGangnam-Style
、またはpimples
。モデルが可能性のある(正の)ペアと可能性の低い(負の)ペアを区別できる場合、適切な単語ベクトルが学習されるという考え方です。
上の図では、現在の正の単語とコンテキストのペアは(drilling
、engineer
)です。K=5
ネガティブサンプルはれるランダムに描かからノイズ分布:minimized
、primary
、concerns
、led
、page
。モデルがトレーニングサンプルを反復処理するときに、正のペアの確率が出力されp(D=1|w,c_pos)≈1
、負のペアの確率が出力されるように重みが最適化されますp(D=1|w,c_neg)≈0
。
K
として設定するとV -1
、負のサンプリングはバニラスキップグラムモデルと同じになります。私の理解は正しいですか?