【NLP】word2vec哈夫曼编码/层次softmax

一、回顾word2vec的训练流程:

1.初始化一个embedding权重矩阵W1(N*D)→

2.根据输入单词直接挑出W1矩阵中对应的行向量→

3.相加并求平均得一个向量(1*D)→

4.和W2矩阵(D*N)相乘得最终预测置信度(1*N)→

5.经过softmax得概率(1*N)(注:N为词典大小,D为词向量维度)。

二、为什么要进行哈夫曼编码/层次softmax?

优化【word2vec的训练流程】的第4、5步的计算效率。由于softmax计算分母要求和,在上文第4步时,每预测一个单词,都要进行一次计算,可以看出计算量和词典大小有关(W2矩阵为D“*N)。那我不用softmax函数(虽然叫层次softmax,但并没有用到softmax函数)不就得了;

第二个优化就是减少W2权重矩阵的个数。

三、如何进行哈夫曼编码/层次softmax?

1. 先构造一棵哈夫曼树,这棵树在词典确定好之后就可以构建了:把词频作为权重去构造哈夫曼二叉树,导致权重大的,即经常出现的词更靠近根节点(具体构造方法网上有很多资料)。构造好之后,叶节点涵盖了词典内所有的词,而每个非叶节点上的词频权重可以扔掉了,这些节点在下一步会被赋予新的需要计算的权重,每个节点上的权重形状为D*1。

2. 在【word2vec的训练流程】的第4步,W2不再是一个D*N的矩阵,而是D维度不变,N维度对应哈夫曼树从根节点到预测叶节点走过的节点数,比如我预测一个深度处于2的叶节点上的词,此时的N为2,不再是以前的词典大小。

每个节点计算时,是一次二分类,【word2vec的训练流程】的第3步的输出(1*D)和该节点(D*1)进行点积之后使用sigmoid函数。

推荐结合word2vec中关于霍夫曼树的应用原理_beck_zhou的博客-CSDN博客一起看,这篇文章里有更丰富的细节。

你可能感兴趣的:(自然语言处理,word2vec,人工智能,深度学习)