深度学习之word2vec(四)

一、什么是词向量

       词向量最初是用one-hot represention表征的,也就是向量中每一个元素都关联着词库中的一个单词,指定词的向量表示为:其在向量中对应的元素设置为1,其他的元素设置为0。例如我们有5个词组成的词汇表,词"Queen"的序号为2, 那么它的词向量就是(0,1,0,0,0)。

       One hot用来表示词向量非常简单,但是却有很多问题。最大的问题是我们的词汇表一般都非常大,比如达到百万级别,这样每个词都用百万维的向量来表示简直是内存的灾难。

        为了解决这个痛点,出现了分布式表征,在word2vec中就是采用分布式表征,在向量维数比较大的情况下,每一个词都可以用元素的分布式权重来表示,因此,向量的每一维都表示一个特征向量,作用于所有的单词,而不是简单的元素和值之间的一一映射。这种方式抽象的表示了一个词的“意义”。

二、Word2Vec的两种形式

word2vec的两种形式:CBOW和Skip-gram模型

(1)CBOW模式

CBOW—利用某词汇的上下文,预测该词汇。

例如一段散文“The recently introduced continuous Skip-gram model is an efficient method for learning high-quality distributed vector representations that capture a large number of precises syntatic and semantic word relationships.”,想象这段文字上有一个滑动窗口,包括当前的词和前后的四个词。具体如下图:

      上下文词组成了输入层,每一个词都用one-hot形式来表示,如果词汇量是V,则每个词就表示成V维向量,相应的词对应元素被设置成1,其余的为0。下图表示一个单隐层和一个输出层。

       训练的目标是最大限度的观察实际输出词(焦点词)在给定输入上下文且考虑权重的条件概率。在我们的例子中,给出了输入(“一个”,“有效”,“方法”,“为”,“高”,“质量”,“分布式”,“向量”),我们要最大限度的获得“学习”作为输出的概率。

       由于我们的输入向量是用one-hot来表示的,与权重矩阵W1相乘就相当于简单的选择W1中的一行。

       如果输入了C个词向量,隐层的激活函数其实就是用来统计矩阵中的热点行,然后除以C来取平均值。这意味着,隐含层单元的激活函数就是简单的线性运算(直接将权重和作为下一层的输入)。

        从 隐层到输出层,我们用一个权重矩阵W2来为每一个词计算词汇表中的得分,然后使用softmax来计算词的后验分布。

(2)skip-gram模式

Skip-Gram—利用某词汇,预测该词汇的上下文。

     正如之前提到的,隐层的激活函数只是权重矩阵W1对应行的简单统计。在输出层,我们输出C个词向量。训练的最终目标就是减少输出层所有上下文词的预测错误率。例如,如果输入“learn”,我们可能在输出层得到“an”,“efficient”,“method”,“for”,“high”,“quality”,“distributed”,“vector”。

三、Word2Vec的优化—哈夫曼树

       层级softmax函数是用一个二叉树来表示词汇表中的所有单词,即用哈夫曼树作为softmax层,霍夫曼树的叶子节点起到输出层神经元的作用,叶子节点的个数即为词汇表的小大。 而内部节点则起到隐藏层神经元的作用。

     具体如何用霍夫曼树来进行CBOW和Skip-Gram的训练请看链接,这里我们先复习下霍夫曼树。

霍夫曼树的建立其实并不难,过程如下:

    输入:权值为(w1,w2,...wn)的n个节点

    输出:对应的霍夫曼树

    1)将(w1,w2,...wn)看做是有n棵树的森林,每个树仅有一个节点。

    2)在森林中选择根节点权值最小的两棵树进行合并,得到一个新的树,这两颗树分布作为新树的左右子树。新树的根节点权重为左右子树的根节点权重之和。

    3) 将之前的根节点权值最小的两棵树从森林删除,并把新树加入森林。

    4)重复步骤2)和3)直到森林里只有一棵树为止。

    下面我们用一个具体的例子来说明霍夫曼树建立的过程,我们有(a,b,c,d,e,f)共6个节点,节点的权值分布是(16,4,8,6,20,3)。

    首先是最小的b和f合并,得到的新树根节点权重是7.此时森林里5棵树,根节点权重分别是16,8,6,20,7。此时根节点权重最小的6,7合并,得到新子树,依次类推,最终得到下面的霍夫曼树。

    那么霍夫曼树有什么好处呢?一般得到霍夫曼树后我们会对叶子节点进行霍夫曼编码,由于权重高的叶子节点越靠近根节点,而权重低的叶子节点会远离根节点,这样我们的高权重节点编码值较短,而低权重值编码值较长。这保证的树的带权路径最短,也符合我们的信息论,即我们希望越常用的词拥有更短的编码。如何编码呢?一般对于一个霍夫曼树的节点(根节点除外),可以约定左子树编码为0,右子树编码为1.如上图,则可以得到c的编码是00。

     在word2vec中,约定编码方式和上面的例子相反,即约定左子树编码为1,右子树编码为0,同时约定左子树的权重不小于右子树的权重。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值