本文基本上“复现”这篇博客 / 转载自 https://blog.csdn.net/itplus/article/details/37969519
前言
入门学习NLP的同学,遇到的第一个概念可能就是词向量。因为将文本向量化已经是NLP任务中的常规操作。
预备知识
sigmoid 函数
sigmoid函数是神经网络中常用的激活函数之一。
定义如下:
导数为:
则:
图像如下:
逻辑回归
二分类问题:设 是一个二分类问题的样本数据,其中,,当时称相应的样本为正例,当时称相应的样本为负例。
利用sigmoid函数,可将二分类问题的假设函数(Hypothesis)写成:
可认为是所对应的样本被判定为正例的概率,那么,对应的可认为是所对应的样本被判定为负例的概率。若,那么的值应较大,即所对应的样本被判定为正例的概率较大,被判定为负例的概率较小。
取阈值为0.5,则二分类的判别公式为:
要求参数,先定义一个整体损失函数:
其中,单个样本的损失函数一般取为对数似然函数
所以,整体损失函数可写为:
然后对其优化,梯度下降求最优值
贝叶斯公式
若分别表示事件A和事件B发生的概率,表示事件发生的情况下事件A发生的概率,表示事件同时发生的概率,则有
Huffman编码
首先介绍Huffman树的定义及其构造算法。
- 树
树是一种非线性数据结构,若干棵互不相交的树所构成的集合成为森林 - 二叉树
每个结点最多有两个子树的有序树,两个子树顺序不能颠倒,分别被称为“左子树”,“右子树”。 - 路径和路径长度
在一棵树中,从一个结点往下可以达到的孩子或孙子之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层号为,则从根结点到第层结点的路径长度为。 - 结点的权和带权路径长度
若为树中结点赋予一个具有某种含义的(非负)数值,则这个数值称为该结点的权。结点的带权路径是指,从根结点到该结点之间的路径长度与该结点的权的乘积。 - 树的带权路径长度
树的带权路径长度规定为所有叶子结点的带权路径长度之和。 - Huffman树/最优二叉树
给定个权值作为个叶子结点,构造一棵二叉树,其带权路径长度最小。 - Huffman树的构造
- 将{}看成是有棵树的森林(每棵树只有一个结点)
- 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左右子树,且新树的根结点权值为其左,右子树根结点权值之和。
- 从森林中删除选取的两棵树,并将新树加入森林。
-
重复2,3步,直到森林中只剩一棵树为止,该树就是Huffman树。
Huffman树的构造过程
-
Huffman编码 :利用Huffman树设计的二进制前缀编码
- 不等长编码: 频率高的使用短码,频率低的使用长码,优化报文编码
-
前缀编码: 一个字符的编码不能是另一个字符编码的前缀
Huffman编码示例
背景知识
统计语言模型
统计语言模型是用来计算一个句子的概率的概率模型。假设表示由个词按顺序构成的一个句子,那么这个句子是一句真正/正常的句子的概率可以表示为:
利用贝叶斯公式,上式可以分解为:
其中的(条件)概率就是语言模型的参数,知道这些参数,那么给定一个句子,就可以很快的计算出相应的概率。
但是,简单进行一下分析可知,模型参数的个数是比较大的,假设句子的长度为,语料库对应词典大小是,那么每个句子需要计算个参数,而一共有种句子,总共就需要计算个参数。
因此,人们提出很多计算语言模型的参数的方法,如n-gram模型,决策树、最大熵模型、条件随机场、神经网络等等。
n-gram模型
以为例进行说明,利用贝叶斯公式,有:
根据大数定律,有:
而n-gram的思想就是:阶的马尔可夫假设(Markov),认为一个词出现的概率就只与它前面的个词相关,若,那么,上式变为:
这样,统计时所匹配的词串更短,单个参数的统计变得更容易,而且参数的总数也变少了。模型的参数数量随着的增大而增大,量级是词典大小N的指数函数,实际应用种一般采用的二元模型或三元模型。
总结一下,n-gram模型的主要工作是在语料中统计各种词串出现的次数以及平滑性处理,概率值计算好后就存储起来,下次需要计算一个句子的概率时,就找到相应的概率参数,将它们连乘起来。
而在机器学习中,解决问题的方法是:对所考虑的问题建模后先为其构造一个目标函数,然后对这个目标进行优化,从而求得一组最优的参数,最后利用这组最优参数对应的模型来进行预测。
对于统计语言模型,利用最大似然,可把目标函数设为:
其中,表示语料(Corpus),表示词的上下文(Context),即周边的词的集合,若是n-gram模型,那么就是上下文就是前面的n-1个单词。
实际应用中经常采用最大对数似然,目标函数变为:
然后对这个函数进行最大化。
分析可知,概率 已被视为关于和的函数,即
求得最优参数后,F就被确定了,那么任何概率都可以通过F进行计算,不需要像n-gram一样,提前计算并保存好所有可能的概率值。
通过神经网络可以构造F。
神经概率语言模型
该模型出自Bengio等人的文章《A neural probabilistic language model》
神经概率语言模型神经概率语言模型对应的神经网络结构可以分为四层:输入层(Input Layer)、投影层(Projection Layer)、隐藏层(Hidden Layer)和输出层(Output layer),其中分别为投影层与隐藏层以及隐藏层和输出层之间的权值矩阵,分别为隐藏层和输出层上的偏置向量。
训练样本为二元对,其中,取前面的个词。
输入层:输入就是前面的个词的词向量。
投影层:输入层的个词向量按顺序首尾拼接起来形成一个长向量,即投影层的向量。那么,投影层的规模就是为词向量的维度。
隐藏层和输出层:隐藏层的规模是可调参数,输出层的规模是即语料的词汇量大小。计算过程如下:
计算得到的是一个长度为N的向量,其分量不能表示概率,需要做softmax归一化:
其中,表示词在词典中的索引。
结合上一节,可知
其中需要确定的参数有:
- 词向量:
- 神经网络参数:
这些参数都可以通过模型训练得到。
词向量的理解
- one-hot representation
用向量长度为词典大小的向量表示单词,向量的分量中只有一个是1,其他都为0,1的位置对应该词在词典中的索引。如:
苹果:[0,0,0,...,1,0,0] 香蕉:[0,0,1,...,0,0,0]
存在一些缺点:容易受维数灾难的困扰,向量维度会随着词典的增大而增大,不能刻画词与词之间的相似性等。 - distributed representation
词典中的每个词都被映射到一个词向量空间里的一个固定长度的向量,词与词之间的相似性可以通过“距离”(如欧式距离、余弦距离)来度量。如:
苹果:[0.3,9.6,-98,...,23,2,45] 香蕉:[0.6,7.8,-79,...,31,8,57]
wordvec
word2vec中的两个重要模型 : CBOW模型(Continuous Bag-of-Words Model)和 Skip-gram(Continuous Skip-gram Model)出自于Tomas Mikolov 的论文《Efficient Estimation of Word Representations in Vector Space》
CBOW模型是在已知上下文的前提下预测当前词,Skip-gram模型是在已知当前词的前提下,预测其上下文。
对于CBOW和Skip-gram模型,wordvec给出了两套框架,分别基于Hierarchical Softmax和negative samping进行设计的。
基于Hierarchical Softamx 的模型
目标函数
CBOW:
Skip-gram:
应将重点放到目标函数的构造上。
CBOW模型
CBOW模型包括三层:输入层、投影层和输出层。以样本 ()为例(假设由前后各个词构成),对这三个层进行简要说明。
- 输入层
包含中的个词的词向量,词向量的维度为 - 投影层
将输入层的个词的词向量做求和累加,即 - 输出层
输出层是一棵以语料中的词作为叶子结点,以各词在语料中出现的次数作为权值构造出来的Huffman树。在这棵Huffman树中,叶子结点共个,分别对应词典中的词,非叶子结点个(图中标成黄色的那些结点)。
梯度计算
考虑Huffman树中的某个叶子结点,假设它对应词典中的词,记
- :从根结点出发到达对应叶子结点的路径。
- :路径中包含结点的个数。
- :路径中的个结点,其中表示根结点,表示词对应的结点。
- :词的Huffman编码,由为编码构成,表示路径中第个结点对应的编码(根结点不对应编码)。
-
: 路径中非叶子结点对应的向量,表示路径中第个非叶子结点对应的向量。
w=足球时的记号示意图
从根结点出发到达“足球”这个叶子结点时,共经历了四次二分类。可将分到左边看作正类,编码为1,分到右边看作负类,编码为0。
根据前面介绍的逻辑回归,可知,一个结点被分为正类的概率是:
被分为负类的概率是:
对于上边的例子,从根结点到达“足球”这个叶子结点经历的四次二分类,将每次的分类结果写出来就是:- 第一次:
- 第二次:
- 第三次:
- 第四次:
我们最终要求的是,有了上边4个概率值,可以求得:
对Hierarchical Softmax思想做一下总结:对于词典中的任意词,Huffman树中必存在一条从根结点到词对应结点的路径,而且这条路径是唯一的。路径上存在个分支,每个分支都可以看作一次二分类,每一次二分类产生一个概率,将这些概率相乘起来就是
条件概率的一般公式可写为:
其中:
或者整理为一个整体表达式:
目标函数可以整理为:
为了梯度求导方便,可将上式简记为:
得到CBOW模型的目标函数之后,优化目标是将这个函数最大化,word2vec中采用的随机梯度上升法:每取一个样本,就对目标函数中的所有相关参数做一次更新。观察目标函数可知,函数中包含的参数有。
可先对进行梯度计算:
于是,的更新公式为:
其中表示学习率。
观察目标函数发现,中变量和是对称的,因此,的梯度计算为:
因为表示的是中各词词向量的累加,要求得每个单词的词向量,可以取:
伪代码
Skip-gram模型
Skip-gram模型同CBOW模型一样,包括三层:输入层,投影层和输出层,接下来以为例,对这三个层进行简要说明。
- 输入层: 含当前样本中心词的词向量
- 投影层: 恒等投影,其实是多余的,只是与CBOW模型做对比。
- 输出层: 是一棵Huffman树
Skip-gram模型的网络结构示意图
直接进行梯度计算,关键是条件概率函数的构造,可将其定义为:
进一步,应用Hierarchical Softmax 思想,可写为:
其中
整理可得对数似然函数的具体表达式:
可简记为
对进行梯度计算得(与CBOW模型对应部分的推导一样)
于是,的更新公式为:
对应的,的梯度为:
的更新公式为
Skip-gram模型采用随机梯度上升法更新各参数的伪代码
基于Negative Sampling的模型
Negative Sampling 的目的是用来提高训练速度并改善所得词向量的质量。与Hierarchical Softmax 相比,Negative Sampling 不再使用复杂的Huffman 树,而是利用相对简单的随机负采样,能大幅提高性能。
CBOW模型
对于CBOW模型来说,已知,预测。那么,为正样本,其他词都是负样本。
假定现在已经选定一个关于的负样本子集,且对,定义
表示词的标签,即正样本的标签为1,负样本的标签为0。
对于一个正样本,我们希望最大化
其中
整理为一个整体表达式为
是中各词的词向量之和,表示词对应的一个向量。
则目标函数可表示为
整体的目标函数可表示为
取对数后为
为求导方便,可将上式简记为
利用梯度上升法对上式进行优化,首先计算对的梯度(与之前的梯度计算一样)
于是,的更新公式为:
同样,利用对称性,得到的梯度
那么,的更新公式为
Skip-gram模型
基于Negative Sampling 的Skip-gram 模型的思想与上一节的CBOW模型一样,直接从目标函数出发。
整体的目标函数可表示为
这里表示给定一个样本,我们需要最大化的量。
其中表示处理词时生成的负样本子集,条件概率
整理为一个整体表达式为
取对数后为
网友评论