(1)CBOW与Skip-gram模型基础

1.词向量基础

(1)one-hot
①缺点:单词过多,维度灾难。
在这里插入图片描述

(2) Distributed representation
思路:(首先随机初始化向量)通过训练,将每个词都映射到一个较短的词向量上来。所有的这些词向量就构成了向量空间,进而可以用普通的统计学的方法来研究词与词之间的关系。
在这里插入图片描述在这里插入图片描述

2.CBOW与Skip-Gram用于神经网络语言模型

在word2vec出现之前,已经有用神经网络DNN来用训练词向量进而处理词与词之间的关系了。采用的方法一般是一个三层的神经网络结构(当然也可以多层),分为输入层,隐藏层和输出层(softmax层)。
在这里插入图片描述

【困难点总结】
(1)以我们的Hierarchical Softmax来说,如果是CBOW,那么输入的是上下文词向量的平均向量(shape=dim,windows,矩阵),而输出是期望的中心词向量。
CBOW:①输入是窗口大小,比如8个,输出V个,最终选择V个中softmax最大的那个值(第max个dim维词向量),即中心词词向量见(2)。
②或者直接输出维度为dim的词向量,然后在词汇表中比较最相似的词向量,进而得到输出词。
Skip-Gram: 输入是中心词1个,输出V个,最终选择V个中softmax最大的那个值。
(2)神经网络的CBOW,它使用均方差或softmax等来计算损失。即在迭代的时候,使用当前前向传播得到的中心词词向量,对比当前target词向量,计算两者的欧式距离,距离越远,损失越大。 更新的是所有窗口词向量(不包括中心词向量)

(1)CBOW
①基本概念

输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。比如下面这段话,我们的上下文大小取值为4,特定的这个词是"Learning",也就是我们需要的输出词向量,上下文对应的词有8个,前后各4个,这8个词是我们模型的输入。由于CBOW使用的是词袋模型,因此这8个词都是平等的,也就是不考虑他们和我们关注的词之间的距离大小,只要在我们上下文之内即可。

在这里插入图片描述

输入是8个词向量,输出是所有词的softmax概率(训练的目标是期望训练样本特定词对应的softmax概率最大),对应的CBOW神经网络模型输入层有8个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某8个词对应的最可能的输出中心词时,我们可以通过一次DNN前向传播算法并通过softmax激活函数找到概率最大的词对应的神经元即可。

②过程展示

1.语料库{I drink coffee everyday},coffee为目标词。
输入层Xi为每个词的初始化向量(可以随机初始化向量,这里以one-hot方便理解)。
在这里插入图片描述

2.初始化出入层权重W,shape=(dim,windows)。WXi=Vi,即每个词对应的词分布向量Vi。
在这里插入图片描述

3.)隐藏层上下文向量为θ=~V2=(V1+V3+V4)/len(windows)
在这里插入图片描述

4.隐藏层权重W’,shape=(dim,windows-1)。最后输出层的输入向量=W’* θ上下文向量
在这里插入图片描述

5.输出层softmax化,即得到概率分布。
在这里插入图片描述

(2)Skip-gram

与Cbow相反。即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。还是上面的例子,我们的上下文大小取值为4, 特定的这个词"Learning"是我们的输入,而这8个上下文词是我们的输出。
 这样我们这个Skip-Gram的例子里,我们的输入是特定词, 输出是softmax概率排前8的8个词,对应的Skip-Gram神经网络模型输入层有1个神经元,输出层有词汇表V大小个神经元(真尼玛大)。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某1个词对应的最可能的8个上下文词时,我们可以通过一次DNN前向传播算法得到概率大小排前8的softmax概率对应的神经元所对应的词即可。

(3)改进思考
由于DNN模型在这个处理过程非常耗时。我们的词汇表一般在百万级别以上,这意味着我们DNN的输出层需要进行softmax计算各个词的输出概率的的计算量很大,所以就有了霍夫曼树。

3.哈夫曼树基础(按频率/权重排列)

为了改进Softmax计算量巨大,使用哈夫曼树来代替隐藏层和输出层的神经元 ,霍夫曼树的叶子节点起到输出层神经元的作用,叶子节点的个数即为词汇表的大小。 而内部节点则起到隐藏层神经元的作用。过程如下:
①输入:权值为(w1,w2,…wn)的n个节点
②输出:对应的哈夫曼树
(1)将(w1,w2,…wn)看成是有n个节点。
(2)将森林中选择根节点权值最小的两棵树进行合并,得到一个新的树,这两棵树分布作为新树的左右子树。新树的根节点权重为左右子树的根节点权重之和。
(3)将之前的根节点权值最小的两棵树从森林删除,并把新树加入森林。
(4)重复(2,3)

在这里插入图片描述

在word2vec中,约定编码方式和上面的例子相反,即约定左子树编码为1,右子树编码为0,同时约定左子树的权重不小于右子树的权重。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值