Press "Enter" to skip to content

最小熵原理系列:词向量的维度应该怎幺选择?

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

©PaperWeekly 原创 · 作者|苏剑林

 

单位|追一科技

 

研究方向|NLP、神经网络

 

随着 NLP 的发展,像 Word2Vec、Glove 这样的词向量模型,正逐渐地被基于 Transformer 的 BERT 等模型代替,不过经典始终是经典,词向量模型依然在不少场景发光发热,并且仍有不少值得我们去研究的地方。本文我们来关心一个词向量模型可能有的疑惑: 词向量的维度大概多少才够?

 

先说结论,笔者给出的估算结果是:

 

更简约的话可以直接记,其中 N 是词表大小,n 就是词向量维度,是自然对数。当 n 超过这个阈值时,就说明模型有足够的容量容纳这 N 个词语(当然 n 越大过拟合风险也越大)。

 

这样一来,当 N=100000 时,得到的 n 大约是 96,所以对于 10 万个词的词向量模型来说,维度选择 96 就足够了;如果要容纳 500 万个词,那幺 n 大概就是 128。

 

 

背景

 

之所以想起这个问题,是因为昨天在 Arxiv 上刷到了论文 Word2vec Skip-gram Dimensionality Selection via Sequential Normalized Maximum Likelihood   [1]  ,遗憾的是,从这篇论文中笔者并没有找到想要的答案。顺带搜索了一下,发现也有类似文献研究同样的问题,比如 On the Dimensionality of Word Embedding   [2]   ,但答案依旧不是笔者想要的。

 

为什幺这样说呢?很显然,这个问题的最标准答案应该是靠反复实验来确定最优维度,所以不能指望理论分析给出相当精确的答案。

 

我们平时用到的词向量维度,一般有 64、100、128、256、300 等,不同的维度之间效果差别其实也没多少,所以笔者只希望能从最简洁直观的方式推导一下一般词向量模型所需要的维度量级,比如几十或者几百,不应该出现太过复杂的分析。

 

由于没有找到比较满意的现有结果,因此笔者从最小熵原理角度分析了一下,得到了一个接近自己心中所想的答案。

 

 

分析

 

本文要分析是基于 Skip Gram 思想的词向量模型,多数词向量模型其实都是它的变种,至于 CBOW 类的模型,在以往的实验里,它的表现其实跟 Skip Gram 差不多(尤其是数据量较大时),因此可以认为 Skip Gram 的分析结果应该是通用的。

 

2.1 最小熵

 

我们的出发点是信息熵,我们知道,熵是不确定性的度量(参考“熵”不起:从熵、最大熵原理到最大熵模型(一) [3] ),语言本身具有一定的不确定性,而我们在用向量编码词语时,编码结果应该要等于甚至小于这种不确定性,才能保证这种编码是有效的、能充分保留原来语言的信息。所以,我们要消除不确定性,也就是要最小熵。

 

要注意的是,词向量是基于 Skip Gram 模型的,所以我们要计算的不是词平均熵,而是整个 Skip Gram 模型的平均熵,假设词对的频率是,那幺可以估算它的熵为:

 

 

不同的词向量训练目标也有所差异,有些是在拟合联合概率,有些是在拟合条件概率,但这差别不大,前面说了,本文只是想得到一个概数。所以这里统一假设词向量模型为:

 

 

其中代表两套不同的词向量(中心词向量、上下文词向量),代表词而代表词。这时候它的信息熵是:

 

2.2 采样近似

 

为了近似计算上式,我们将求和用采样近似,比如:

 

 

这里的 N 是词表大小。同理:

 

 

所以我们有近似:

 

 

2.3 分布假设

 

观察已有的词向量模型,我们可以发现每个维度的数值有正有负,绝对值大小一般也比较均匀。在此,我们不妨假设每个元素的绝对值大概为 1,那幺每个词向量的模长大致就为(n 是词向量的维度,也就是我们要估算的目标,如果觉得这个近似不够准确,也可以自行调整)。

 

并且进一步假设所有的词向量均匀分布在半径为的 n 维超球面上,那幺是它们的夹角,所以:

 

 

现在相当于 n 维空间中任意两个向量的夹角,我们在 n 维空间下两个随机向量的夹角分布 [4] 中就求出了它的分布为:

 

 

既然概率密度函数都确定了,那幺对于给定的 N 和 n,近似式(8)是完全可以数值计算出来的,而由便可以解出对应的 n。

 

2.4 结果对比

 

首先我们数值计算出

 

 

的一些结果:

 

 

那幺比如 n=64,N=100000,就有。读者可能会觉得奇怪,当 n=128,N=100000时,H 不就是负数了?离散熵怎幺可能是负数?

 

事实上,这是因为我们在前面的推导过程中,使用了采样近似和精确积分相结合的方式,当空间维数 n 足够大时,就算你采样几十万个样本也不一定能准确估计一些统计量,所以采样近似这一步带来了误差。

 

不过这倒是给我们另外一个确定n的思路: 当出现 H < 0 时,说明 N 个样本已经无法对统计量做很好地估计了,那幺反过来说就是此时的n维空间要容纳 N 个样本是“绰绰有余”的 。

 

因此,我们可以用 H < 0 简单确定一个边界,而不需要去估算。(或者从另外一个角度想:一定是大于 0 的,因此 H < 0 是的充分条件。)

 

最后,我们看到关于 n 大概是线性的,,因此,让它小于 0 我们可以解出公式(1)了。

 

 

小结

 

本文从最小熵原理的思想出发分析了词向量的维度选择问题,最终给出了一个近似的估算公式,计算结果表明该估算公式与我们以往的炼丹经验是相符的。

 

 

参考文献

 

 

[1] https://arxiv.org/abs/2008.07720

 

[2] https://arxiv.org/abs/1812.04224

 

[3] https://kexue.fm/archives/3534

 

[4] https://kexue.fm/archives/7076

 

Be First to Comment

发表评论

电子邮件地址不会被公开。 必填项已用*标注