(1)NNLM模型(神经网络语言模型)
语言模型是一个单纯的、统一的、抽象的形式系统,语言客观事实经过语言模型的描述,比较适合于电子计算机进行自动处理,因而语言模型对于自然语言的信息处理具有重大的意义。换一句话说,语言模型其实就是看一句话是不是正常人说出来的正常的话。用神经网络来训练语言模型的思想最早由百度 IDL (深度学习研究院)的徐伟提出[1],其中这方面的一个经典模型是NNLM:已知前面n个词的情况下预测词典中所有次成为第n+1个词的概率,并以此为目标进行训练。总体架构如下:
(1)模型输入:待预测的词
w
t
w_t
wt的前n个词
w
t
−
1
,
w
t
−
2
.
.
.
w
t
−
n
+
1
w_{t-1},w_{t-2}...w_{t-n+1}
wt−1,wt−2...wt−n+1
(2)训练过程:
①输入层:把这n个词分别经过一个特征映射矩阵
M
a
t
r
i
x
C
MatrixC
MatrixC进行特征映射以后变成n个特征向量,而后再把这n个特征向量进行拼接。
②隐藏层:拼接得到的向量经过一个全连接层再经过激活函数tanh。
③输出层:本质上这也是个全连接层加上softmax。一共有
V
V
V 个结点,其中
V
V
V代表的是词典中的不同的词的个数。其中输出层
V
i
V_i
Vi代表着单词
w
t
w_t
wt是词典的第
i
i
i个单词的概率。
(2)Word2vec
传统的one-hot 编码仅仅只是将词符号化,不包含任何语义信息。 所以我们需要解决两个问题:1 需要赋予词语义信息,2 降低维度。
通过NNML模型的训练以后我们获得了以下东西:词矩阵
M
a
t
r
i
x
Matrix
Matrix,两个全连接层的参数(隐藏层和输出层)
而对于word2vec 而言,词向量矩阵的意义就不一样了,因为Word2Vec的最终目的不是为了得到一个语言模型,而是只关心模型训练完后的副产物:特征映射矩阵
M
a
t
r
i
x
C
MatrixC
MatrixC,用这个可以直接把单词映射成一个K维向量。也就是说Word2vec是NNML模型的一个副产物,而Word2vec是在原有的基础上加上了一些拓展的优化,总结起来可以分为以下几点:(没有去深究,等以后学会了再补上)
①把输出层改造成了Huffman树的形式,采用了Hierarchical Softmax的方法来提高模型的预测准确度
②把词向量模型进一步划分为两种:
(1)CBOW:是一个基于上下文预测当前的目标单词向量模型。
(2)Skip-gram:是已经知道当前词语对上下文进行预测