【表示学习02】word2vec具体实现细节

1.参考文献

1.知乎解答
2.word2vec的数学原理

2.具体实现细节

2.1关于模型输入

step1:首先有了文本语料库,你需要对语料库进行预处理,这个处理流程与你的语料库种类以及个人目的有关,比如,如果是英文语料库你可能需要大小写转换检查拼写错误等操作,如果是中文日语语料库你需要增加分词处理(jieba库)。这个过程其他的答案已经梳理过了不再赘述。
step2:得到你想要的processed corpus之后,将他们的one-hot向量作为word2vec的输入,通过word2vec训练低维词向量(word embedding)就ok了。
在这里插入图片描述

我们以上面的CBOW模型来具体细化实现细节:

1.输入层:上下文单词的onehot. {假设单词向量空间dim为V,上下文单词个数为C}
2.所有onehot分别乘以共享的输入权重矩阵W. {VN矩阵,N为自己设定的数,初始化权重矩阵W}
3.所得的向量 {因为是onehot所以为向量} 相加求平均作为隐层向量, size为1
N.
4.乘以输出权重矩阵W’ {NV}
5.得到向量 {1
V} 激活函数处理得到V-dim概率分布 {PS: 因为是onehot嘛,其中的每一维斗代表着一个单词},概率最大的index所指示的单词为预测出的中间词(target word)
6.与true label的onehot做比较,误差越小越好

所以,需要定义loss function(一般为交叉熵代价函数),采用梯度下降算法更新W和W’。训练完毕后,输入层的每个单词与矩阵W相乘得到的向量的就是我们想要的词向量(word embedding),这个矩阵(所有单词的word embedding)也叫做look up table(其实聪明的你已经看出来了,其实这个look up table就是矩阵W自身),也就是说,任何一个单词的onehot乘以这个矩阵都将得到自己的词向量。有了look up table就可以免去训练过程直接查表得到单词的词向量了。

2.2细节问题汇总

1.请问这里W在onehot的情况下,是否理解成没一列就是对应这个单词的embedding,比如第一列v1就是第一个单词的embedding?
A: 你的理解是正确的,one-hot嘛,除了单词所在的index是1其他都是0,乘积之后自然是index所在位置的向量。
2.为什么v1 v2 v4要求平均?
A:相加是为了将这些向量融合在一起,与“根据周围单词推测中心单词”(CBOW的情况)的目的相呼应。至于为什么是相加这种简单的操作,是论文中提出的,我觉得大牛们应该是尝试了其他的很酷很帅的算法比如求log啦,但是最终结果差不多所以才选择了这种很朴素简单的单纯相加的算法。
3.输入层和映射层之间的参数矩阵W,它是整个语料上的矩阵还是只是当前窗口内所有词的矩阵呢?
A:是整个语料上的矩阵,窗口内的word的one-hot向量与W相乘会得到相应的word embedding。这也就说明了我们要求的词向量就是W啊!因为每个词的one-hot乘以W就相当于提取对应列的值。

4.输出权重矩阵W’是怎么来的?也是随机得到吗?
A:输出权重矩阵是随机得到的。
5.因为初始的词向量是随机生成的,那么模型要更新到什么时候才能确定现在的词向量就是比较稳定的而不是某个中间态呢?
A:对于训练终止条件,一般是迭代次数决定的,gensim实现的word2vec整体迭代默认5次,也不一定就是最好的,但是应该也差不了多少。
6.CBOW的具体训练过程?
A:训练是从第一个单词开始的,如果window size是2,第一个单词而言上下文单词的个数就是2;同理直到最后一个单词;W是整个语料库的矩阵,输入层是每个单词的onehot向量,与W相乘会得到相应的属于该单词的向量,更新的时候也只更新相应的部分,
7.但词向量不是模型训练的任务么?怎么变成了输入?好奇怪?
A:词向量一般不是模型训练的任务,而是为完成任务顺带得到的附属品。就像90年代很多男生为了追女生而学吉他,出发点并不是自己热爱艺术,但也顺带提升了艺术气质,甚至留起了飘逸的长发:) 词向量是在训练过程中和模型参数一起被优化的。
网上的很多资料好像并没有在一开始就阐明这个“词向量”到底是怎么来的,也有可能是简短说了一下但是并没有引起我们的注意,导致我们会问“生成的向量到底在哪儿呀”。那么word2vec向量到底在哪儿?其实这些词向量就是神经网络里的参数,生成词向量的过程就是一个参数更新的过程。那么究竟是什么参数呢?就是这个网络的第一层:将one-hot向量转换成低维词向量的这一层(虽然大家都不称之为一层,但在我看来就是一层),因为word2vec的输入是one-hot。one-hot可看成是1N(N是词总数)的矩阵,与这个系数矩阵(NM, M是word2vec词向量维数)相乘之后就可以得到1M的向量,这个向量就是这个词对应的词向量了。那么对于那个NM的矩阵,每一行就对应了每个单词的词向量。接下来就是进入神经网络,然后通过训练不断更新这个矩阵。这个部分在网上的资料里经常被简略的概括,输出层一般是重点解释的对象,所以需要仔细地理清这个思路。有了这个概念之后再去看word2vec网络具体是怎么实现的,就会容易很多。
8.什么,输入也能优化?
A:对。CBOW也好,Skip-gram也好,还是各种各样其他NNLM也好,简单来看,不过是模型任务的区别。通过建模,每个词与其上下文建立了联系;通过训练,参数和输入得到优化。最终,在实现损失函数minimization的同时,得到一份包含semantic properties的词向量。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值