word2vec构建的过程: https://www.cnblogs.com/Newsteinwell/p/6034747.html
<https://www.cnblogs.com/Newsteinwell/p/6034747.html>

https://blog.csdn.net/zhaoxinfan/article/details/11069485
<https://blog.csdn.net/zhaoxinfan/article/details/11069485>

Word2vec,是用来产生词向量的相关模型。这些模型为浅而双层的神经网络
<https://baike.baidu.com/item/%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/16600562>
,用来训练以重新建构语言学之词文本。网络 <https://baike.baidu.com/item/%E7%BD%91%E7%BB%9C/143243>
以词表现,并且需猜测相邻位置的输入词,在word2vec中词袋模型假设下,词的顺序是不重要的。训练完成之后,word2vec模型可用来映射每个词到一个向量,可用来表示词对词之间的关系,该向量为神经网络之隐藏层。

Word2vec(word to
vector)顾名思义,这是一个将单词转换成向量形式的工具。通过转换,可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度。

Word2vec为计算向量词提供了一种有效的连续词袋(bag-of-words)和skip-gram架构实现。

词向量

word2vec也叫word
embeddings,中文名“词向量”,作用就是将自然语言中的字词转为计算机可以理解的稠密向量。在word2vec出现之前,自然语言处理经常把字词转为离散的单独的符号,也就是
One-Hot Encoder。
杭州 [0,0,0,0,0,0,0,1,0,……,0,0,0,0,0,0,0] 上海
[0,0,0,0,1,0,0,0,0,……,0,0,0,0,0,0,0] 宁波 [0,0,0,1,0,0,0,0,0,……,0,0,0,0,0,0,0] 北京
[0,0,0,0,0,0,0,0,0,……,1,0,0,0,0,0,0]
比如上面的这个例子,在语料库中,杭州、上海、宁波、北京各对应一个向量,向量中只有一个值为1,其余都为0。但是使用One-Hot
Encoder有以下问题。一方面,城市编码是随机的,向量之间相互独立,看不出城市之间可能存在的关联关系
。其次,向量维度的大小取决于语料库中字词的多少。如果将世界所有城市名称对应的向量合为一个矩阵的话,那这个矩阵过于稀疏,并且会造成维度灾难。 
使用Vector Representations可以有效解决这个问题。Word2Vec可以将One-Hot
Encoder转化为低维度的连续值,也就是稠密向量,并且其中意思相近的词将被映射到向量空间中相近的位置。 
如果将embed后的城市向量通过PCA降维后可视化展示出来,那就是这个样子。




我们可以发现,华盛顿和纽约聚集在一起,北京上海聚集在一起,且北京到上海的距离与华盛顿到纽约的距离相近。也就是说模型学习到了城市的地理位置,也学习到了城市地位的关系。

<>模型拆解

word2vec模型其实就是简单化的神经网络。



输入是One-Hot Vector,Hidden Layer没有激活函数,也就是线性的单元。Output Layer维度跟Input
Layer的维度一样,用的是Softmax回归。我们要获取的dense vector其实就是Hidden Layer的输出单元。有的地方定为Input
Layer和Hidden Layer之间的权重,其实说的是一回事。 


<>CBOW与Skip-Gram模式

word2vec主要分为CBOW(Continuous Bag of Words)又叫连续词袋和Skip-Gram两种模式
。CBOW是从原始语句推测目标字词;而Skip-Gram正好相反,是从目标字词推测出原始语句。CBOW对小型数据库比较合适,而Skip-Gram在大型语料
中表现更好。 
对同样一个句子:Hangzhou is a nice city。我们要构造一个语境与目标词汇的映射关系,其实就是input与label的关系。 
这里假设滑窗尺寸为1(滑窗尺寸……这个……不懂自己google吧-_-|||) 
CBOW可以制造的映射关系为:[Hangzhou,a]—>is,[is,nice]—>a,[a,city]—>nice 
Skip-Gram可以制造的映射关系为(is,Hangzhou),(is,a),(a,is), (a,nice),(nice,a),(nice,city)

<>训练优化

额,到这里,你可能会注意到,这个训练过程的参数规模非常巨大。假设语料库中有30000个不同的单词,hidden
layer取128,word2vec两个权值矩阵维度都是[30000,128],在使用SGD对庞大的神经网络进行学习时,将是十分缓慢的。而且,你需要大量的训练数据来调整许多权重,避免过度拟合。数以百万计的重量数十亿倍的训练样本意味着训练这个模型将是一个野兽。 
一般来说,有Hierarchical Softmax、Negative Sampling等方式来解决。

 

 

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信