5.2自然語言處理
覺得有用的話,歡迎一起討論相互學習~
2.7 負采樣 Negative sampling
Mikolov T, Sutskever I, Chen K, et al. Distributed representations of words and phrases and their compositionality[C]// International Conference on Neural Information Processing Systems. Curran Associates Inc. 2013:3111-3119.
- skip-gram模型可以構造一個監督學習任務,把上下文映射到目標詞上,以學習一個實用的詞嵌入,但是他的缺點是softmax計算起來很慢。本節將會介紹了一個經過優化的學習問題叫做 負采樣,其能夠做到和 skip-gram 相似的功能但是使用起來更加高效。
樣本生成方法
- 例句: I want a glass of orange juice to go along with my cereal 構造一個新的監督學習問題,給定一對單詞 orange 和 juice ,預測這是否是一對 上下文詞-目標詞 (context-target) ,在這個樣本中,orange 和 juice 就是一個正樣本。 然而對於 orange 和 king 就是一個負樣本。
- 正樣本 的生成是采樣得到一個上下文詞和一個目標詞。其中先在句中隨機均勻的選取一個單詞作為上下文詞。然后在其左右兩邊一定詞距內隨機選擇一個單詞作為目標詞。 並且將 標簽 設置為1.
- 負樣本 的生成是使用和正樣本一樣的上下文詞,然后從字典中隨機選取一個單詞構成一個組合。並且將 標簽 設置為0. 其中同一 上下文詞 生成 K個 負樣本
| context | word | target |
|---|---|---|
| orange | juice | 1 |
| orange | king | 0 |
| orange | book | 0 |
| orange | the | 0 |
| orange | of | 0 |
- 注意:正負樣本 的區別僅取決於單詞對的來源,即是 of 也在 orange 的設定詞距之內,但是作為隨機從字典中選取的單詞, of - orange 單詞對仍然被標記為負樣本。
- 在本次提出的算法中 輸入數據x 將被設定為 context-word 的單詞對,預測結果y 將被設置為 target 算法的目的即是區分 樣本采樣的來源
- 論文作者推薦,小數據集的話 K 被設置為5-20, 而對於較大的數據集, K 被設置為2-5.即數據集越小 K 值被設定的越大。
模型學習原理
- Skip-grams 中softmax函數定義:
\[P(target|content)=\frac{e^{\theta_{t}^{T}e_{c}}}{\sum^{10000}_{j=1}{e^{\theta^{T}_{j}e_{c}}}} \]
- 本節算法定義 輸入Context為c,Word為t,定義輸出Target為y
| context | word | target |
|---|---|---|
| c | t | y |
| \(x_1\) | \(x_2\) | y |
| orange | juice | 1 |
| orange | king | 0 |
| orange | book | 0 |
| orange | the | 0 |
| orange | of | 0 |
- 損失函數 定義為給定 樣本單詞對 的情況下,\(y=1\) 的概率:
- 使用\(e_{c}\)表示context的詞嵌入向量 其中\(\theta_{t}\)表示每個樣本對應的參數.
-
\[P(y=1|c,t)=\sigma(\theta^{T}_{t}e_{c}) \]
- 對於每個正樣本都有 K 個負樣本來訓練一個類似logisitic回歸的模型。
神經網絡算法流程
- 如果輸入詞是 orange ,即詞典中的第6257個詞,將其使用one-hot向量表示 \(o_{6257}\),
- 再傳遞給E(詞嵌入向量矩陣),通過兩者相乘得到 orange 的嵌入向量 \(e_{6357}\)
- \(e_{6357}\)是一個1W維(字典中總單詞數量)的向量,可以看成是1W個可能的logistic回歸分類問題,其中一個是用來判斷目標詞是否是 juice 的分類器,當然也有用來判斷 king,book,the... 等詞匯是否是目標詞的分類器。但是每次迭代不都是訓練所有的樣本, 每次迭代只會訓練一個正樣本和隨機選取的 K 個負樣本
- 此算法將需要計算10000個維度的softmax問題轉化為10000個二分類問題,每一個都易於計算,每次迭代要做的只是訓練其中的 K+1 個樣本,其中一個正樣本和隨機選取的同一個Context的 K 個負樣本。
- 此算法被稱為 負采樣 , 因為在挑選一個 正樣本 的同時,隨機生成 K個負樣本
負樣本采樣方法
- 僅考慮單詞在 語料庫 中出現的頻率,會導致負樣本中 the, of, and ... 等介詞出現的頻率過高
- 僅考慮單詞在 詞匯表 中出現的頻率,即在 詞匯表 中隨機采樣,分母是詞匯表中的總詞數,這樣采樣十分沒有代表性。
- 論文提出采樣公式為:
\[P(w_{i})=\frac{f(w_{i})^{3/4}}{\sum^{10000}_{j=1}f(w_{j})^{3/4}} \]
其中\(f(w_{i})\)表示單詞在語料庫中的詞頻。




