GloVe 与 fasttext

本文介绍了GloVe和fasttext两种词向量表示方法。GloVe利用共现矩阵和概率比值展现词义,通过优化损失函数得到词向量。而fasttext则引入n-gram,通过层次softmax提升计算效率,实现快速且准确的文本分类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

glove

对于一个词 i 出现的次数为 X i X_i Xi,在其某个窗口范围内的词 j 出现的次数为 X i j X_{ij} Xij X i j X_{ij} Xij 可以直接得到, X i X_i Xi 为所有 X i j X_{ij} Xij 的累加和。对于 i 来说,共现矩阵要对所有 i 出现的地方计算 X i j X_{ij} Xij,最后再累加求和得到 X i X_i Xi。共现矩阵局算的是概率值 P i j = P ( j ∣ i ) = X i j X i P_{ij} = P(j|i) = \frac{X_{ij}}{X_i} Pij=P(ji)=XiXij
j 是 在 i 的窗口内出现的,所以利用到了局部窗口信息;次数的计算利用到了所有 i 和 j 共同出现的地方,这是全局信息。

glove 词向量为什么能够表现出词的意义?
假设有 3 个词:i,j,k。

  • 如果词 k 与 i 关联较大,与 j 关联较小,那么 P i k P_{ik} Pik 较大, P j k P_{jk} Pjk 较小, P i k P j k \frac{P_{ik}}{P_{jk}} PjkPik 远大于 1;
  • 如果词 k 与 i 关联较小,与 j 关联较大,那么 P i k P_{ik} Pik 较小, P j k P_{jk} Pjk 较大, P i k P j k \frac{P_{ik}}{P_{jk}} PjkPik 远小于 1;
  • 如果词 k 与 i 关联较小,与 j 关联较小,那么 P i k P_{ik} Pik 较小, P j k P_{jk} Pjk 较小, P i k P j k \frac{P_{ik}}{P_{jk}} PjkPik 约等于 1;

这样子是不是就可以某种程度上表现出词的意义来了。
因为是由向量出现的比值来表现词的意义的,那么我们的模型应该由概率比值来呈现。
最初模型为:
F ( w i , w j , w k ) = P i k P j k F(w_i,w_j,w_k) = \frac{P_{ik}}{P_{jk}} F(wi,wj,wk)=PjkPik
(其中 w k w_k wk 为上下文向量)
因为一个好的word vector应当是线性可加减的,因此对于word之间的差异,可以用减法来进行衡量,所以:
F ( w i − w j , w k ) = P i k P j k F(w_i-w_j,w_k) = \frac{P_{ik}}{P_{jk}} F(wiwj,wk)=PjkPik
又等式右边是一个标量,那么,将 F 内部表示成向量乘积的形式是一种很简便的方法:
F ( ( w i − w j ) T w k ) = P i k P j k F((w_i-w_j)^Tw_k) = \frac{P_{ik}}{P_{jk}} F((wiwj)Twk)=PjkPik
又由于词向量与上下文词向量的角色不是固定的,我们应该能够随意地交换它们的角色,也就是说词向量和其上下文词向量的地位应该相等,将它们的位置颠倒 F 也不应该改变。那么公式应该对称。令
F ( ( w i − w j ) T w k ) = F ( w i T w k ) F ( w j T w k ) F((w_i-w_j)^Tw_k) = \frac{F(w_i^Tw_k)}{F(w^T_jw_k)} F((wiwj)Twk)=F(wjTwk)F(wiTwk)
其中, F ( w i T w k ) = P i k F(w_i^Tw_k) = P_{ik} F(wiTwk)=Pik
令 F = exp,那么:
w i T w k = l o g ( P i k ) = l o g ( X i k ) − l o g ( X i ) w_i^Tw_k = log(P_{ik}) = log(X_{ik})-log(X_i) wiTwk=log(Pik)=log(Xik)log(Xi)
l o g ( X i ) log(X_i) log(Xi) 移到左边,因为其为常数,设为 b i b_i bi,为了对称,加上一个常数 b k b_k bk
那么:
w i T w k + b i + b k = l o g ( X i k ) w_i^Tw_k + b_i + b_k = log(X_{ik}) wiTwk+bi+bk=log(Xik)
这个公式具有对称性,满足我们的要求(左边即为 F ( w i T w k ) F(w_i^Tw_k) F(wiTwk)
损失函数为:
J = ∑ f ( x i j ) ( w i T w j + b i + b j − l o g X i j ) 2 J = \sum f(x_{ij})(w_i^Tw_j+b_i+b_j-logX_{ij})^2 J=f(xij)(wiTwj+bi+bjlogXij)2
相对于通常的损失函数多出了一个加权函数 f ( x i j ) f(x_{ij}) f(xij)
该加权函数应该满足下列条件:

  • f(0) = 0.
  • f(x) 应该为非减函数
  • 对于很大的值 x,f(x) 应该相对较小

f ( x = ) { ( x / x m a x ) α    i f ( x < x m a x ) 1    o t h e r w i s e f(x=)\begin{cases} (x/x_max)^\alpha \ \ if (x < x_{max}) \\ 1 \ \ otherwise \end{cases} f(x=){(x/xmax)α  if(x<xmax)1  otherwise
在这里插入图片描述

fasttext

三层:输入层、隐藏层、输出层。
输出层为文本中的单词经过 lookup-table 得到的 embedding,通过线性变换到隐藏层(加权平均),再经过 softmax 输出该文本属于不同类的概率。当然,输出层可以换成层次 softmax (哈夫曼树)来提高计算效率。
一个突出的地方 n-gram。原本的输入是只有文本中单词的 embedding,现在还要加上 所有单词的 n-gram 对应的 embedding。举例来说 dog 和 dogs ,它们的 1-gram,2-gram。。。基本一样,对应的 embedding也基本一样,那么它们的向量叠加的结果也会基本一样,这样子就可以很容易地将他们归为一类了。
fasttext 的优点:

  • 特别快
  • 分类效果很好(因为 n-gram)

参考文献:

  1. https://pengfoo.com/post/machine-learning/2017-04-11
  2. GloVe: Global Vectors for Word Representation
  3. fastText 原理及实践
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值