大白话讲解word2vec到底在做些什么 您所在的位置:网站首页 无人机可以做些什么事情视频讲解 大白话讲解word2vec到底在做些什么

大白话讲解word2vec到底在做些什么

2024-06-18 13:03| 来源: 网络整理| 查看: 265

词向量

word2vec也叫word embeddings,中文名“词向量”,作用就是将自然语言中的字词转为计算机可以理解的稠密向量(Dense Vector)。在word2vec出现之前,自然语言处理经常把字词转为离散的单独的符号,也就是One-Hot Encoder。

比如上面的这个例子,在语料库中,杭州、上海、宁波、北京各对应一个向量,向量中只有一个值为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等方式来解决。

基于word2vec的文档语义分析

处理金庸小说文档

主要分析使用word2vec进行文档(此处指由字符串表示的文档)的与语义分析。使用gensim包的word2vec模型对文库进行训练,得到目标模型后,我们可进一步作如下研究:

1)判断任意两个词汇的相似度。此处的相似度指余弦相似度【1,similarity(w1, w2)】。

2)给定一个词汇,找到与之最相似的n个词汇。

3)对词汇进行聚类,例如kMeans聚类,层次聚类等。因为word2vec的目标向量空间是对词汇语义的相对准确描述,因此聚类时可以得到较好的结果。

1.2开发环境

本文所述算法以Python实现。所用到的包如下:

1)scipy:科学计算

2)matplotlib:绘图

3)gensim:语义分析

4)sklearn:机器学习

5)jieba:中文分词

1.3 实验环境

本文对金庸小说进行人物、功夫、帮派的语义上下文分析。事先准备的实验资源为:

1)金庸小说的本文文件

2)人名列表

3)功夫名称列表

4)帮派名称列表

二样本

本章可参考【2】。

2.1 文档

文档(Document)可描述为一个由单词组成的集合。而多个文档则组成文档集合。例如:

["Human machine interface for lab abc computer applications",

"A survey of user opinion of computer system response time",

"The EPS user interface management system",

"System and human system engineering testing of EPS",

"Relation of user perceived response time to error measurement",

"The generation of random binary unordered trees",

"The intersection graph of paths in trees",

"Graph minors IV Widths of trees and well quasi ordering",

"Graph minors A survey"]

每一行是一个文档,而所有的文档组成一个文档集合。这些文档可以作为训练语义模型的样本。

2.2 分词

文档必须分割为单词序列。

对于英文文档,可直接使用split()方法,依据空格进行分割。

对于中文,则必须用词库进行匹配。此处使用的是jieba分词包。如果希望给jieba提供自定义此库,可用以下方法实现:

for wordin words:

jieba.add_word(word)

使用cut方法进行分词:

jieba.cut(line)

分词之后将得到以下对象(此例子是从【2】中参考的,其中英文介词已经被去掉):

[['human', 'interface', 'computer'],

['survey', 'user', 'computer', 'system', 'response', 'time'],

['eps', 'user', 'interface', 'system'],

['system', 'human', 'system', 'eps'],

['user', 'response', 'time'],

['trees'],

['graph', 'trees'],

['graph', 'minors', 'trees'],

['graph', 'minors', 'survey']]

三 word2vec训练3.1 实现

直接调用gensim的相应方法即可:

model = gensim.models.Word2Vec(sentences,

size=100,

window=5,

min_count=5,

workers=4)

该方法的参数如下:

sentences:训练集,即前述2.2中的分词结果列表。

Size:目标向量的长度。如果取100,则生成长度为100的向量。

Window:窗口大小,计算时所用的控制参数。控制当前词汇和预测词汇之间可能的最大距离。Window值越大,所需要枚举的预测词汇越多,计算时间越长。

Min_count:最小出现次数。此处意为出现次数少于5次的词汇将被忽略。

Workers:训练时使用的线程数。

3.2 Word2vec原理

Word2vec是用来重构语义上下文的算法,它将词汇空间映射到一个高维实向量空间中(维度的典型大小是几百)。其发明者为Google的Tomas Mikolov,其原始论文在【3】。根据Mikolov,此系列算法非常注重词汇的上下文和语义,因此有别于传统NLP领域中将词汇看作是原子对象的做法,因而在NLP中取得了突破性的成功,而且被广泛应用。

其现在常用的实现方式是两层神经网络。它的基本思想是词汇的语义相似度,可以由其对应向量的余弦相似度表示。因此在目标空间中,相似的词汇其向量将聚集为一处。因为维度较高,所以向量对空间的填充密集度很小,因此模型的敏感度较高。对Word2vec的数学原理分析可见【4】。

对于Word2vec的形象解释可见【5】。请参见其中举的如下示例。

China:Taiwan::Russia:[Ukraine, Moscow, Moldova, Armenia] //Two large countries and their small, estranged neighbors

house:roof::castle:[dome, bell_tower, spire, crenellations, turrets]

前者China和Taiwan的关系,与Russia和例如Ukraine的关系相似。此处可以看到Word2vec的语义本质:它可以描述两个概念之间的语义关系,而这种语义关系完全是通过文档样本的学习来实现的,它不要求有任何对现实世界的语义建模输入(例如何为国家、国力、接壤等)。一方面在现阶段进行常识建模的计算量非常大以至于不切合实际,另外也说明足够量的样本已经可以暴露出蕴含在其中的深层次语义概念。

四获取相似度4.1 获取两个词汇的相似度

给定两个词汇w1和w2,S=similarity(w1, w2),0



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有