前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >词向量的维度大概多少才够?

词向量的维度大概多少才够?

作者头像
mathor
发布2021-07-07 17:55:44
2.1K0
发布2021-07-07 17:55:44
举报
文章被收录于专栏:mathormathor

词向量的维度大概多少才够?先说结论,苏剑林大佬给出的估算结果是

n > 8.33 \log N \tag{1}

更简约的话可以直接记n > 8\log NN是词表的大小,n是词向量的维度。当n超过这个阈值时,就说明模型有足够的容量容纳这N个词(当然n越大过拟合风险也越大)。这样一来,当N=100000时,得到的n大约是96,所以对于10万个词的词向量模型来说,维度选择96就足够了;如果要容纳500万个词,那么n大概就是128

选择最佳的词向量维度应该是靠反复实验来确定的,所以不能指望理论分析给出非常精确的答案,我们平时用到的词向量维度一般有64、128、256等,不同的维度只见效果差别其实并不大,所以本文仅仅只希望从最简洁直观的方式推导一下一般词向量模型所需要的维度量级

最小熵

我们的出发点是信息熵,我们知道,熵是不确定性的度量,语言本身具有一定的不确定性,而我们在用向量编码词语时,编码结果应该要等于甚至小于这种不确定性,才能保证这种编码是有效的、能充分保留原来语言的信息。所以,我们要消除不确定性,也就是要最小熵

要注意的是,词向量是基于Skip Gram模型的,所以我们要计算的不是词平均熵,而是整个Skip Gram模型的平均熵。假设词对(w_i, w_j)的频率是\tilde{p}(w_i,w_j),那么可以估算它的熵为

\tilde{H}=-\sum_{i,j}\tilde{p}(w_i,w_j)\log \tilde{p}(w_i,w_j) \tag{2}

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

p(w_i, w_j) = \frac{e^{\langle\boldsymbol{u}_i, \boldsymbol{v}_j\rangle}}{Z},\quad Z = \sum_{i,j}e^{\langle\boldsymbol{u}_i, \boldsymbol{v}_j\rangle} \tag{3}

其中\boldsymbol{u},\boldsymbol{v}代表两套不同的词向量(中心词向量、上下文词向量),\boldsymbol{u}_i代表词w_i\boldsymbol{v}_j代表词w_j。这时候它的信息熵是

H=-\sum_{i, j} p(w_i, w_j)\log p(w_i, w_j)=\log Z-\frac{1}{Z}\sum_{i, j} e^{\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle} \langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle \tag{4}

$$ \begin{aligned} -\sum_{i, j} p(w_i, w_j)\log p(w_i, w_j)&=-\sum_{i,j} \frac{e^{\langle\boldsymbol{u}_i, \boldsymbol{v}_j\rangle}}{Z}(\langle\boldsymbol{u}_i, \boldsymbol{v}_j\rangle-\log Z)\\ &= \sum_{i,j} \frac{e^{\langle\boldsymbol{u}_i, \boldsymbol{v}_j\rangle}}{Z}(\log Z-\langle\boldsymbol{u}_i, \boldsymbol{v}_j\rangle)\\ &= \sum_{i,j} \frac{e^{\langle\boldsymbol{u}_i, \boldsymbol{v}_j\rangle}}{Z}(\log Z - \frac{Z}{Z} \langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle)\\ &= \sum_{i,j} \frac{e^{\langle\boldsymbol{u}_i, \boldsymbol{v}_j\rangle}}{Z}(\log Z - \frac{1}{Z} \sum_{i,j}e^{\langle\boldsymbol{u}_i, \boldsymbol{v}_j\rangle}\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle)\\ &= \log Z - \frac{1}{Z} \sum_{i,j}e^{\langle\boldsymbol{u}_i, \boldsymbol{v}_j\rangle}\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle \end{aligned} $$

近似采样

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

Z = \sum_{i,j}e^{\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle} = N^2 \times \frac{1}{N^2} \sum_{i,j}e^{\langle \boldsymbol{u}_i,\boldsymbol{v}_j \rangle}\approx N^2 \mathbb{E}_{\boldsymbol{u}_i,\boldsymbol{v}_j}\left[ e^{\langle\boldsymbol{u}_i, \boldsymbol{v}_j\rangle}\right] \tag{5}

为什么最后会得到一个期望呢,回想一下期望计算的定义,期望等于值乘以对应的概率。这里我们假设每一项e^{\langle \boldsymbol{u}_i, \boldsymbol{v}_j \rangle}的概率都是均等的,一共有N^2项,所以 $$ \begin{aligned} \frac{1}{N^2} \sum_{i,j}e^{\langle \boldsymbol{u}_i,\boldsymbol{v}_j \rangle} &= \sum_i \frac{1}{N}\sum_j \frac{1}{N} e^{\langle \boldsymbol{u}_i,\boldsymbol{v}_j \rangle}\\ &= \sum_i \frac{1}{N} \mathbb{E}_{\boldsymbol{v}_j} \left[ e^{\langle\boldsymbol{u}_i, \boldsymbol{v}_j\rangle}\right]\\ &= \mathbb{E}_{\boldsymbol{u}_i,\boldsymbol{v}_j}\left[ e^{\langle\boldsymbol{u}_i, \boldsymbol{v}_j\rangle}\right] \end{aligned} $$

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

\sum_{i,j} e^{\langle \boldsymbol{u}_i,\boldsymbol{v}_j\rangle} \langle \boldsymbol{u}_i,\boldsymbol{v}_j\rangle \approx N^2 \mathbb{E}_{\boldsymbol{u}_i,\boldsymbol{v}_j} \left[e^{\langle \boldsymbol{u}_i, \boldsymbol{v}_j \rangle} \langle \boldsymbol{u}_i, \boldsymbol{v}_j \rangle\right] \tag{6}

所以我们有近似

H \approx \log N^2 + \log \mathbb{E}_{\boldsymbol{u}_i, \boldsymbol{v}_j}\left[e^{\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle}\right] - \frac{\mathbb{E}_{\boldsymbol{u}_i, \boldsymbol{v}_j}\left[e^{\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle}\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle\right]}{\mathbb{E}_{\boldsymbol{u}_i, \boldsymbol{v}_j}\left[e^{\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle}\right]}\tag{7}
分布假设

观察已有的词向量模型,我们可以发现每个维度的数值有正有负,绝对值大小一般也比较均匀。在此,我们不妨假设每个元素的绝对值大概为1,那么每个词向量的模长大致就为\sqrt{n}n是词向量的维度,也就是我们要估算的目标,如果觉得这个近似不够精确,也可以自行调整),并且进一步假设所有的词向量均匀分布在半径为\sqrt{n}n维超球面上,那么\langle \boldsymbol{u}_i, \boldsymbol{v}_j\rangle=n\cos \theta\theta是它们的夹角,所以

H\approx \log N^2 + \log \mathbb{E}_{\theta}\left[ e^{n\cos \theta}\right]-\frac{\mathbb{E_{\theta}}[e^{n\cos \theta}n \cos \theta]}{\mathbb{E}_{\theta}[e^{n\cos \theta}]}\tag{8}

现在\theta相当于n维空间中任意两个向量的夹角,而n维空间下两个随机向量夹角的分布为

p_n(\theta) = \frac{\Gamma(\frac{n}{2})}{\Gamma(\frac{n-1}{2})\sqrt{\pi}}\sin^{n-2}\theta \tag{9}

既然概率密度函数都确定了,那么对于给定的nN,近似式(8)是完全可以数值计算出来的,而由\tilde{H}>Hn

结果对比

首先我们数值计算出h_n=\log \mathbb{E}_{\theta} [e^{n\cos \theta}]\frac{\mathbb{E_{\theta}}[e^{n\cos \theta}n \cos \theta]}{\mathbb{E}_{\theta}[e^{n\cos \theta}]}的一些结果:

$$ \begin{array}{c|cccccc} \hline n & 32 & 64 & 96 & 128 & 256 & 512\\ \hline h_n & -7.77471 & -15.4734 & -23.1726 & -30.8718 & -61.6692 & -123.264\\ \hline \end{array} $$

那么比如n=64,N=100000,就有H\approx \log 100000^2-15.4734=7.55245。读者可能会觉得奇怪,当n=128,N=100000时,H不就是负数了?事实上,这是因为我们在前面的推导过程中,使用了采样近似和精确积分相结合的方式,当空间维数n足够大时,就算你采样几十万个样本也不一定能准确估计一些统计量,所以近似采样这一步带来了误差

不过这倒是给我们另外一个确定n的思路:当出现H<0N个样本已经无法对统计量做很好地估计了,那么反过来说就是此时的n维空间要容纳N个样本是绰绰有余的。因此,我们可以用H<0\tilde{H}(或者从另一个角度想:\tilde{H}一定是大于0的,因此H<0H<\tilde{H}

最后,我们看到h_n关于n大概是线性的,h_n/n\approx -0.24,因此H\approx \log N^2 -0.24n,令H<0

Reference
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最小熵
  • 近似采样
  • 分布假设
  • 结果对比
  • Reference
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档