最近学习nlp,从CS224n视频课2019winter的课程入手,听完了前几个lecture,以及做完斯坦福课程官网上对应的编程作业之后对词向量的算法有了大致的了解。

但网上对于词向量算法好多都是一两句话介绍原理就完事,我自己对这些算法进行推导和理解了下,所以这个博客主要是对算法进行理解和推导,这样就更透彻一些。

目录

  • 词向量
  • Skip-Gram模型
  • Continuous Bag of Words模型(CBOW)
  • GloVe模型

词向量

以前我们在初高中做英语阅读理解的时候,对于不认识的单词,英语老师会告诉我们,可以通过它所在的上下文进行猜测,有的时候这种方法可以帮助我们在不认识这个单词的情况下也能很好的理解这句话的含义。在自然语言处理中,最基础的就是词语,机器理解词语不像人类那么直观,我们希望对于每个词语都有一个一定维度的向量可以表示,然后机器就可以凭借这个向量来获取这个词语所表达的意思,并且学到词语之间相互的关系用来组词和组句。

很naive的做法就是将所有词汇设计成一个巨大的表,然后每个词语的向量映射成一个独热向量,即词语所在位置是1,其余是0。但是这样做的话所有向量都是正交的,没办法表示两个词语之间的关系,而且词语的维数就是词汇表的长度,太高了!此外,可以人工的设计少点的一些特征,例如feature1表示动词、feature2表示形容词、……、feature100表示是否是动物等等,这样获得了一些不是好多0的向量,并且把维数降下来了,相当于将高维的sparse向量给嵌入到低维的空间中得到一个dense的向量,因此词向量也称为词嵌入。虽然理论上这样做是可以解决上述两个难题的,但人工设计特征也太为难了,而且设计的不好那效果也很差。因此,Word2Vec和GloVe这两种词向量模型就是利用算法来自动生成低维空间中的词向量的。

这些词向量模型其实可以整体地表示为F(V)F(V)F(V)的形式,其中VVV就是词向量矩阵,模型的参数就是词向量,模型的目的就是学习到这些词向量/参数,所以通过定义不同的代价函数来逐步优化这些参数,最后就可以得到一个比较好的词向量模型啦。

Word2Vec是2013年谷歌的Mikolov大神团队提出来的,基本的想法是根据分布语义(distributional semantics)来提取出词向量,就是根据单词之间出现的位置来获取信息。Word2Vec分为两种Skip-Gram模型和Continuous Bag of Words模型。Skip-Gram模型是根据中心词来预测上下文的概率分布,而CBOW模型则是根据上下文词来预测中心词的概率分布。

Skip-Gram模型

因为Word2Vec是考虑上下文词和中心词的关系来建模的,所以对于一个单词,可以设它有两个向量来表示(最后可以取两个向量的平均作为这个单词的词向量):

  • vvv 表示中心词的词向量
  • uuu 表示上下文词的词向量

若词向量模型设定的维数为nnn,例如n=100n=100n=100,那么vvv和uuu都是一个nnn维的向量。

Skip-Gram模型是根据中心词来预测周围上下文词的概率分布,即P(o∣c)P(o|c)P(o∣c)(其中ccc表示中心词,ooo表示上下文词)

那么如何用词向量来表示这个概率呢?答案是“向量之间的内积”!

因为内积可以衡量两个词向量之间的位置关系,在词向量空间中也就是衡量了两个单词之间的相似度。可问题又来了,向量内积是一个实数,并不是在区间[0,1][0,1][0,1]的呀!这个时候就想到做个归一化吧,softmax函数就登场了。因为中心词和单词表VVV中每一个单词都可以做一次内积,都表示了中心词和任意一个词的相似度,将单词之间的内积经由softmax函数之后不就可以解释成概率了吗。所以基于中心词ccc得到上下文词ooo的概率为:
P(o∣c)=exp⁡(uoT⋅vc)∑w∈Vexp⁡(uwT⋅vc)P(o|c)={\exp(u_o^T\cdot v_c)\over \sum_{w\in V}\exp(u_w^T\cdot v_c)}P(o∣c)=∑w∈V​exp(uwT​⋅vc​)exp(uoT​⋅vc​)​

有了这个概率表示之后模型的目的是什么呢?答案当然是“最大化出现在中心词附近的那些上下文词的概率

在图中“banking”就是中心词,在窗口大小m=2m=2m=2的情况下,最大化出现在这个窗口内的所有上下文词的概率,即:
max⁡θ∏−m≤j≤m,j≠0P(wt+j∣wt;θ)\max_\theta\prod_{-m\leq j\leq m,\ j\neq0}P(w_{t+j}|w_t;\theta)θmax​−m≤j≤m, j​=0∏​P(wt+j​∣wt​;θ)

这里的θ\thetaθ表示模型的参数,其实就是上面说的词向量vvv和uuu。所以对于位置t=1,2,⋯,Tt=1,2,\cdots,Tt=1,2,⋯,T,似然函数就可以表示为:
L(θ)=∏t=1T∏−m≤j≤m,j≠0P(wt+j∣wt;θ)L(\theta) = \prod_{t=1}^T\prod_{-m\leq j\leq m,\ j\neq0}P(w_{t+j}|w_t;\theta)L(θ)=t=1∏T​−m≤j≤m, j​=0∏​P(wt+j​∣wt​;θ)

最大似然估计对应着就是最小化负对数似然函数所得到的模型参数,所以模型的损失函数可以定义为(平均)负对数似然函数,即:
J(θ)=−1Tlog⁡L(θ)=−1T∑t=1T∑−m≤j≤m,j≠0log⁡P(wt+j∣wt;θ)\begin{aligned}J(\theta) &=-{1\over T}\log L(\theta)\\ &= -{1\over T}\sum_{t=1}^T\sum_{-m\leq j\leq m,\ j\neq0}\log P(w_{t+j}|w_t;\theta)\end{aligned}J(θ)​=−T1​logL(θ)=−T1​t=1∑T​−m≤j≤m, j​=0∑​logP(wt+j​∣wt​;θ)​

至此,只要对这个损失函数进行优化,最小化这个损失函数到一定范围,那就可以获得一个很好的词向量模型了。

那么问题又来了,如何进行优化呢?答案是“梯度下降法”呀!

那就要推导一下损失函数对于参数或者说词向量vvv和uuu的偏导数(梯度)了。

主要看看连加符号里面关于中心词向量的偏导∇vclog⁡P(o∣c)\nabla_{v_c} \log P(o|c)∇vc​​logP(o∣c)
∇vclog⁡P(o∣c)=∂∂vclog⁡exp⁡(uoT⋅vc)∑w∈Vexp⁡(uwT⋅vc)=∂∂vclog⁡(exp⁡(uoT⋅vc))−∂∂vclog⁡∑w∈Vexp⁡(uwT⋅vc)=uo−1∑w∈Vexp⁡(uwT⋅vc)⋅∂∂vc∑x∈Vexp⁡(uxT⋅vc)=uo−1∑w∈Vexp⁡(uwT⋅vc)⋅∑x∈Vexp⁡(uxT⋅vc)⋅ux=uo−∑x∈Vexp⁡(uxT⋅vc)∑w∈Vexp⁡(uwT⋅vc)⋅ux=uo−∑x∈VP(x∣c)⋅ux\begin{aligned} \nabla_{v_c} \log P(o|c) &= {\partial\over \partial{v_c}}\log{\exp(u_o^T\cdot v_c)\over \sum_{w\in V}\exp(u_w^T\cdot v_c)}\\ &={\partial\over \partial{v_c}}\log(\exp(u_o^T\cdot v_c)) - {\partial\over \partial{v_c}}\log \sum_{w\in V}\exp(u_w^T\cdot v_c)\\ &=u_o - {1\over \sum_{w\in V}\exp(u_w^T\cdot v_c)}\cdot{\partial\over \partial{v_c}}\sum_{x\in V}\exp(u_x^T\cdot v_c)\\ &=u_o - {1\over \sum_{w\in V}\exp(u_w^T\cdot v_c)}\cdot\sum_{x\in V}\exp(u_x^T\cdot v_c)\cdot u_x\\ &= u_o - \sum_{x\in V}{\exp(u_x^T\cdot v_c)\over \sum_{w\in V}\exp(u_w^T\cdot v_c)}\cdot u_x\\ &=u_o - \sum_{x\in V}P(x|c)\cdot u_x \end{aligned}∇vc​​logP(o∣c)​=∂vc​∂​log∑w∈V​exp(uwT​⋅vc​)exp(uoT​⋅vc​)​=∂vc​∂​log(exp(uoT​⋅vc​))−∂vc​∂​logw∈V∑​exp(uwT​⋅vc​)=uo​−∑w∈V​exp(uwT​⋅vc​)1​⋅∂vc​∂​x∈V∑​exp(uxT​⋅vc​)=uo​−∑w∈V​exp(uwT​⋅vc​)1​⋅x∈V∑​exp(uxT​⋅vc​)⋅ux​=uo​−x∈V∑​∑w∈V​exp(uwT​⋅vc​)exp(uxT​⋅vc​)​⋅ux​=uo​−x∈V∑​P(x∣c)⋅ux​​

这个结果表示:实际观测到的上下文词ooo的词向量uou_ouo​,减去基于中心词ccc的上下文词的期望。所以在梯度下降更新参数时,若实际的上下文词向量与基于中心词的期望词向量相差较小,那中心词的词向量需要调整的就小

再看看连加符号里面关于上下文词向量的偏导∇uwlog⁡P(o∣c)\nabla_{u_w} \log P(o|c)∇uw​​logP(o∣c)

1、当w=ow=ow=o时,即这个单词是中心词ccc的上下文词时:
∇uolog⁡P(o∣c)=∂∂uolog⁡exp⁡(uoT⋅vc)∑w∈Vexp⁡(uwT⋅vc)=∂∂uolog⁡(exp⁡(uoT⋅vc))−∂∂uolog⁡∑w∈Vexp⁡(uwT⋅vc)=vc−1∑w∈Vexp⁡(uwT⋅vc)⋅∂∂uo∑w∈Vexp⁡(uwT⋅vc)=vc−1∑w∈Vexp⁡(uwT⋅vc)⋅exp⁡(uoT⋅vc)⋅vc=vc−exp⁡(uoT⋅vc)∑w∈Vexp⁡(uwT⋅vc)⋅vc=vc⋅(1−P(o∣c))\begin{aligned} \nabla_{u_o} \log P(o|c) &= {\partial\over \partial{u_o}}\log{\exp(u_o^T\cdot v_c)\over \sum_{w\in V}\exp(u_w^T\cdot v_c)}\\ &={\partial\over \partial{u_o}}\log(\exp(u_o^T\cdot v_c)) - {\partial\over \partial{u_o}}\log \sum_{w\in V}\exp(u_w^T\cdot v_c)\\ &=v_c - {1\over \sum_{w\in V}\exp(u_w^T\cdot v_c)}\cdot{\partial\over \partial{u_o}}\sum_{w\in V}\exp(u_w^T\cdot v_c)\\ &=v_c - {1\over \sum_{w\in V}\exp(u_w^T\cdot v_c)}\cdot\exp(u_o^T\cdot v_c)\cdot v_c\\ &= v_c - {\exp(u_o^T\cdot v_c)\over \sum_{w\in V}\exp(u_w^T\cdot v_c)}\cdot v_c\\ &=v_c\cdot(1 - P(o|c)) \end{aligned}∇uo​​logP(o∣c)​=∂uo​∂​log∑w∈V​exp(uwT​⋅vc​)exp(uoT​⋅vc​)​=∂uo​∂​log(exp(uoT​⋅vc​))−∂uo​∂​logw∈V∑​exp(uwT​⋅vc​)=vc​−∑w∈V​exp(uwT​⋅vc​)1​⋅∂uo​∂​w∈V∑​exp(uwT​⋅vc​)=vc​−∑w∈V​exp(uwT​⋅vc​)1​⋅exp(uoT​⋅vc​)⋅vc​=vc​−∑w∈V​exp(uwT​⋅vc​)exp(uoT​⋅vc​)​⋅vc​=vc​⋅(1−P(o∣c))​

上式表明:当P(o∣c)→1P(o|c)\to 1P(o∣c)→1时,即通过中心词ccc可以很好的预测上下文词ooo,那此时这个偏导就几乎为0,也就是在梯度下降中,uou_ouo​参数几乎不需要调整

2、当w≠ow\neq ow​=o时,即这个单词不是中心词ccc的上下文词时:
∇uwlog⁡P(o∣c)=∂∂uwlog⁡exp⁡(uoT⋅vc)∑w∈Vexp⁡(uwT⋅vc)=∂∂uwlog⁡(exp⁡(uoT⋅vc))−∂∂uwlog⁡∑w∈Vexp⁡(uwT⋅vc)=−1∑w∈Vexp⁡(uwT⋅vc)⋅∂∂uw∑x∈Vexp⁡(uxT⋅vc)=−1∑w∈Vexp⁡(uwT⋅vc)⋅exp⁡(uwT⋅vc)⋅vc=−exp⁡(uwT⋅vc)∑w∈Vexp⁡(uwT⋅vc)⋅vc=−P(w∣c)⋅vc\begin{aligned} \nabla_{u_w} \log P(o|c) &= {\partial\over \partial{u_w}}\log{\exp(u_o^T\cdot v_c)\over \sum_{w\in V}\exp(u_w^T\cdot v_c)}\\ &={\partial\over \partial{u_w}}\log(\exp(u_o^T\cdot v_c)) - {\partial\over \partial{u_w}}\log \sum_{w\in V}\exp(u_w^T\cdot v_c)\\ &=- {1\over \sum_{w\in V}\exp(u_w^T\cdot v_c)}\cdot{\partial\over \partial{u_w}}\sum_{x\in V}\exp(u_x^T\cdot v_c)\\ &=- {1\over \sum_{w\in V}\exp(u_w^T\cdot v_c)}\cdot\exp(u_w^T\cdot v_c)\cdot v_c\\ &= - {\exp(u_w^T\cdot v_c)\over \sum_{w\in V}\exp(u_w^T\cdot v_c)}\cdot v_c\\ &= - P(w|c)\cdot v_c \end{aligned}∇uw​​logP(o∣c)​=∂uw​∂​log∑w∈V​exp(uwT​⋅vc​)exp(uoT​⋅vc​)​=∂uw​∂​log(exp(uoT​⋅vc​))−∂uw​∂​logw∈V∑​exp(uwT​⋅vc​)=−∑w∈V​exp(uwT​⋅vc​)1​⋅∂uw​∂​x∈V∑​exp(uxT​⋅vc​)=−∑w∈V​exp(uwT​⋅vc​)1​⋅exp(uwT​⋅vc​)⋅vc​=−∑w∈V​exp(uwT​⋅vc​)exp(uwT​⋅vc​)​⋅vc​=−P(w∣c)⋅vc​​

这样基本上就解决了Skip-Gram模型的理解与训练的问题。

Continuous Bag of Words模型(CBOW)

类似Skip-Gram模型的方法,不同的是CBOW是根据上下文词来预测中心词的概率分布,依然用

  • vvv 表示中心词的词向量
  • uuu 表示上下文词的词向量

那么固定窗口mmm内的上下文词向量可以表示为:
uc−m,uc−m+1,⋯,uc−1,⋯,uc+1,⋯,uc+m−1,uc+mu_{c-m},\ u_{c-m+1}, \ \cdots, \ u_{c-1}, \ \cdots, \ u_{c+1}, \ \cdots, \ u_{c+m-1},\ u_{c+m}uc−m​, uc−m+1​, ⋯, uc−1​, ⋯, uc+1​, ⋯, uc+m−1​, uc+m​

中心词向量为: vcv_cvc​

首先将上面窗口内的2m2m2m个上下文词的词向量做一个平均,得到平均词向量:
u^=12m(uc−m,uc−m+1,⋯,uc+m−1,uc+m)\hat u = {1\over 2m}(u_{c-m},\ u_{c-m+1}, \ \cdots, \ u_{c+m-1},\ u_{c+m})u^=2m1​(uc−m​, uc−m+1​, ⋯, uc+m−1​, uc+m​)

这样,基于上下文词的平均词向量u^\hat uu^来预测中心词ccc的概率就可以表示为:
P(c∣o)=exp⁡(vcT⋅u^)∑w∈Vexp⁡(vwT⋅u^)P(c|o)={\exp(v_c^T\cdot \hat u)\over \sum_{w\in V}\exp(v_w^T\cdot \hat u)}P(c∣o)=∑w∈V​exp(vwT​⋅u^)exp(vcT​⋅u^)​

类似Skip-Gram,CBOW模型的代价函数也是负对数似然函数:
J(θ)=−1T∑t=1T∑−m≤j≤m,j≠0log⁡P(wt∣wt+j;θ)\begin{aligned}J(\theta) &= -{1\over T}\sum_{t=1}^T\sum_{-m\leq j\leq m,\ j\neq0}\log P(w_{t}|w_{t+j};\theta)\end{aligned}J(θ)​=−T1​t=1∑T​−m≤j≤m, j​=0∑​logP(wt​∣wt+j​;θ)​

模型的训练也类似,先求的损失函数对于参数(uuu和vvv)的梯度,然后不断更新参数来持续最小化损失函数。

GloVe模型

GloVe模型,全称为Global Vectors

这个算法希望加强对统计信息的利用,而且也能很好地概括词语的相关性信息。

  • XijX_{ij}Xij​ 表示单词jjj出现在单词iii的上下文中的次数
  • Xi=∑kXikX_i=\sum_k X_{ik}Xi​=∑k​Xik​ 表示所有出现在单词iii的上下文中的单词次数
  • Pij=P(j∣i)=Xij/XiP_{ij}=P(j|i) = X_{ij}/X_iPij​=P(j∣i)=Xij​/Xi​ 表示单词jjj出现在单词iii上下文中的共现概率
  • XXX 表示共现矩阵,元素由XijX_{ij}Xij​组成

当两个词语相关性比较高时,那么共现概率也比较大,反之则小。经过统计分析,发现用共现概率的比值来考察一对单词在第三个单词的上下文中哪个更常出现是有一定的规律的:

共现概率之比PikPjkP_{ik}\over P_{jk}Pjk​Pik​​ 单词j,kj,kj,k相关 单词j,kj,kj,k不相关
单词i,ki,ki,k相关 ≈1\approx 1≈1 很大
单词i,ki,ki,k不相关 很小 ≈1\approx 1≈1

假设由词向量vi,vj,vkv_i, v_j, v_kvi​,vj​,vk​来计算共现概率之比的函数为f(vi,vj,vk)f(v_i, v_j, v_k)f(vi​,vj​,vk​),则有:
PikPjk=f(vi,vj,vk){P_{ik}\over P_{jk}}=f(v_i, v_j, v_k)Pjk​Pik​​=f(vi​,vj​,vk​)

这个等式左边是从语料中统计获得,右边的函数是由参数决定,也就是由词向量决定。

GloVe算法希望等式左右两边尽可能接近,故损失函数可以定义为:
J=∑i,j,k(PikPjk−f(vi,vj,vk))2J=\sum_{i,j,k}\bigg( {P_{ik}\over P_{jk}}-f(v_i, v_j, v_k)\bigg)^2J=i,j,k∑​(Pjk​Pik​​−f(vi​,vj​,vk​))2

也就是说,我们希望由词向量确定的函数可以很好地表示这种共现概率之比的关系,如果可以做到,那就说明这个词向量涵盖了词语的相关性信息,就是一个很好的词向量了。

那么这个函数具体应该长什么样呢?作者在原论文中对函数的形式进行以下讨论和猜想:

1、由于向量空间是线性的,所以一个自然的假设就是fff是关于vi,vjv_i, v_jvi​,vj​之差的形式:
f(vi−vj,vk)=PikPjkf(v_i-v_j, v_k) = {P_{ik}\over P_{jk}}f(vi​−vj​,vk​)=Pjk​Pik​​

2、观察等式左右两边,左边比值PikPjk{P_{ik}\over P_{jk}}Pjk​Pik​​是一个标量,而右边关于词向量的函数是一个向量,因此fff要消除向量的形式,自然地使用到内积:
f((vi−vj)T⋅vk)=PikPjkf((v_i-v_j)^T\cdot v_k) = {P_{ik}\over P_{jk}}f((vi​−vj​)T⋅vk​)=Pjk​Pik​​

对fff要求满足f((vi−vj)T⋅vk)=f(viT⋅vk)f(vjT⋅vk)f((v_i-v_j)^T\cdot v_k) ={f(v_i^T\cdot v_k)\over f(v_j^T\cdot v_k)}f((vi​−vj​)T⋅vk​)=f(vjT​⋅vk​)f(viT​⋅vk​)​,这个等式的解为fff取exp⁡\expexp,所以有:
exp⁡((vi−vj)T⋅vk)=exp⁡(viTvk)exp⁡(vjTvk)=PikPjk\exp((v_i-v_j)^T\cdot v_k) = {\exp(v_i^Tv_k)\over \exp(v_j^Tv_k)}= {P_{ik}\over P_{jk}}exp((vi​−vj​)T⋅vk​)=exp(vjT​vk​)exp(viT​vk​)​=Pjk​Pik​​

且要求分子分母要对应相等,所以exp⁡(viTvj)=Pij\exp(v_i^Tv_j)=P_{ij}exp(viT​vj​)=Pij​,即
log⁡Pij=viTvj\log P_{ij} = v_i^Tv_jlogPij​=viT​vj​

所以损失函数可以简化地定义为:
J=∑i,j(log⁡Pij−viTvj)2J = \sum_{i,j}\bigg(\log P_{ij} - v_i^Tv_j\bigg)^2J=i,j∑​(logPij​−viT​vj​)2

但注意,log⁡Pij\log P_{ij}logPij​不具有对称性,即log⁡Pij≠log⁡Pji\log P_{ij}\neq \log P_{ji}logPij​​=logPji​,但viTvj=vjTviv_i^Tv_j=v_j^Tv_iviT​vj​=vjT​vi​,所以还需要在对称性上进行改造。

由前面最开始共现概率的定义Pij=P(j∣i)=Xij/XiP_{ij}=P(j|i) = X_{ij}/X_iPij​=P(j∣i)=Xij​/Xi​ 可得:
viTvj=log⁡Pij=log⁡Xij−log⁡Xiv_i^Tv_j=\log P_{ij}=\log X_{ij}-\log X_iviT​vj​=logPij​=logXij​−logXi​

添置一个偏置项bjb_jbj​,并且将log⁡Xi\log X_ilogXi​吸收到偏置项bib_ibi​中,以此来重获对称性,那么上式可以变为:
viTvj+bj+bi=log⁡Xijv_i^Tv_j+ b_j+ b_i=\log X_{ij}viT​vj​+bj​+bi​=logXij​

所以损失函数又可以改为:
J=∑i,j(viTvj+bj+bi−log⁡Xij)2J= \sum_{i,j}\bigg(v_i^Tv_j+ b_j+ b_i-\log X_{ij}\bigg)^2J=i,j∑​(viT​vj​+bj​+bi​−logXij​)2

最后,再基于出现频率越高的单词对应权重应该越大的想法,在这个损失函数中加入权重项fff,变成:
J=∑i,jf(Xij)(viTvj+bj+bi−log⁡Xij)2J= \sum_{i,j}f(X_{ij})\bigg(v_i^Tv_j+ b_j+ b_i-\log X_{ij}\bigg)^2J=i,j∑​f(Xij​)(viT​vj​+bj​+bi​−logXij​)2

这个权重函数由实验确定为:
f(x)={(xxmax)0.75,x<xmax1,x≥xmaxf(x)=\begin{cases} ({x\over x_{max}})^{0.75},\ \ x<x_{max}\\ 1,\ \ x\geq x_{max} \end{cases}f(x)={(xmax​x​)0.75,  x<xmax​1,  x≥xmax​​

由这样的权重函数来限制词频过高时的权重

这样就得到了GloVe的损失函数,利用梯度下降求得负梯度进行词向量的更新就可以训练模型了。

总结起来,其实这三种模型,本质上说来方法都类似,只是出发点不一样导致代价函数不同,理解起来就稍微有点差别。

词向量算法—Word2Vec和GloVe相关推荐

  1. 什么是词向量?word2vec、Glove、FastText分别是什么?

    什么是词向量?word2vec.Glove.FastText分别是什么? 在任何一种基于深度学习的自然语言处理系统中,词嵌入和句子嵌入已成为重要组成部分.它们使用固定长度的稠密向量对词和句子进行编码, ...

  2. 词向量与词向量拼接_动态词向量算法—ELMo

    传统的词向量模型,例如 Word2Vec 和 Glove 学习得到的词向量是固定不变的,即一个单词只有一种词向量,显然不适合用于多义词.而 ELMo 算法使用了深度双向语言模型 (biLM),只训练语 ...

  3. AAAI 2018 论文 | 蚂蚁金服公开最新基于笔画的中文词向量算法

    导读:词向量算法是自然语言处理领域的基础算法,在序列标注.问答系统和机器翻译等诸多任务中都发挥了重要作用.词向量算法最早由谷歌在2013年提出的word2vec,在接下来的几年里,该算法也经历不断的改 ...

  4. PaperWeekly 第53期 | 更别致的词向量模型:Simpler GloVe - Part 2

    作者丨苏剑林 学校丨中山大学硕士生 研究方向丨NLP,神经网络 个人主页丨kexue.fm 前言 本文作者在更别致的词向量模型:Simpler GloVe - Part 1一文中提出了一个新的类似 G ...

  5. 词向量算法—【AAAI2018】蚂蚁金服公开的基于笔画的中文词向量算法

    词向量算法是自然语言处理领域的基础算法,在序列标注.问答系统和机器翻译等诸多任务中都发挥了重要作用.词向量算法最早由谷歌在2013年提出的word2vec,在接下来的几年里.该算法也经历了不断的改进, ...

  6. nlp-tutorial代码注释1-2,词向量、Word2Vec、Skip-gram简述

    系列语:本系列是nlp-tutorial代码注释系列,github上原项目地址为:nlp-tutorial,本系列每一篇文章的大纲是相关知识点介绍 + 详细代码注释. one-hot 传统的自然语言处 ...

  7. 【笔记】蚂蚁金服公开基于笔画的中文词向量算法

    案例来源:@安和林 案例地址: https://yq.aliyun.com/articles/376139 (以下为案例的简要概述,便于之后能快速检索到相关内容.部分文字与图片可能直接来自原文,如有侵 ...

  8. 毕业设计 - NLP:词向量Skip-gram word2vec

    文章目录 简介 0 前言 1 项目介绍 2 数据集介绍 3 项目实现 3.1 数据预处理 3.2 配置网络 3.3 网络训练 3.4 模型评估 4 最后-毕设帮助 简介 今天学长向大家介绍NLP基础 ...

  9. 词向量模型Word2Vec

    文章目录 1.词向量模型通俗解释 1.1Word2Vec 1.2如何训练词向量 1.3构建训练数据 2.CBOW与Skip-gram模型对比 2.1CBOW模型 2.2Skip-gram模型 2.2. ...

最新文章

  1. SOPC第一课 建立QSYS系统
  2. SAP:2019年会有多么不一样?
  3. Ubuntu 12.04 安装g++ arm交叉编译环境
  4. 现代制造工程笔记05-表面工程技术
  5. 自定义表单-列表字段的数据源绑定
  6. 用脆弱性评估流程击败黑客
  7. HTML实现个人简历
  8. macOS Python安装教程
  9. 噪声dba是什么单位_请问:dBA是什么意思?和dB,dBm之类有什么关系?主要用... - 射频微波研发讨论区 - 52RD研发论坛...
  10. vector用erase删除元素时,为什么被删元素的析构函数会被调用更多次?
  11. RISC-V架构能否引领物联网时代?
  12. 微信小程序ssm电影院购票+后台管理系统|前后分离VUE
  13. 电脑售后服务人员无奈的一天-爆笑
  14. Unity 百度智能对话API
  15. 汉语拼音的5个声调该怎么学?
  16. 算法速成记录贴Day3
  17. JS添加iframe标签
  18. SpringBoot的优点
  19. .Net读取post传递参数(body)小计
  20. Codeforces 450 B. Jzzhu and Sequences

热门文章

  1. linux 计算机概论 Linux介绍
  2. 转:关于数据库压缩技术的Survey
  3. 付忠庆的练习小笔记-Codeforces #276 Div2 C
  4. 数据结构图之一(基本概念,存储结构,两种遍历)
  5. asp.NET去掉form的runat=server照样使用服务器控件,包括表单的服务器控件
  6. Mybatis 开发 dao 的方法
  7. [Data Structure Algorithm] 哈希表
  8. grafana-----Time Range Controls
  9. mysqlinsert触发器的创建
  10. 将字符串使用md5加密