这篇文章第一次用 “词向量” 和 神经网络 来解决(统计)语言模型的问题, 作者通过随机初始化一个词库向量corpus matrix (简称 C C C) 作为神经网络中的迭代更新的主要参数, 输入进神经网络的每一个词语通过这个 C C C 的映射成为词向量来表示这个词语的语义信息. 以 n n n 个词的词向量作为输入, n n n个词后的下一个词的词向量作为输出, 不断训练迭代更新 C C C, 使得 C C C 最终可以成功表达这个训练词库中的每个词.
这样的做法解决的问题包括:
有几个前提背景知识需要了解
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∏TP(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)
在文章中, 作者还提到一部分为 “直连” 部分, 即上图中虚线部分, 由 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, 并没有进一步探讨.
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积分直接下载即可,来源地址)