1. 程式人生 > >Word Embedding:負樣本損失函式結果異常

Word Embedding:負樣本損失函式結果異常

  1. 實驗環境
    框架:tensorflow
    模型選擇:CBOW+NCE loss
    單詞個數:30000

  2. 問題描述
    NCE損失函式表示如下:

    Jθ=wV(logP(y=1|x)+i=1klogP(y=0|x(w(i))))
    該損失函式計算上下文與目標單詞之間的點積,採集每一個正樣本的同時採集k個負樣本。公式的第一項最小化正樣本的損失,第二項最大化負樣本的損失。現在如果將負樣本作為第一項的變數輸入,則損失函式結果應該很大。
  3. 實驗問題
    在訓練5M個batch後,訓練樣本的loss降低到了4左右。
    對正樣本測試,loss降低到了4.7。
    對隨機產生的負樣本測試,loss同樣降低到了7左右,與預想不符。


    從圖中可以看到,在訓練14000個batch後,訓練樣本的loss仍然在27.8,而負樣本的loss已經下降到了6.9。負樣本loss下降比正樣本都快!

  4. 可能性猜想
    可能由於損失函式第二項的存在,即使輸入負樣本,整個損失函式的值還是保持在較低水平。(對公式理解不夠)
    對策:使用其他方法進行測試,比如直接計算點積或者。