a neural probabilistic language model 论文笔记
原文见:https://www.jmlr.org/papers/volume3/bengio03a/bengio03a.pdf
统计语言模型
在统计语言模型中,学习目标即为一种语言中单词序列出现的概率分布.公式表示如下:
p(w_1,w_2,w_3,…,w_t) = p(w_1)p(w_2|w_1)p(w_3|w_1 w_2)…p(w_n|w_1 w_2 … w_{t−1})
其表达方式表明,在已知前t− 个词的情况下,后续每个词出现的概率依赖于前面所有已知的词.假设语料库包含M 个不同的词汇,则该概率乘积的状态空间规模将达M^ t,其中t表示上下文窗口宽度.当t值增大时,计算量呈指数级增长.因此,研究者们提出了n- 克服文法(n-gram)模型以提高计算效率和可行性.
n-gram
对于n-gram模型,在计算第t个词的概率时无需关注前面所有的词只需专注于前n个词因此式子则可简化为:计算的时间复杂度固定为1e^5的n次方上式则可简化为:
p(w_{t−n+1}, w_{t−n+2}, \dots, w_t)} = p(w_{t−n+1}) \cdot p(w_{t−n+2}|w_{t−n+1})) \cdots p(w_n|w_{t−n+1}, \dots, w_{t-1})
n-gram模型被证明是成功可行的,但是对于n-gram模型,存在一些问题:
- 词汇的表征采用one-hot向量形式,在数据维度上会引发严重爆炸。
- 离散型随机变量的变化可能导致全局性的影响出现,并不具有连续性。
- 语料库容量有限难以发现未见过的新相似词组或语法模式。例如已掌握"家猫在房间内活动"而未学习"宠物狗在房间内活动"时无法推断出相应的理解。
NNLM
说完了n-gram存在的一些问题,下面:
首先介绍本篇论文的基本思想和改进优化点:
采用词向量将n-gram的空间从离散映射至连续空间(通过one-hot编码映射至词特征向量),从而实现了降维的效果,并确保了近义词之间的语义表示趋近于一致;对于连续变量而言,在发生微小变化时会对最终结果产生平滑的影响效果;这也就保证了良好的泛化能力,在经过"猫在房间里跑"的学习后就能够合理地推演出"狗在房间里跑"。
接着介绍文篇论文是如何使用神经网络的:

总体目标:基于输入wt的前n−1个词(即Wt−1至Wt−n+1),模型旨在推断出下一个词语Wt是什么。
整个过程可被划分为三层:
第一层负责接收并预处理输入序列;
第二层用于提取关键特征并构建语义表示;
第三层则通过Softmax机制生成最终的概率分布结果。
输入端:将前n-1个词的词向量C(wi)通过(学习词向量的方式)首尾相接拼接成序列x
隐藏端:典型的神经网络结构中的隐藏单元使用tanh(d+Hx),即通过tanh函数对线性组合d+Hx进行激活
输出端:经过计算将隐藏状态与输出权重矩阵H相乘后再应用softmax函数处理(从而得出每个单词属于类别的概率)

其中输入x为:

其中,所有参数为:

C的具体维数是 V_m;其中 m 表示词向量空间中的维度大小,并且 V 表示词汇表中不同单词的数量。x和W的具体维数分别是 V_{(n−1), m}。b的具体维数是 V。U的具体维数是 V_U。d的具体维数是 h;其中 h 表示隐藏层中的神经单元数量。h的具体维数则是 (n−1) \times m。
上述free variables的总数是:|V|(1 + nm + h) + h(1 + (n \times n_1)m),其中word embeddings和隐藏层的parameters均需通过模型迭代过程进行学习。最后,在整个损失函数的基础上基于梯度下降的方法实现反向传播过程:

参数更新为:

后续将推进代码开发,并参考C++中的相关资料:https://www.cnblogs.com/Dream-Fish/p/3950024.html。
