返回介绍

数学基础

统计学习

深度学习

工具

Scala

五、FastText

发布于 2023-07-17 23:38:25 字数 53701 浏览 0 评论 0 收藏 0

  1. 学习词向量的所有无监督方法最终都是基于语料库的单词共现统计,因此这些模型之间存在共性。

  2. 词向量学习算法有两个主要的模型族:

    • 基于全局矩阵分解的方法,如:latent semantic analysis:LSA

      • 优点:能够有效的利用全局的统计信息。

      • 缺点:在单词类比任务(如:国王 vs 王后 类比于男人 vs 女人)中表现相对较差。

    • 基于局部上下文窗口的方法,如:word2vec

      • 优点:在单词类比任务中表现较好。

      • 缺点:因为word2vec 在独立的局部上下文窗口上训练,因此难以利用单词的全局统计信息。

  3. Global Vectors for Word Representation:GloVe 结合了LSA 算法和Word2Vec 算法的优点,既考虑了全局统计信息,又利用了局部上下文。

4.1 原理

  1. 单词-单词 共现矩阵为X$ \mathbf X $ ,其中Xi,j$ X_{i,j} $ 表示在整个语料库中单词wordj$ \text{word}_j $ 在单词wordi$ \text{word}_i $ 上下文中出现的次数。 令:

    • Xi=k=1VXi,k$ X_i =\sum_{k=1}^V X_{i,k} $ ,它表示:单词wordi$ \text{word}_i $ 上下文中出现的所有单词的总数。

    • Pi,j=P(wordjwordi)=Xi,jXi$ P_{i,j} = P(\text{word}_j\mid \text{word}_i) = \frac {X_{i,j}}{X_i} $ ,它表示:单词wordj$ \text{word}_j $ 出现在单词wordi$ \text{word}_i $ 的上下文中的概率。

    • Ratioi,jk=Pi,kPj,k$ Ratio_{i,j}^k=\frac{P_{i,k}}{P_{j,k}} $ ,它表示:单词wordk$ \text{word}_k $ 出现在单词wordi$ \text{word}_i $ 的上下文中的概率,相对于单词wordk$ \text{word}_k $ 出现在单词wordj$ \text{word}_j $ 的上下文中的概率的比值。

    从经验中可以发现以下规律:

    单词wordk$ \text{word}_k $ 和单词wordi$ \text{word}_i $ 相关单词wordk$ \text{word}_k $ 和单词wordi$ \text{word}_i $ 不相关
    单词wordk$ \text{word}_k $ 和单词wordj$ \text{word}_j $ 相关Ratioi,jk$ Ratio_{i,j}^k $ 趋近于 1Ratioi,jk$ Ratio_{i,j}^k $ 比较小
    单词wordk$ \text{word}_k $ 和单词wordj$ \text{word}_j $ 不相关Ratioi,jk$ Ratio_{i,j}^k $ 比较大Ratioi,jk$ Ratio_{i,j}^k $ 趋近于 1

    因此Ratioi,jk$ Ratio_{i,j}^k $ 能够反映单词之间的相关性。

  2. 假设单词wordi,wordj,wordk$ \text{word}_i,\text{word}_j,\text{word}_k $ 的词向量分别为wi,wj,wk$ \mathbf{\vec w}_i,\mathbf{\vec w}_j,\mathbf{\vec w}_k $ 。

    GloVe 认为:这三个单词的词向量经过某个函数的映射之后等于Ratioi,jk$ Ratio_{i,j}^k $ 。即:词向量中包含了共现矩阵的信息。

    假设这个映射函数为F$ F $ ,则有:

    (101)F(wi,wj,wk)=Ratioi,jk=Pi,kPj,k

    现在的问题是F()$ F(\cdot) $ 未知,词向量wi,wj,wk$ \mathbf{\vec w}_i,\mathbf{\vec w}_j,\mathbf{\vec w}_k $ 也是未知。如果能够确定F()$ F(\cdot) $ ,则可以求解词向量。

  3. 由于F()$ F(\cdot) $ 映射的是向量空间,而向量空间是一个线性空间。因此从右侧的除法Pi,kPj,k$ \frac{P_{i,k}}{P_{j,k}} $ 可以联想到对wi$ \mathbf{\vec w}_i $ 和wj$ \mathbf{\vec w}_j $ 做减法。即F()$ F(\cdot) $ 的形式为:

    (102)F(wiwj,wk)=Pi,kPj,k

    由于wiwj$ \mathbf{\vec w}_i-\mathbf{\vec w}_j $ 和wk$ \mathbf{\vec w}_k $ 均为向量,而Pi,kPj,k$ \frac{P_{i,k}}{P_{j,k}} $ 为标量。因此可以联想到向量的内积。即F()$ F(\cdot) $ 的形式为:

    (103)F((wiwj)Twk)=F(wiTwkwjTwk)=Pi,kPj,k

    上式左边为差的形式,右边为商的形式。因此联想到函数exp()$ \exp(\cdot) $ 。即F()$ F(\cdot) $ 的形式为:

    (104)F()=exp()wiTwkwjTwk=logPi,klogPj,k

    要想使得上式成立,只需要令wiTwk=logPi,k,wjTwk=logPj,k$ \mathbf{\vec w}_i^T\mathbf{\vec w}_k = \log P_{i,k},\quad \mathbf{\vec w}_j^T\mathbf{\vec w}_k = \log P_{j,k} $ 即可。

    • 向量的内积具有对称性,即wiTwk=wkTwi$ \mathbf{\vec w}_i^T\mathbf{\vec w}_k=\mathbf{\vec w}_k^T\mathbf{\vec w}_i $ 。而logXi,kXilogXk,iXk$ \log \frac{X_{i,k}} {X_i} \ne \log \frac{X_{k,i}}{X_k} $ ,即:logPi,klogPk,i$ \log P_{i,k} \ne \log P_{k,i} $ 。

      为了解决这个问题,模型引入两个偏置项:

      (105)logXi,k=wiTwk+bi+b~k
    • 上面的公式仅仅是理想状态,实际上只能要求左右两边尽可能相等。于是设计代价函数为:

      (106)J=i,k(wiTwk+bi+b~klogXi,k)2

      其中w,b,b~$ \mathbf{\vec w},b,\tilde b $ 均为模型参数。

  4. 根据经验,如果两个词共现的次数越多,则这两个词在代价函数中的影响就应该越大。因此可以设计一个权重来对代价函数中的每一项进行加权,权重为共现次数的函数:

    (107)J=i,kf(Xi,k)(wiTwk+bi+b~klogXi,k)2

    其中权重函数应该符合三个条件:

    • f(0)=0$ f(0)=0 $ 。即:如果两个词没有共现过,则权重为 0 。

      这是为了确保limx0f(x)log2x$ \lim _{x\rightarrow 0} f(x) \log^2 x $ 是有限值。

    • f()$ f(\cdot) $ 是非递减的。即:两个词共现次数越大,则权重越大。

    • f()$ f(\cdot) $ 对于较大的Xi,k$ X_{i,k} $ 不能取太大的值。即:有些单词共现次数非常大(如单词 与其它词的组合) ,但是它们的重要性并不是很大。

    GloVe 论文给出的权重函数f()$ f(\cdot) $ 为:

    (108)f(x)={(xxmax)αifx<xmax1,otherwise

    其中:

    • GloVe 论文给出参数α$ \alpha $ 和xmax$ x_{\max} $ 的经验值为:α=34,xmax=100$ \alpha = \frac 34,x_{\max} = 100 $ 。

    • GloVe 论文指出:xmax$ x_{\max} $ 对模型的性能影响较小。

  5. 考虑对所有词向量增加一个常量c$ \mathbf{\vec c} $ ,则有:

    (109)(wi+c)T(wk+c)+(bicTwi||c||22)+(b~kcTwk||c||22)logXi,k=wiTwk+bi+b~klogXi,k

    b^i=bicTwi||c||22$ \hat b_i = b_i- \mathbf{\vec c}^T\mathbf{\vec w}_i- \frac{||\mathbf{\vec c}||^2}{2} $ ,b~^k=b~kcTwk||c||22$ \hat {\tilde b}_k=\tilde b_k-\mathbf{\vec c}^T\mathbf{\vec w}_k- \frac{||\mathbf{\vec c}||^2}{2} $ ,则:如果w1,w2,,wV$ \mathbf{\vec w}_1,\mathbf{\vec w}_2,\cdots,\mathbf{\vec w}_V $ 是Glove 的解,则w1+c,w2+c,,wV+c$ \mathbf{\vec w}_1+\mathbf{\vec c},\mathbf{\vec w}_2+\mathbf{\vec c},\cdots,\mathbf{\vec w}_V+\mathbf{\vec c} $ 也是Glove 的解。

    因此假设c$ \mathbf{\vec c} $ 是一个非常大的值,则会导致几乎所有的词向量都相似。

4.2 应用

  1. GloVe 模型的算法复杂度取决于共现矩阵X$ \mathbf X $ 中的非零元素的个数,最坏的情况下为O(V2)$ O(V^2) $ 。由于词汇表的数量通常很庞大,因此V2$ V^2 $ 会非常大。

    实际上单词共现的次数满足齐普夫定律(Zipf's Law),因此算法复杂度较低,约为O(|C|)$ O(|C|) $ , 其中C$ C $ 为语料库的大小。

    Zipf's Law:如果有一个包含n$ n $ 个词的文章,将这些词按其出现的频次递减地排序,那么序号r$ r $ 和其出现频次f$ f $ 之积f×r$ f\times r $ ,将近似地为一个常数,即f×r=const$ f\times r=const $

  2. GloVe 模型评估任务:

    • semantic 任务: 语义任务。如:'雅典'之于'希腊' = '柏林'之于'_'?

    • syntactic 任务:语法任务。如:'dance'之于'dancing' = 'fly'之于'_'?

  3. GloVe 模型性能与语料库大小的关系:

    • 在语法任务中,模型性能随着语料库大小的增长而单调增长。

      这是因为语料库越大,则语法的统计结果越可靠。

    • 在语义任务中,模型性能与语料库绝对大小无关,而与语料库的有效大小有关。

      有效大小指的是语料库中,与目标语义相关的内容的大小。

  4. GloVe 模型超参数选择:

    • 词向量大小:词向量大小越大,则模型性能越好。但是词向量超过 200 维时,维度增加的收益是递减的。

    • 窗口对称性:计算一个单词的上下文时,上下文窗口可以是对称的,也可以是非对称的。

      • 对称窗口:既考虑单词左侧的上下文,又考虑单词右侧的上下文。

      • 非对称窗口:只考虑单词左侧的上下文。

        因为语言的阅读习惯是从左到右,所以只考虑左侧的上下文,不考虑右侧的上下文。

    • 窗口大小:

      • 在语法任务中,选择小的、非对称的窗口时,模型性能更好。

        因为语法是局部的,所以小窗口即可;因为语法是依赖于单词顺序的,所以需要非对称窗口。

      • 对于语义任务,则需要选择更大的窗口。

        因为语义是非局部的。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文