概述
谈到NLP不得不介绍word2vec,word2vec可以很宽泛的理解,就是词的向量化过程,而这一过程是经历了很长时间的发展https://www.jianshu.com/p/2319729cf0a2。从最初的基于语言学家的关联到基于语料库的词频,都是有稀疏的缺点。随着神经网络的发展,借鉴N-gram的方法(下一个词的出现仅依赖前面的一个或n个词),提出了NNLM,也就是 Nerual Network language Model.
用神经网络来训练语言模型的思想最早由百度 IDL (深度学习研究院)的徐伟提出[1],NNLM(Nerual Network Language Model)是这方面的一个经典模型,具体内容可参考 Bengio 2003年发表在JMLR上的论文。原文地址:
http://jmlr.org/papers/volume3/bengio03a/bengio03a.pdf
http://blog.sina.com.cn/s/blog_66a6172c0102v1zb.html
这篇博客记录的NNLM 与 word2vec的发展来龙去脉
https://www.zhihu.com/question/37922364
详解
图片.png他的使用场景是这样的:假设我们有一分文本,我们可以通过他的前N−1个词预测他的第N个词应该是什么?
图片.png输入层(投射层)
一个文本,由N个词语组成,现在呢:想根据 前N个词语 来预测 第N个词语 是啥?
我们采用的语料库V(也就是我们最大限度能想到的的所有词语集合)包含10万个词语
词向量W:是一个one-hot向量,大小=[10W,1],W(t)表示第t个词语的one hot(一个元素为1,其余全为0
投影矩阵C:维度[D*V],V=10W,参数D根据文本大小不同来设定:谷歌测试时选取D=300
- 计算时:投影矩阵C[300 * 10W] X 词向量W(t)[10W *1] 得到= 矩阵[300 * 1]
- 比如根据前3个词来预测第4个词语,那么上述操作会重复三次,得到3个[300*1]的矩阵
- 将这3个[300*1]的矩阵按行拼接,得到[900x1]的矩阵。
隐藏层
存在一个向量矩阵[Hx1],H根据文本集合情况设定(谷歌测试时选取H=500)
该层完成的功能主要是全连接!
说通俗一些:把输入层计算得到的矩阵[900x1],转换为矩阵[Hx1],完成输入层到隐藏层的数据传输,并且在全连接的过程中存在计算的权重。
最终得到矩阵[500x1]
输出层
我们的词语大小为V=10W,隐藏层计算得到矩阵[500x1],要将这[500x1]的计算结果转化为[10Wx1],以此来预测第4个词语是什么?
得到矩阵[10Wx1],也就是所谓第4个词ont-hot,最终经过SoftMax激活函数,选取行向量最大值,就是预测词语。
计算复杂度
(NxD )+ (NxDxH) + (HxV)
代码实现:https://www.cnblogs.com/Luckidmi/p/11208727.html
最后我还是有一个疑问,输入真的是one-hot吗?
训练的损失函数也是一个one-hot与softmax向量的损失计算吗?
原作者讲的学习目标是:
图片.png
这个模型包括两部分:
A,一个从词汇表V到实数向量空间的映射C。通过这个映射得到每个单词的向量表示。因此C实际上是一个|V|×m的矩阵(m是单词向量的维数);
B,以单词向量作为自变量的概率方程g:以单词向量序列(C(w_{t-n+1}),..., C(w_{t-1}))作为输入,输出序列的后续单词w_t的条件概率。方程g的输出也是一个向量,向量的第i维对应单词表中第i个单词的条件概率(如图1所示):
图片.png
网友评论