历史
欢迎关注微信公众号:
词向量大致经过3个时期:
- 最早在做检索系统,或者推荐系统时候,需要计算query和文档,或者user和文档之间的相关性,涉及到相关性,很直观的利用到了向量的欧式距离活着余弦距离。所以这个时期的向量化主要是基于整体数据的矩阵分解,使用的是整体数据的global信息。
- 词向量的是一个主题回归的过程,相同主题的词的向量彼此就比较接近。
- 分布式语义的表示,使用机器学习的方式,然后选择合适的学习目标,然后词的向量作为变量来学习迭代。
下面是整体大纲:
- Global Matrix Factorization
1.1 Vector Space Model (VSM)
1.2 Latent Semantic Analysis (LSA)
2.3 Latent Dirichlet Allocation (LDA) - Distributed Word Embedding
2.1 A Neural Probabilistic Language Model
2.2 CBOW and SKip-Gram by Tomas Mikolov
2.3 Global Vector by Manning - out of vocab training
Learning to Compute Word Embeddings On the Fly
[Character Embedding] (https://arxiv.org/abs/1601.01343)
1. Global Matrix Factorization
这个阶段的向量空间大致是基于词和文档组成的矩阵,然后根据某种规则来降维,达到学习词和文档的向量化表示。因为类似处理矩阵的信息,所以用到了全局的信息,是一个Global算法。 这样的算法的优势是利用了全局的统计信息,对于文档的表示具有优势。 但是对于单个词来说,还是比较缺乏个性化的训练,对词的语义表示来说是比较匮乏的。 在维度上和计算量方面都是一个挑战,在大预料库上面训练基本是不太可能的。1.1 Vector Space Model-高纬向量空间
这个阶段向量是用来表示文本段的,比如一个query,一个文档,还没有具体落到一个词上面
最初使用向量空间模型的是在搜索场景,假设Query 和 Document都可以用一个向量来表示,
那么计算Query和Document的相关性可以直接转化为求解他们向量的距离(如:欧式距离,余弦距离等)
最初的做法是用基于BOW(词袋)的思想,向量的维数是词的个数,每一个维度代表文档中对应词是否出现出现为1否则为0(或者其他的权重变形,如:增加tf-idf信息)
假设:
Q = ( t 1 , w t 1 ; t 2 , w t 2 ; . . . ; t q , w t q ) Q = (t_1,w_{t1};t_2,w_{t2};...;t_q,w_{tq}) Q=(t1,wt1;t2,wt2;...;tq,wtq)
D = ( q 1 , w q 1 ; q 2 , w q 2 ; . . . , q d , w q d ) D = (q_1,w_{q1};q_2,w_{q2};...,q_d,w_{qd}) D=(q1,wq1;q2,wq2;...,qd,wqd)
其中向量的维度为包含的词的个数,这样 Query 和Document的相似性为:
$similarity(Q,D)=Cosin(Q_w,D_w )=\frac{\sum_k w_{tk}w_{qk} }{\sqrt{|w_q|^2 |w_d|^2}} \\ $
然后Query 和 Document 的term的权重计算方式
term的权重都是基于term在全局和Query或者Document里面的统计值进行计算
主要用到的是tf-idf及各种变形来进行
主要方式如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IjkXZZfE-1648569920475)(media/15140793556870/15140939862823.jpg)]
这个阶段向量的计算已经解决了部分相似性和计算量的问题。
但是完全基于词是否出现这样的向量的弊端很明显
比如:
高兴/愉快, ship/boat 在这里是完全不同的词,但是实际上他们的语义是接近的
弊端:
- 在语义表示(Sematic)方面非常弱
- 向量的维度非常高
1.2 Latent Semantic Analysis-低维潜在语义
上面讲的高纬度的向量空间,为了解决
- 向量的维度过高,导致计算复杂度上升;
- 完全基于词频的统计会导致计算损失过多的语义方面的信息。很接近的,但是如果基于词频,就是完全不同的两个id
这个阶段是将高纬向量利用SVD方式进行降维,保留词的语义表示。
基于SVD分解:
假设 term 和 Document组成的矩阵为$ X \in R^{[m,n]} $
其中m为term的个数,n为Document的个数。
根据SVD分解,我们可以知道,X可以分解为一个左正交矩阵 * 对角矩阵 * 右对角矩阵的格式
X = T S D T X = TSD^T X=TSDT
其中 T ∈ R [ m , m ] , D ∈ R [ n , n ] T \in R^{[m,m]}, D \in R^{[n,n]} T∈R[m,m],D∈R[n,n]分别是左右正交矩阵
S ∈ R [ m , n ] S \in R^{[m,n]} S∈R[m,n]是对角矩阵,它的元素是矩阵 X T X X^TX XTX的特征值开方,它的值按对角线递减,其他元素是0的矩阵
注: X = T S D T X = TSD^T X=TSDT,
所以 X T X = ( T S D T ) T T S D T = D S T T T T S D T = D S T S D T X^TX=(TSD^T)^T TSD^T=DS^TT^TTSD^T=DS^TSD^T XTX=(TSDT)TTSDT=DSTTTTSDT=DSTSDT
因为 S T S S^TS STS是对角方阵,它的对角元素是矩阵 X T X X^TX XTX的特征值,所以 S S S的元素是 X T X X^TX XTX特征值的开方。
如果S的元素是从大到小排列的,那么这种分解是唯一的
基于特征值降维/降噪解释
这里我们简单的回顾下特征值和特征向量的作用:
假设一个矩阵A分解后的特征向量是一组正交基 v i v_i vi, 特征值为 λ i \lambda_i λi, 那么 A V = λ V AV=\lambda V AV=λV
这里 A V AV AV表示矩阵A作用在这组正交基下面的正交旋转,正交变换不损失信息,那么 A V AV AV的表示可以转化为对 λ V \lambda V λV的研究上面
V是一组正交基,那么所有这个空间的向量都可以表示为V的线性组合
所以 λ V \lambda V λV表示在正交基上面的张量,该方向上面的权重为对应的特征值。
所以不同的特征值大小代表矩阵在这个方向上面的重要程度,如果绝对值趋于0,那么这个方向上面的信息是不重要,或者可能是噪音。
假设我们要简化线性组合表示,是表示变的简单,且不希望我们的信息损失太多。
这里很直观的是:直接将绝对值排在后面的特征值置为0
应用
S是一个对角矩阵,且它的对角元素是非负递减的,所以如果我们需要保留r维的向量,我们只要舍弃S的第r个元素后面的秩,将这些元素置为0。
这样我们得到矩阵 S R S_R SR,将 S R S_R SR 代入原式我们得到:
X R = T S R D T X_R=TS_RD^T XR=TSRDT
X R X_R XR的每一行都只有R个元素是非0的,其他都为0,这样达到了将为的目的
优势:
- 既得到词的语义向量,又得到Document的向量,所以不仅可以做词的聚类,可以做Document的聚类
- 降维作用明显,又保留重要的信息
- 这是全局的算法,基于的是所有词和所有Document的信息,所以得到的解是全局最优的
- 是一个topic算法:每一个term的表示都是这些特征向量方向上面的线形组合,这些特征向量是彼此没有交集的,所以一个特征方向是一个很好的topic表示
类似:
- 不能解决一词多义的问题
- SVD的计算非常复杂,增量训练困难
- r的选择不是学习的
1.3 Latent Dirichlet Allocation
LDA
上面介绍LSI,它是一个topic算法,
这里的LDA介绍的也是类似的算法,每一个词得到一个k维的向量,每一个向量是在这个topic下面的概率
假设有k个topic,我们得到每一个词的表示是一个k维的向量,里面的每一个元素代表这个词在这个topic下面的概率
方法的目标:
给定topic数k, 计算每个词在这些topic下面的概率,得到词的概率向量
β = > β i j = p ( w j = 1 ∣ z i = 1 ) \beta => \beta_{ij}=p(w^j=1|z^i=1) β=>βij=p(wj=1∣zi=1) 表示在topic z i z^i zi下面出现词 w j w^j wj的概率
求解方式是构造概率模型,然后以概率最大化的方式计算得到 β \beta β
一些不证明的先验知识:
- 给定一个文档Document,它属于哪个topic是服从多项式分布的,但是分布服从的参数$\theta $是不同
- 给定一个topic,在这个topic出现某个词也是服从多项式分布。
- 假设 θ \theta θ的先验分布是Dirichlet分布,那么,先验 Dirichlet分布 + 多项式分布=后验Dirichlet分布,所以这里 θ \theta θ的先验分布选择Dirichlet分布,另外一方面Dirichlet经常被用来作为非均衡自由度下的向量采样(比如Beta分布是它的1个自由度的形式,我们经常使用Beta分布来拟合点击率或者转化率分布,然后将拟合出来的分布作为ctr预估的先验分布,或者作为e && e策略的先验分布)。
最大似然函数
l ( α , β ) = ∑ d = 1 M l o g p ( D d ∣ α , β ) l(\alpha, \beta)=\sum_{d=1}^M log p(D_d|\alpha, \beta) l(α,β)=d=1∑Mlogp(Dd∣α,β)
p ( D d ∣ α , β ) = ∫ p ( θ ∣ α ) ( ∏ n = 1 N ∑ z n p ( z n ∣ θ ) p ( w n ∣ z n , β ) ) d θ p(D_d|\alpha,\beta)=\int p(\theta|\alpha)(\prod_{n=1}^N\sum_{z_n}p(z_n|\theta)p(w_n|z_n,\beta ))d\theta p(Dd∣α,β)=∫p(θ∣α)(n=1∏Nzn∑p(zn∣θ)p(wn∣zn,β))dθ
这里跟着这个式子,通俗的介绍下这个式子的符号代表的意思:
-
α , β \alpha,\beta α,β是需要求的参数,分别代表 θ \theta θ先验Dir分布的
这里先简单的用通俗的表达说下统计知识: -
一个Document在样本中属于哪一个topic服从多项式分布,这个多项式的分布参数我们认为它服从Dirichlet分布(如果二元参数就是一个Beta分布),那么它的后验校正分布也是是一个Dirichlet分布。
-
我们都知道先验分布是独立于单个样本的,只和整体的统计有关系,假定Dirichlet先验分布的参数$\alpha 是 一 个 要 学 习 的 参 数 。 那 么 给 定 文 档 i , 我 们 从 先 验 D i r i c h l e t 概 率 分 布 得 到 是一个要学习的参数。那么给定文档i,我们从先验Dirichlet概率分布得到 是一个要学习的参数。那么给定文档i,我们从先验Dirichlet概率分布得到\theta$, 它是多项式分布的参数。
-
得到的 θ \theta θ,就得到这个文档在各个topic下面的概率 z n z_n zn
-
假设概率矩阵为 β \beta β, β i j = p ( w j = 1 ∣ z i = 1 ) \beta_{ij}=p(w^j=1|z^i=1) βij=p(wj=1∣zi=1),当topic 为i时,每个词出现的概率。
-
给定 z n z_n zn和 β \beta β,我们就可以得到,这样就可以在 p ( w n ∣ z n , β ) p(w_n|z_n,\beta) p(wn