深度学习笔记之自然语言处理(word2vec)
1.1 自然语言处理的应用
拼写检查,关键词搜索
文本挖掘
文本分类
机器翻译
客服系统
复杂对话系统
1.2 语言模型
举个例子:
这里有一句话:“我今天下午打篮球。”
p(S)是称为语言模型,即用来计算一个句子概率的模型。
如下的语言模型,会造成数据过于稀疏,参数空间太大。
用下述的方式可以解决上面的问题。如下:
假设下一个词的出现依赖于它前面的一个词
假设下一个词的出现依赖于它前面的两个词
我们以下面的一个简单的词库表来讲解。如下所示是一个词库表。
下方的数字是每一个词在词库中 出现的次数。
将该词频转化为n*n的矩阵,其中n-gram=1。
我们可以从该矩阵得知单词 “i”后面接“want”的次数为827次,“i”后面接“eat”的次数为9次,以此类推。
然后将上述矩阵转化为概率转移矩阵。如下所示:
如下即为“I want chinese food”概率计算公式:
下图是模型参数数量和n-gram参数个数的关系:
1.3 两个基础模型(CBOW and skip-gram)
模型结构如下:
我们首先看CBOW模型,它是根据上下文来预测当前词,而Skip-gram模型则是根据当前词,预测上下文。
CBOW是Continuous Bag-of-Words Model的缩写,是一种根据上下文的词语预测当前词语的概率模型。将其转化为极大似然估计,如下:
我们看其训练步骤,如下所示:
输入层是上下文的词语的词向量,在训练CBOW模型,词向量只是个副产品,确切来说,是CBOW模型的一个参数。训练开始的时候,词向量是个随机值,随着训练的进行不断被更新。
投影层对其求和,所谓求和就是简单的向量加法。
输出层输出最可能的w。由于语料库中词汇向量是固定的,所以上述问题可以看成是一个多分类问题,给定特征,从多个之中挑一个。
pw 从根节点w对应叶子节点的路径lw 路径中节点的个数pw1,pw2,pw3...pwn 路径pw 中的各个节点dw1,dw2,...dwn∈{0,1} 词w的编码,dwj 表示路径pw 第j个节点对应的编码(根节点无编码)θw1,θw2,...,θwlw−1 pw 路径pw 中非叶节点对应的参数向量
1.4 负采样
任何采样算法应该保证频次越高的样本越容易被采样出来。基本思路是对于长度为1的线段,根据词语的词频将其公平的分配给每个词语:
counter就是w的词频。
于是我们将该线段公平的分配了:
接下来,我们只要生成0-1之间的随机数,看看落在哪个区间,就能采样到该区间对应的单词了。