word2vec以及GloVe总结

本文介绍了词向量的概念,包括one-hot编码的不足与word embedding的优势。深入讲解了神经网络语言模型NNLM,然后重点讨论了word2vec的CBOW和skip-gram模型,以及它们的hierarchical softmax和negative sampling实现。此外,还介绍了GloVe模型,它是如何利用统计信息改进词向量表示的,并与word2vec进行了对比。
摘要由CSDN通过智能技术生成

词向量

词向量,顾名思义,就是把一个单词或词语表示成一个向量的形式,这是因为在计算机中无法直接处理自然语言,需要把它转化为机器能够理解的语言,比如数值等。最简单的方式是把一个个单词表示成one-hot的形式。例如有三个句子:

我/喜欢/小狗/喜欢/喝咖啡
我/不喜欢/喝咖啡
你/喜欢/什么/东西

词汇表为:

我、你、喜欢、不喜欢、小狗、喝咖啡、什么、东西

然后对每一个词做one-hot编码:
“我”就是[1,0,0,0,0,0,0,0]
“你”就是[0,1,0,0,0,0,0,0]
等等。
则对于每一个句子的表示为:

喜欢 不喜欢 小狗 喝咖啡 什么 东西
1 0 2 0 1 1 0 0
1 0 0 1 0 1 0 0
0 1 1 0 0 0 1 1

这样对各个词做成了词向量,但这种缺点是稀疏性大,如果词汇集很多则每一个词的维度非常大,会造成维度灾难。不过经近几年的发展,词向量可以表示成密集向量(dense vector),并且可以使用较少的维度表示一个词,其称之为word embedding或Distributed representation。这就是下面将要说的word2vec和GloVe模型。在介绍它们两个之前,先说一说神经网络语言模型(NNLM)。

神经网络语言模型(NNLM)

NNLM由Bengio等人提出,他的主要想法就是:

  1. 把字典里的每一个单词对应一个词特征向量
  2. 把单词序列表示成联合概率函数
  3. 自动学习词特征向量和概率函数的参数
    在NNLM中,每一个单词为向量空间中的一个点,而且特征的数目要比字典的大小要小,它的概率函数表示为在给定前一个词下,后一个词的条件概率的乘积。

模型结构

假设训练集为 w 1 , . . . , w T w_1, ..., w_T w1,...,wT的单词序列,单词 w t ∈ V w_t \in V wtV V V V是大量且有限的词汇集。目标是学习一个模型 f ( w t , . . . , w t − n + 1 ) = P ^ ( w t ∣ w 1 t − 1 ) f(w_t,...,w_{t-n+1})=\hat{P}(w_t|w_1^{t-1}) f(wt,...,wtn+1)=P^(wtw1t1) w 1 t − 1 w_1^{t-1} w1t1为单词从 w 1 到 w t − 1 w_1到w_{t-1} w1wt1。对于任意的 w 1 t − 1 w_1^{t-1} w1t1,模型的唯一约束为 Σ i = 1 ∣ V ∣ f ( i , w t − 1 , . . . , w t − n + 1 ) = 1 , f > 0 \Sigma_{i=1}^{|V|}f(i, w_{t-1},...,w_{t-n+1})=1, f>0 Σi=1Vf(i,wt1,...,wtn+1)=1,f>0
在这个神经网络模型中,它把这个概率函数分为两部分走:

  1. 一个映射 C C C,即可以把 V V V中任意一个词 i i i映射为一个实值向量 C ( i ) ∈ R m C(i)\in R^m C(i)Rm,它表示的就是单词 i i i分布式特征向量(distributed feature vector)。在实践中, C C C被表示成一个 ∣ V ∣ × m |V|\times m V×m的矩阵,即矩阵的每一行 C ( i ) C(i) C(i)代表一个词的词向量。他们也即模型的输入。
  2. 单词的概率函数。通过一个函数 g g g把输入的上下文单词的特征向量 ( C ( w t − n + 1 ) , . . . , C ( w t − 1 ) ) (C(w_{t-n+1}),...,C(w_{t-1})) (C(wtn+1),...,C(wt1))映射为下一个单词 w t w_t wt的条件概率分布函数,当然,这个单词 w t w_t wt在字典 V V V中。 g g g输出的的向量的第 i i i个元素就是第 i i i个单词的条件概率:
    f ( i , w t , . . . , w t − n + 1 ) = g ( i , C ( w t − n + 1 ) , . . . , C ( w t − 1 ) ) f(i,w_t,...,w_{t-n+1})=g(i,C(w_{t-n+1}),...,C(w_{t-1})) f(i,wt,...,wtn+1)=g(i,C(wtn+1),...,C(wt1))
    现在再来看下面这一张图就明白了:
    这里写图片描述

首先是对整个词汇表建立一个索引,每个单词对应一个索引号,其实就是one-hot编码,然后把要抽取单词的这些one-hot编码建立索引矩阵 D D D,维度为 ( n − 1 ) × ∣ V ∣ (n-1)\times |V| (n1)×V,即每一行代表一个单词的one hot representation。而矩阵 C C C每一行为一个单词的词向量,这样 D ⋅ C D\cdot C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值