聊一下Word2vec-训练优化篇-CSDN博客

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Word2vec 涉及到两种优化方式一种是负采样一种是层序Softmax

先谈一下负采样以跳字模型为例。中心词生成背景词可以由两个相互独立事件的联合组成来近似引自李沐大神的讲解。

第一个事件是中心词和背景词同时出现在窗口中。第二个事件是中心词和K个噪声词不同时出现在窗口数据中其中噪声词由噪声分布随机生成。

这里我们就可以知道上一个文章开头说到的负采样是一种等价操作还是近似操作我们在第二个事件中使用了K个噪声词。但是实际上呢应该远远大于K。

还是那个例子句子为"我/永远/爱/中国/共产党"中心词为’爱’我们在选择噪声词的时候选择了K个但是实际上在词汇表中排除掉’我’‘永远’‘中国’‘共产党’ 这四个词汇的其他词都可以算做我的噪声词然而为了减少复杂度我只选择了其中的K个所以当然应该是近似了。

接下来我们看层序Softmax。

层序Softmax 对应的就是在输出层使用一个霍夫曼树代替了原本在输出层统一进行的softmax。

首先我们需要了解霍夫曼树在这里是如何构建的。

简单讲霍夫曼树是一个二叉树以语料中出现过的词当做叶子节点以各词在语料中出现的次数当做权值进行构造。其中叶子节点有N个就是词典的大小非叶子节点有N-1个包括根节点。

比如说我的所有文章中“共产党”这个词出现了 100次是最大的那么根节点的左分支或者右分支就对应着”共产党“这个词另一个分支做与根节点相同的操作找到排除”共产党“这个词之外的所有词中最大的词比如”中国“作为其中的左分支或者右分支以此类推一个霍夫曼树就成功构建。

霍夫曼树中我们需要注意的是每个非叶子节点对应一个向量每个叶子节点对应一个向量。两种向量都会随着模型的训练进行更新。

其中叶子节点的向量就是我们的词向量而非叶子节点上的向量就是没有什么实际含义它的作用就是帮助我们计算模型在霍夫曼树上不断的进行二分类时候的概率。

以上面那句话为例我们现在中心词为‘爱’然后我要预测背景词‘中国’。首先我们要确定的是我的叶子节点是包含所有单词的也就是包含了我这个简单句子的五个单词不考虑前期数据清洗低频率词的情况。

也就是说在这个霍夫曼树上有且仅有一条路径让我从根节点出发经过多次判断也就是说走过了多个非叶子节点最终走到了“中国”这个叶子节点对应的概率就是每个节点概率的连乘。

然后这个时候我们想一下霍夫曼树是不是一种近似

当然我们每更新一个词向量只是涉及到了可以到达叶子节点的这一条路径上节点。所以复杂度就是树的高度也就是 O(log|V|)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6