深度学习笔记之自然语言处理(word2vec)

1.1 自然语言处理的应用

拼写检查,关键词搜索
文本挖掘
文本分类
机器翻译
客服系统
复杂对话系统

1.2 语言模型

举个例子:
这里有一句话:“我今天下午打篮球。”

深度学习笔记之自然语言处理(word2vec)

p(S)是称为语言模型,即用来计算一个句子概率的模型。
如下的语言模型,会造成数据过于稀疏,参数空间太大

深度学习笔记之自然语言处理(word2vec)

用下述的方式可以解决上面的问题。如下:
假设下一个词的出现依赖于它前面的一个词

深度学习笔记之自然语言处理(word2vec)

假设下一个词的出现依赖于它前面的两个词

深度学习笔记之自然语言处理(word2vec)

我们以下面的一个简单的词库表来讲解。如下所示是一个词库表。

深度学习笔记之自然语言处理(word2vec)

下方的数字是每一个词在词库中 出现的次数。
将该词频转化为n*n的矩阵,其中n-gram=1。

深度学习笔记之自然语言处理(word2vec)

我们可以从该矩阵得知单词 “i”后面接“want”的次数为827次,“i”后面接“eat”的次数为9次,以此类推。
然后将上述矩阵转化为概率转移矩阵。如下所示:

深度学习笔记之自然语言处理(word2vec)

如下即为“I want chinese food”概率计算公式:

深度学习笔记之自然语言处理(word2vec)

下图是模型参数数量和n-gram参数个数的关系:

深度学习笔记之自然语言处理(word2vec)

1.3 两个基础模型(CBOW and skip-gram)

模型结构如下:

深度学习笔记之自然语言处理(word2vec)

我们首先看CBOW模型,它是根据上下文来预测当前词,而Skip-gram模型则是根据当前词,预测上下文。
CBOW是Continuous Bag-of-Words Model的缩写,是一种根据上下文的词语预测当前词语的概率模型。将其转化为极大似然估计,如下:

L=wclogp(w|Context(w))

我们看其训练步骤,如下所示:

深度学习笔记之自然语言处理(word2vec)

输入层是上下文的词语的词向量,在训练CBOW模型,词向量只是个副产品,确切来说,是CBOW模型的一个参数。训练开始的时候,词向量是个随机值,随着训练的进行不断被更新。
投影层对其求和,所谓求和就是简单的向量加法。
输出层输出最可能的w。由于语料库中词汇向量是固定的,所以上述问题可以看成是一个多分类问题,给定特征,从多个之中挑一个。

  1. pw从根节点w对应叶子节点的路径
  2. lw路径中节点的个数
  3. pw1,pw2,pw3...pwn路径pw中的各个节点
  4. dw1,dw2,...dwn{0,1}词w的编码,dwj表示路径pw第j个节点对应的编码(根节点无编码)
  5. θw1,θw2,...,θwlw1pw路径pw中非叶节点对应的参数向量

1.4 负采样

任何采样算法应该保证频次越高的样本越容易被采样出来。基本思路是对于长度为1的线段,根据词语的词频将其公平的分配给每个词语:

len(w)=counter(w)uDcounter(u)

counter就是w的词频。
于是我们将该线段公平的分配了:

深度学习笔记之自然语言处理(word2vec)

接下来,我们只要生成0-1之间的随机数,看看落在哪个区间,就能采样到该区间对应的单词了。