一、博主学习卷积神经网络CNN主要参考下面的五篇文章和视频(需要掌握“两个语言模型”指的是“CBOW”和“Skip-gram”和“两个降低计算复杂度的近似方法”“Hierarchical Softmax”和“Negative Sampling”,两个模型乘以两种方法,共有四种实现):
- 点击打开《word2vec原理推导与代码分析》文章
- 点击打开《CS224n笔记2 词的向量表示:word2vec》文章
- 点击打开《深度学习笔记——Word2vec和Doc2vec原理理解并结合代码分析》文章
- 点击打开《word2vec模型原理与实现》文章
- 点击打开《负采样(Negative Sampling)》
- 点击打开《词向量(Word Vector)【白板推导系列】》视频
二、在看完上面的文章内容,大家对于原理还有疑问可以参考博主自己学习后思考总结的重要内容。
- Skip-gram是输入为中心词,输出为上下文;CBOW是输入为上下文,输出为中心词。
- Hierarchical Softmax:翻译成中文是多层Softmax其实就是将神经网络原本设计的最后一层改为哈夫曼树,语料库根据词汇种类构造单词库,根据单词库中的词频进行编码,那么树所有的叶子节点就表示单词库的各个词汇,并且词频越高编码越短,计算效率越快。怎么根据损失函数更新参数的逻辑是(博主以CBOW为例):树中的每个非叶子节点是一个感知机,且是二分类计算,我们根据语料库可以知道对应的输出词汇结果的哈夫曼编码,然后我们根据0和1的不同的概率值(概率之和为1),再分别根据对应词汇的哈夫曼编码结果依次取出代入下面的计算公式可以得出一个值,当然这个L值(下面第二个公式计算后累加)是越大越好,则损失函数值(J=1-L)越小越好,举个例子,设置真实的输出的词汇的编码是1011,那么中间要经历四个感知机也就是四个非叶子节点,假如模型经历的是1001,那么计算的L肯定较小,则损失函数值较大,因为模型在实际运算中第三个感知机既然选择0,那么其选择1的概率小于50%,原本选择1的概率要大于50%,所以如果还是按照1011路线走,那么概率代入公式计算起来肯定L值较小,损失函数值较大,则需要反向传播更新参数,减小损失函数值。
- Negative Sampling:负采样,相较于Hierarchical Softmax(正样本是正确二叉树路径,负样本是二叉树的其他路径),没有使用哈夫曼树,而是进行部分负采样,将输入上下文(词汇)和其正确输出词汇(上下文)看作正样本,再用根据词汇表中选NEG个上下文(词汇(文本高频词汇))且非输出上下文(词汇)作为负样本,然后怎么根据损失函数更新参数的逻辑是(下面的公式以CBOW为例):一组正样本,NEG组负样本代入下面最后的公式L,正样本概率越大,负样本概率(1-正样本概率)越小,则L数值计算结果越大,则损失函数J=1-L的值越小。相较于用Hierarchical Softmax计算词汇表中所有的词汇概率,负采样只需要计算1+NEG个样本的计算值,效果更好。
- Skip-gram词向量生成前期数学原理逻辑设置(博主以Skip-gram为例):
- 引入神经网络模型多层感知机(MTP)来生成输入词的词向量,为满足上式输出概率P之和等于1且范围属于(0,1],通过引入Softmax进行实现。注意:输入词向量决定Z的结果,因为是one hot编码只有一个1,其余都是0。
- Skip-gram模式下语料库词汇概率转换得出损失函数的计算公式(context是指上下文;conditional likelihood叫做条件概率,因常量在后续的计算中不影响计算过程可以选择忽略;Average conditional log likelihood平均条件对数概率,选择此处变换是在不影响整体结果的前提下为后续损失函数计算方便考虑):
- 下图说明一下,设置的窗口是4,也就是上面的m=2,神经网络模型运行2m也就是4次,但是2m次输入的语料库词汇是一样的是Bt。
- 神经网络模型输入的词汇是语料库的词汇Bt的one hot编码向量,输出的结果是词汇表中的各个词汇作为Bt上下文的概率。注意:单词库是指所有词汇都包含类似新华字典,语料库是指文档类似小说文本,当然语料库的词汇种类<=单词库,当从语料库中新建单词库就能够相等,最后运算得到的语料库各词的词向量仅满足适用于该语料库。
- 神经网络模型运行2m次期间每次通过模型计算出单词库各个词汇的概率都不变也就是Wo不变,因为运算参数没变化(后面每反向传播一次后会变,因为运算参数每次会发生改变)。
- 神经网络模型2m次运行期间每次将输入的词汇Bt(语料库)的上下文2m个词汇中的一个如Bt+m(非重复)对应模型输出的词汇如Wo=Bt+m(单词库)的概率值代入损失函数公式进行计算,然后为实现最小化损失函数值选择梯度下降法等进行反向传播,训练多次最后得到输入词汇Bt的词向量Q,其他语料库的词汇同Bt一样求出其词向量。
word2vec实现词向量训练案例
一、打开语料库官网
搜狗实验室的搜狗新闻语料库官方链接:点击打开官方链接
二、下载语料库数据,首先下拉找到迷你版(样例数据, 110KB),然后点击第一个红色箭头指向的红色框内容(tar.gz格式),自己选择好保存文件的途径之后点击第二个红色箭头指向的红色框内容(保存)。注意:下载来的文件名是“news_sohusite_xml.smarty.tar.gz”。
三、首先按键盘“windows键+r”打开资源管理器 ,在打开栏输入“cmd”然后点击“确定”。然后通过转盘和cd转文件夹到之前下载的数据文件所在的文件夹为止。
四、复制下面代码到cmd平台执行命令,对之前下载的数据文件进行解压并取出内容(成功与否见下面第二章图,若原下载保存文件夹中出现则表示解压成功)。
tar -zvxf news_sohusite_xml.smarty.tar.gz
注意:为Windows系统顺利执行后面用到的命令,需要下载libiconv和grep文件和解压安装及配置。
五、首先点击打开下方链接,然后点击红色箭头指向的红色框内容(Setup)。
libiconv下载官方链接:点击打开官方链接
六、正常安装解压后进行环境配置,将你bin文件夹的具体位置(博主举例是C:\Program Files (x86)\GnuWin32\bin)复制,然后粘贴加到环境变量中path里面去。