ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Word2vec词向量

2021-10-03 16:32:58  阅读:215  来源: 互联网

标签:词汇 Word2vec 模型 单词 CBOW 上下文 向量


前文也零散的写了些 关于神经网络模型的篇幅,如NNLM,本文着重讲解有关词向量的内容,从静态词向量到动态词向量等,其实相关的内容,网上也有很多,本人主要是为了做些记录和巩固下基础的知识点

一、词向量概述

前面篇幅中介绍了NNLM 神经网络语言模型的计算原理,NNLM生成的产物初始化的矩阵也可以作为词向量。基于NNLM(神经网络语言模型)预训练方法存在一个问题,主要是通过 t 时刻的单词预测t+1时刻的单词,只能通过历史信息预测未来时刻的信息,损失了 当前单词与"未来"单词之间的 共现信息

本篇介绍新的词向量预训练方法——Word2Vec,其中包括skip-gram模型和CBOW(Continuous Bags of Words)模型,这两种模型是2013年提出,严格上来讲不算是语言模型,因为其是基于词语与词语之间的共现信息实现词向量的学习。不再是基于整句(句子长度为n )中前 n-1个 单词预测第n个单词

1.1 CBOW模型

        输入一句query,CBOW的中心思想是,根据上下文预测目标词汇,例如query为,...  _{Wt-2}_{Wt-1},_{Wt},_{Wt+1},_{Wt+2} ....  CBOW的任务就是根据 _{Wt} 的上下文 _{Ct} = {_{Wt-2}_{Wt-1},_{Wt+1},_{Wt+2} } 来预测 t 时刻的单词 _{Wt}, 由于窗口大小设置为5 所以 _{Wt} 的上下文文本中包含4个单词。 从上文中NNLM的文章得到 NNLM训练词向量的思想是,按照query的顺序进行输入前 n-1 个 word 来预测第 n 个word ,但是

CBOW模型不考虑上下文的顺序,因此CBOW模型也算是一个词袋子模型,后续有人验证 按照顺序输入在某些特定的任务(词性标注、句法分析)等表现更好

 

 (1). 输入层,以大小为5的窗口,在目标词的左边和右边各选择2个词语,作为模型的输入,输入层是由4个维度为词表长度的 |V|的 one-hot表示

(2). 初始化一个矩阵 E,维度为{V,dim}, dim 表示词向量维度,一般(50-300)之间,V表示的是词表的长度。矩阵E类似于tensorflow中的 look_up操作。如下图所示:

 (3).对上下文词向量取平均,就得到了 _{Wt} 的上下文表示_{Vt},使用 _{Wi} 表示单个word对应的列向量:

                                                 _{Vt}=\frac{1}{|_{Ct}|}\sum_{n}^{i}(_{Wi})

 (4).输出层,对目标词汇进行预测,进行多分类预测,分类的类别大小为词汇的size 大小 |V|,损失函数为常见的 交叉熵损失函数

1.2 skip-gram模型

skip-gram 模型和CBOW模型反过来,使用当前词汇预测上下文词汇,使用_{Wt}词汇预测上下文信息, _{Wt-2}_{Wt-1},_{Wt+1},_{Wt+2}  ,上下文中每一个词语当做独立的词汇进行预测,因此skip-gram模型是计算词与词之间的共现关系,P(_{Wt+j}|_{Wt})

具体运算过程如下所示:

 1.原始文本为“The quick brown fox jumps over the laze dog”,设置窗口大小为2;上图中蓝色的word 为目标词汇,右边的 Training Samples为构建的训练样本

2.从上文中发现一个问题,就是很多常见类似于"the" 这种词汇对于其上下文并不能带来很多有用的语义信息,因为几乎很多词汇中都会出现"the"这个单词,对于这种高频的词汇,原论文中使用的是通过抽样来删除该类单词;基本思想是,对于一开始训练的单词,每一个单词都有一定概率被删除,概率和单词出现的频率有关。

3.对于输出层也是类似于 NNLM的方式进行多分类预测,使用交叉熵进行损失迭代

二、负采样

2.1  CBOW和skip-gram模型的问题

我们从上文中的思路得到具体的流程如下:

 从章节一中,我们知道了 skip-gram和CBOW模型的输入层,词向量层,输出层,其中我们知道最终的预测是多分类,分类的类别数量和词汇的size相关,词汇表很大导致,训练过程中的矩阵很大,严重影响训练的效率

2.2  skip-gram模型的负采样训练

针对训练的效率问题,skip-gram 采用 负采样来加速训练,具体例子如下:

 如:当前词汇是 quick,目标词汇是 brow,假设词汇表的大小是10000,在模型的输出层是10000分类,单词brow的score得分最高,其他的9999的分类的score较低。对于这些9999得分低的单词 我们称之为 "negative " word.

负采样的方法提供一种新的任务视角:给定当前词语和其上下文。最大化两者之间的共现概率,问题简化成一种二分类问题,也就是说 quick—> brown 的分类为1, quick—>dong 的分类为0

对于 "negative " word 的选择,一个单词被选作negative sample的概率跟它出现的频次有关,出现频次越高的单词越容易被选作negative words,原来论文中指的是使用"一元分布模型"

标签:词汇,Word2vec,模型,单词,CBOW,上下文,向量
来源: https://blog.csdn.net/lq_fly_pig/article/details/120592209

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有