A Neural Probabilistic Language Model
文章目錄
- A Neural Probabilistic Language Model
- 1. Top View
- 2. Background
- 3. NNLM (Neural Network Language Model)
- 1. 輸入層
- 2. 映射層
- 3. 隱藏層 ( t a n h tanh tanh 層)
- 4. 輸出層 ( s o f t m a x softmax softmax 層)
- 5. Option (直連邊)
- 6. 匯總
- 代碼實作
1. Top View
這篇文章第一次用 “詞向量” 和 神經網路 來解決(統計)語言模型的問題, 作者通過隨機初始化一個詞庫向量corpus matrix (簡稱 C C C) 作為神經網路中的迭代更新的主要引數, 輸入進神經網路的每一個詞語通過這個 C C C 的映射成為詞向量來表示這個詞語的語意資訊. 以 n n n 個詞的詞向量作為輸入, n n n個詞后的下一個詞的詞向量作為輸出, 不斷訓練迭代更新 C C C, 使得 C C C 最終可以成功表達這個訓練詞庫中的每個詞.
這樣的做法解決的問題包括:
- 在詞匯量大的情況下, 以one-hot形式來表達單詞會造成很大的開銷
- 再者, 以one-hot形式無法有效地表達出詞與詞之間在語意或語法上的相似程度(e.g. cat & dog; is & was)
- 同時也解決了先前作業中基于統計學習方法的n-gram模型出現的"組合爆炸"問題, 以及訓練語料庫中存在測驗條件下不存在的問題
2. Background
有幾個前提背景知識需要了解
-
Language Modeling
如果給你以下一段話,你會在空白處填上什么詞語?
“The cat sat on
_____.” 空白處可能是 “mats” / “sofa” / …Language Modeling 的任務就是對語言進行建模, 最終模型可以預測輸入句子下一個緊接的詞語.
如果從概率的角度對語言建模進行解釋, 一個句子每個單詞用 x ( 1 ) , ? ? , x ( T ) x^{(1)},\cdots,x^{(T)} x(1),?,x(T) 表示, 組成這個句子的概率就可以表達成
P ( x ( 1 ) , ? ? , x ( T ) ) = P ( x ( 1 ) ) × P ( x ( 2 ) ∣ x ( 1 ) ) × ? × P ( x ( T ) ∣ x ( T ? 1 ) , ? ? , x ( 1 ) ) = ∏ t = 1 T P ( x ( t ) ∣ x ( t ? 1 ) , ? ? , x 1 ) \begin{aligned} P(x^{(1)},\cdots,x^{(T)})&=P(x^{(1)})\times P(x^{(2)}|x^{(1)})\times\cdots\times P(x^{(T)}|x^{(T-1)},\cdots,x^{(1)}) \\ &=\prod^{T}_{t=1}{P(x^{(t)}|x^{(t-1)},\cdots,x^{1}}) \end{aligned} P(x(1),?,x(T))?=P(x(1))×P(x(2)∣x(1))×?×P(x(T)∣x(T?1),?,x(1))=t=1∏T?P(x(t)∣x(t?1),?,x1)?
( 這里的概率是在給出的詞庫(資料集)中進行統計得到的概率 )舉個例子就是
P(‘The’, ‘cat’, ‘sat’, ‘on’, ‘mats’) =
P(‘The’) x P(‘cat’|‘The’) x P(‘sat’|‘cat’, ‘The’) x P(‘on’|‘sat’, ‘cat’, ‘The’) x P(‘mats’ |‘on’, ‘sat’, ‘cat’, ‘The’)
-
n-gram Language Model
上述例子只是一個很簡單的例子,在現實中可能面對的情況往往是很多個單詞, 可能是10幾個單詞, 組成的句子, 這時候進行概率統計的計算量就會非常的大. n-gram作了一個很強的假設, 它利用了1. 詞序和2. 詞與詞之間存在的語意關系 (如 鳥-飛; 貓-跳; 狗-叫), 假設對在一個句子中,如果要對下一個單詞進行預測, 只需基于最后 n n n 個詞語進行概率預測, 即:
p ^ ( w t ∣ w 1 t ? 1 ) ≈ p ^ ( w t ∣ w t ? n + 1 t ? 1 ) \hat{p}(w_t|w_1^{t-1})\approx\hat{p}(w_t|w_{t-n+1}^{t-1}) p^?(wt?∣w1t?1?)≈p^?(wt?∣wt?n+1t?1?)
3. NNLM (Neural Network Language Model)
1. 輸入層

- 首先傳進來的是 n ? 1 n-1 n?1 個詞在詞庫中的索引, 比方說, 存在一個詞庫 [‘dog’, ‘cat’, ‘baby’], 那么 ‘dog’ 的索引就是 0
- n ? 1 n-1 n?1 個詞的索引組成一個索引向量, 傳入神經網路
2. 映射層

- 根據索引向量中每個詞的索引, 在corpus matrix C C C 中提取每個詞所對應的詞向量
- 其中 C C C 的大小為 ∣ V ∣ × m |V|\times m ∣V∣×m, ∣ V ∣ |V| ∣V∣ 為詞庫中詞的數量, m m m 為表達一個詞的特征的特征數, 文中給出的值是50
- 如果是一個包含1000個單詞的詞庫 [‘dog’, ‘cat’, ‘baby’, … ] , C C C 的大小為 1000 × 50 1000 \times 50 1000×50
- 而每個單詞通過 C C C 映射得到 C ( i ) C(i) C(i), 大小為 1 × m 1 \times m 1×m
- 注意! 這里的 C C C 是開始的時候隨機初始化的引數, 并在后續神經網路訓練不斷迭代程序中進行更新
3. 隱藏層 ( t a n h tanh tanh 層)

- 得到 n ? 1 n-1 n?1 個 C ( i ) C(i) C(i) 后, 將他們全部拼接起來得到 x = ( C ( w t ? 1 ) , C ( w t ? 2 ) , ? ? , C ( w ? n + 1 ) ) ) x=(C(w_{t-1}), C(w_{t-2}),\cdots, C(_{w-n+1}))) x=(C(wt?1?),C(wt?2?),?,C(w?n+1?))), 大小為 ( n ? 1 ) m (n-1)m (n?1)m
- 將拼接后的向量
x
x
x 輸入給
t
a
n
h
(
)
tanh()
tanh() 激活函式
- 實際上, 在 x x x 傳入到 t a n h ( ) tanh() tanh() 前需要乘以一個隱藏層權重 H H H, 其中 H H H 大小為 h × ( n ? 1 ) m h \times (n-1)m h×(n?1)m
- H x Hx Hx 最后得到的大小為 h h h
- 再加上隱藏層偏差 d d d, 計算 H x + d Hx+d Hx+d 輸出大小為 h h h
- 假設 t a n h ( ) tanh() tanh() 隱藏層中神經元數目為 h h h, 那么 隱藏層 t a n h ( ) tanh() tanh() 的輸出大小則是 h h h
4. 輸出層 ( s o f t m a x softmax softmax 層)

- 隱藏層輸出
t
a
n
h
(
)
tanh()
tanh(), 乘上權重加上偏差后得到可以直接傳入
s
o
f
t
m
a
x
softmax
softmax 層進行概率計算
- 在傳入 s o f t m a x softmax softmax 層之前, 對隱藏層的輸出乘以大小為 ∣ V × h ∣ |V \times h| ∣V×h∣ 權重 U U U
- 再加上大小為 ∣ V ∣ |V| ∣V∣ 的偏差 b b b, 最終得到 大小為 ∣ V ∣ |V| ∣V∣ 的輸出: U t a n h ( d + H x ) + b Utanh(d+Hx)+b Utanh(d+Hx)+b
- 經過 s o f t m a x ( ) softmax() softmax() 輸出后, 得到的概率反映為詞庫中每個詞的 (是傳入句子下一個詞)概率
5. Option (直連邊)
在文章中, 作者還提到一部分為 “直連” 部分, 即上圖中虛線部分, 由 C ( i ) C(i) C(i) 直接 映射到 O u t p u t Output Output 的連接.
這部分作者設定了一個權重
W
W
W, 直接乘以
x
x
x, 加到最后的隱藏層輸出中, 一并傳入到
s
o
f
t
m
a
x
softmax
softmax 中計算, 最后得到:
y
=
b
+
W
x
+
U
t
a
n
h
(
d
+
H
x
)
y=b+Wx+Utanh(d+Hx)
y=b+Wx+Utanh(d+Hx)
文章中, 作者提到:
" When no direct connections from word features to outputs are desired, the matrix W W W is set to 0 0 0 "
直連邊好像是一個改善神經網路的trick, 并沒有進一步探討.
6. 匯總
| symbol | shape | illustrate |
|---|---|---|
| x x x | ( n ? 1 ) m × 1 (n-1)m\times1 (n?1)m×1 | ( n ? 1 ) (n-1) (n?1) 個詞向量拼接 |
| H H H | h × ( n ? 1 ) m h\times(n-1)m h×(n?1)m | x x x 權重 |
| d d d | h × 1 h\times1 h×1 | x x x 偏差 |
| U U U | ∣ V ∣ × h \lvert V \lvert\times h ∣V∣×h | 隱藏層權重 |
| b b b | ∣ V ∣ \lvert V \lvert ∣V∣ | 隱藏層偏差 |
| W W W | ∣ V ∣ × ( n ? 1 ) \lvert V\lvert\times(n-1) ∣V∣×(n?1) | 直連邊權重 |
代碼實作
資料集與代碼均已上傳到 gitee倉庫, 僅供參考學習~ 😊
論文下載地址
(0積分直接下載即可,來源地址)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/436387.html
標籤:AI
上一篇:李宏毅2021&2022機器學習
