NLP基础之词向量(Word2Vector)


0. 前言

与图像或相比,语言是一种经过人类智力处理后的、更为抽象的数据对象,因此nlp相比cv相比有许多独特之处,研究起来也比较复杂,其中词的表征方式就是一个重要方面。

1. one-hot向量

词(Word)最简单粗暴的一种表征方式(representation)就是one-hot vector。记 V V V为词库, ∣ V ∣ |V| V为词库大小,则每个词可以表征为一个 R ∣ V ∣ × 1 R^{|V|\times 1} RV×1的向量,其中第 k k k维为1,其他维为0 , k k k是该词在词库中的位置。这种方式的缺点在于:

  • 维数可能会很大,词向量会很稀疏
  • 无法衡量词与词之间的相似性(任何两个词之间的内积或者余弦相似度都为0)
    因此,我们自然而然地想能否将词向量的空间 R ∣ V ∣ R|V| RV降维成一个子空间,并且这个子空间可以表征出词与词之间的关系。

2. SVD(奇异值分解)

先遍历一个大的文档集,统计每两个词是否配对出现。例如,设文档集里面的句子为如下:

  1. I enjoy flying.
  2. I like NLP.
  3. I like deep learning.

则可以都得到这样的共现矩阵(Co-occurrence Matrix):
在这里插入图片描述

X X X进行SVD分解:
X = U Σ V T (2,1) X=U\Sigma V^T\\ \tag{2,1} X=UΣVT(2,1)
假设选取前 k k k个奇异值对应主要成分,则应该选择 U 1 : ∣ V ∣ , 1 : k U_{1:|V|,1:k} U1:V,1:k作为降维后的词嵌入矩阵,这样就得到了词库中每个词的 k k k维表征。
这种方法的缺点是:

  • 随着新词的引入,共现矩阵的大小会经常变化
  • 共现矩阵很高维,而且很稀疏
  • SVD分解需要很大的时间开销(约 O ( n 3 ) O(n^3) O(n3)
  • SVD的可解释性较差

3. Word2Vec

前面提到的方法需要存储和计算整个语料库的所有信息,而Word2Vec通过上下文来预测词的概率,用迭代学习参数的方法,可以降低复杂度。

Word2Vecd相比one-hot向量的词表示方法,优点在于:

  1. 降低了向量的维度
  2. 能够表示词与词之间的关系

为了得到词向量,通常需要用一定的学习算法在大量语料上进行监督学习。随着时代的发展,算法的复杂性越来越小,尤其是在数据集越来越大的趋势下。事实上,我们的目的并不是为了让监督学习有多好的表现,而是为了更好地学习到词嵌入。

它包含两种算法:continuous baf-of-words(CBOW)和skip-gram,两种训练方法:负采样和层级softmax。

3.0. 语言模型——n-gram

P ( ω 1 , ω 2 , ⋯   , ω n ) P(\omega_1, \omega_2, \cdots, \omega_n) P(ω1,ω2,,ωn)表示一个具有n个词的序列(句子)的概率。Unigram模型假设每个词之间都是相互独立的,也即
P ( ω 1 , ω 2 , ⋯   , ω n ) = ∏ i = 1 n P ( ω i ) (3-1) P(\omega_1, \omega_2, \cdots, \omega_n)=\prod_{i=1}^nP(\omega_i)\\ \tag{3-1} P(ω1,ω2,,ωn)=i=1nP(ωi)(3-1)
Bigram模型假设每个词只与它前面的词有关:
P ( ω 1 , ω 2 , ⋯   , ω n ) = ∏ i = 1 n P ( ω i ∣ ω i − 1 ) (3-2) P(\omega_1, \omega_2, \cdots, \omega_n)=\prod_{i=1}^nP(\omega_i|\omega_{i-1})\\ \tag{3-2} P(ω1,ω2,,ωn)=i=1nP(ωiωi1)(3-2)
类似地可以得到n-gram的表达式。CBOW和Skip-gram方法的理论基础与n-gram的假设类似,即给定句子内某些词的条件下,去预测另一些词,通过学习出词向量参数,使得最大化一个句子的概率。
简而言之,CBOW的目的是通过上下文来预测中心词,而Skip-gram是通过中心词来预测上下文的分布。它们的作用都是将one-hot表示的词“嵌入”到一个低维空间中,这个方法也叫“词嵌入”(Word Embedding)

3.1. Skip-Gram Model

基本思想是,对于每个句子(记长度为 T T T),给定一个大小为 2 m 2m 2m的窗口,利用窗口中心词去预测窗口内其他的词(语境词),目标是最大化所有预测的语境词的概率。似然函数为:
L ( θ ) = ∏ t = 1 T ∏ − m ≤ j ≤ m , j ≠ 0 P ( w t + j ∣ w t ; θ ) (3-3) L(\theta)=\prod \limits_{t=1}^{T}\prod \limits_{-m\leq j\leq m, j\neq 0}P(w_{t+j}|w_t;\theta)\tag{3-3} L(θ)=t=1Tmjm,j=0P(wt+jwt;θ)(3-3)
其中 θ \theta θ是待求参数,在这里就是每个词的词向量
对上述似然函数取对数并取负号,再处于句子长度,得到代价函数:
J ( θ ) = − 1 T ∑ t = 1 T ∑ − m ≤ j ≤ m , j ≠ 0 l o g   P ( w t + j ∣ w t ; θ ) (3-4) J(\theta)=-\frac{1}{T}\sum \limits_{t=1}^{T}\sum \limits_{-m\leq j\leq m, j\neq 0}log\ P(w_{t+j}|w_t;\theta)\tag{3-4} J(θ)=T1t=1Tmjm,j=0log P(wt+jwt;θ)(3-4)
有了上述代价函数的定义,接下来的关键就是如何计算条件概率。一种符合直觉的假设是,中心词与语境词的相似度应该相对非语境词的相似度更高。因此,可以用经过softmax归一化过后的相似度来近似条件概率,也即:
P ( w o ∣ w c ) = e x p ( v o T v c ) ∑ w ∈ V e x p ( v w T v c ) (3-5) P(w_o|w_c)=\frac{exp(v_o^Tv_c)}{\sum_{w\in V}exp(v_w^Tv_c)}\tag{3-5} P(wowc)=wVexp(vwTvc)exp(voTvc)(3-5)
其中 w o , w c w_o,w_c wo,wc分别代表语境词和中心词, v o , v c v_o,v_c vo,vc分别代表它们对应的词向量。
上式有一个问题是,在后续反向传播过程中求导时,会比较复杂,因为有可能在一个句子里面,某个词既在语境词里面出现也在中心词里面出现,这样求导之后就会保留一个变量,会比较复杂。因此,为了简化计算,每个词具有两个词向量(理论上这种方法精度没前者高,但是计算简单。有时候会把求得的两个词向量取平均作为最终的词向量):一个是作为中心词的词向量,另一个是作为语境词的词向量。对应的条件概率表达式为:
P ( u o ∣ w c ) = e x p ( u o T v c ) ∑ w ∈ V e x p ( u w T v c ) (3-6) P(u_o|w_c)=\frac{exp(u_o^Tv_c)}{\sum_{w\in V}exp(u_w^Tv_c)}\tag{3-6} P(uowc)=wVexp(uwTvc)exp(uoTvc)(3-6)
对上述概率的对数求偏导(用于后续反向传播):
∂ l o g ( P ( u o ∣ w c ) ) ∂ v c = u o − ∑ x = 1 V e x p ( u x T v c ) u x ∑ w = 1 V e x p ( u w T v c ) = u o − ∑ x = 1 V e x p ( u x T v c ) u x ∑ w = 1 V e x p ( u w T v c ) = u o − ∑ x = 1 V P ( x ∣ c ) u x (3-7) \begin{aligned} \frac{\partial{log(P(u_o|w_c))}}{\partial{v_c}}&=u_o-\frac{\sum_{x=1}^V exp(u_x^Tv_c)u_x}{\sum_{w=1}^V exp(u_w^Tv_c)}\\ &=u_o-\sum_{x=1}^V\frac{exp(u_x^Tv_c)u_x}{\sum_{w=1}^V exp(u_w^Tv_c)}\\ &=u_o-\sum_{x=1}^V P(x|c)u_x\\ \tag{3-7} \end{aligned} vclog(P(uowc))=uow=1Vexp(uwTvc)x=1Vexp(uxTvc)ux=uox=1Vw=1Vexp(uwTvc)exp(uxTvc)ux=uox=1VP(xc)ux(3-7)
注意到上式其实就是观测值减去期望值,符合求导的物理意义。
下图是skip-gram的模型结构(窗口大小为C):
在这里插入图片描述

注意到, ( 3 − 4 ) (3-4) (34)是没有区分一个窗口内部的词的顺序的,因此word2vec模型很难学习到语序信息。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值