Word2vec的优化加速方法

举报
可爱又积极 发表于 2021/10/27 13:38:41 2021/10/27
【摘要】 Word2vec 最主要的问题是这个处理过程非常耗时,需要计算的参数较多。通常,词汇表容量在百万级别以上,这意味着输出层使用 softmax 计算各个词的输出概率的计算量很大,这就会导致模型在通过反向传播算法更新模型参数时的工作量变大,从而导致训练过程缓慢,无法很快收敛。Mikolov等人在 2013 年提出了几种解决办法,有效的提高了Word2vec 模型的训练速度和模型效果,使得 Wor...

Word2vec 最主要的问题是这个处理过程非常耗时,需要计算的参数较多。通常,词汇表容量在百万级别以上,这意味着输出层使用 softmax 计算各个词的输出概率的计算量很大,这就会导致模型在通过反向传播算法更新模型参数时的工作量变大,从而导致训练过程缓慢,无法很快收敛。Mikolov等人在 2013 年提出了几种解决办法,有效的提高了Word2vec 模型的训练速度和模型效果,使得 Word2vec 网络在文本表示中得到广泛应用。

第一种方法是在 2005 年由 Bengio等人提出的解决输出层 softmax 问题的层次 softmax 方法(Hierarchical softmax)。Bengio 等受数据结构哈夫曼树(Huffman
Tree)的启发,使用哈夫曼树来代替隐藏层和输出层的神经元,即使用哈夫曼树来代替 softmax,网络结构如图 1 所示。

图 1层次 softmax 结构
首先,我们依据词汇在数据中出现的次数作为权重构建哈夫曼树,权重值越大,则越靠近根节点。在哈夫曼树结构中,其根节点对应模型映射后的词嵌入向量,叶子节点等同于模型输出层的神经元,并且叶子节点的个数等同于字典的长度。在哈夫曼树中,神经网络模型的训练过程不是通过矩阵操作一次完成的,而是沿着树结构逐步走下去,直到寻找到目标词汇。在 word2vec 词向量模型中,模型通过二元逻辑回归计算方法来判断是沿着左子树走还是沿着右子树走。一般来说,往左就默认为负类(哈夫曼树编码为 1),往右就默认为正类(哈夫曼树编码为 0)。因此,计算某个词汇的概率就可以根据它在二叉树中的路径进行运算,这种层次 softmax 方法能够将计算次数从 O(N)降低到 O(logN)。并且,由于哈夫曼树是高频的词靠近根节点,这样高频词就会使用更少的时间被找到,这契合贪心优化思想。
第二种方法是负采样(Negative Sampling),该方法的大体思想就是通过构建负类样本来减少训练样本,进而提高模型训练速度。因为 word2vec 词向量模型在训练的过程中,每个训练样本都会影响到整个神经网络的参数,所以负采样随机选择一个很小数量的负样本的词,进而提高训练速度。假设有一个训练数据,中心词是 w,窗口大小为c,则共有 2c 个词,记作 context(w)。由于中心词 w 和 context(w)相关存在,因此是一个正例。通过负采样方法,获得 neg 个和 w 不同的中心词,
记作iw ,i=1,2,...,neg,这样就获得了 neg 个负例,利用这一个正例和 neg 个负例,使用二元逻辑回归求解模型参数。负采样方法的样本应该符合自然分布,词频越
高被选择到的概率应该越大,如公式 2-4 所示。在源码中,Mikolov 将公式进行修改,如下所示。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。