Press "Enter" to skip to content

自然语言处理-词向量模型

自然语言处理-词向量模型-Word2Vec

 

建立机器学习模型,不能把文本数据直接输入到算法中,因为计算机只针对数值做计算,无论什幺类型的数据都要先转换成数值。一句话包含很多个词,需要分别进行处理。把词转换成向量之后,就可以用不同的方法来计算相似度。

 

怎幺把词转换成向量?

 

词语顺序

 

比如”自然语言处理”这句话,可以拆分成自然、语言、处理三个词,先有自然,再有语言,再有处理,按照说话的先后关系有这样一个顺序。统计一个词在一句话中出现的次数即词频,词频一样,出现的位置不同,一句话的含义也不同:比如自然语言处理和处理语言自然,所以需要让计算机认识到词语之间的顺序,才能更好的认识文本。

 

相近词

 

有些词比较相近,出现的位置相同,在向量层面的表达应当是一致的,比如自然语言处理和NLP是同一个意思。

 

是否有算法能将这两个问题都考虑进去呢?

 

用一个二维的空间去表示一些词,用2维的坐标(x1,x2)表示一个词。

 

 

A是篮球,B是足球,都是球类,在词向量空间应该在相近的位置。C表示自然语言处理,一看和A和B没有关系。

 

但用2维特征去描述一个词,是不合适的,一般用50-300维的空间去描述一个词。就像不能从身高和体重2个特征去描述一个人是不够的,而应该从各个维度才能了解一个人。

 

有了向量之后,就可以计算2个向量的相似度了,比如使用欧式距离和余弦距离。

 

 

用余弦距离来计算Jay这个人和其他每个人的相似度。用相似度度量的方法,来判断,哪些词之间相近或相反。但前提是先把所有词向量构建好。

 

通常,数据的维度越高,能提供的信息也就越多,从而计算结果的可靠性就更值得信赖。

 

 

假设每一个词都用50维(50个特征)的数据来描述。

 

 

在热度图中显示结果,不同的颜色表示不同数值大小。

 

 

man、boy、water三个词向量的热度图

 

 

从结果中可以发现,man和boy在很多颜色都是相同的,说明这两个词很相近。

 

相似的词在特征表达中比较相似,也就说明词的特征是有实际意义的!

 

在词向量模型中输入和输出分别是什幺?

 

 

用神经网络去训练模型,神经网络相当于一个黑盒子,通过前向传播和反向传播去更新权重参数,让训练的模型能学习到行为模式得到你想得到的结果。一个词应当用什幺样的向量去表达最合适,给一个词让神经网络告诉这个词对应的向量应当是什幺。

 

希望神经网络能学习到什幺?学习到前后说话的一个关系。比如“在词向量模型”这句话,输入“在”和“词向量”两个词,神经网络能知道下个词是“模型”。让神经网络能学习到:我想说什幺,想得到一个什幺样的结果。

 

 

输入A和B,经过神经网络训练,得到结果C。最后经过softmax层,做一个多分类任务,看一下最后这个词C在词表中的哪个词相似度最高。

 

 

embeddings

这个是一个词库的大表,上图中每个词用一个4维向量表示(其实不限制维数),输入一个词Thou,在词库大表或语料库大表当中,找到这个词对应的词向量。语料库大表一开始随机进行初始化,比如词库大表中有1000个词,每个词随机初始化一个向量。神经网络通过前向传播计算损失值,反向传播更新权重参数,在词向量模型中,神经网络不仅仅做这些事情,还会更新输入中每个词对应的向量。当前这个词,词向量怎幺表达,计算机能把它的下一个词猜的更准确一些。

 

构建训练数据

 

自然语言的训练数据不仅仅局限于手里的内容,一切可利用的文本,只要是正常逻辑都可以当作训练数据。

 

中文需要先进行分词操作,再来构建数据集,而英文是分好词的。

 

 

输入A、B输出C

 

滑动窗口

 

 

第一次,输入Thou、shalt,输出not,第二次,输入shalt和not,输出make,第三次…..

 

当前任务的数据集并不是有监督的,数据当中你得告诉我标签是什幺,才能去做训练。这些数据集构建起来反而更容易,因为只要有顺序、逻辑的数据都都可以做数据集。

 

通过滑动窗口把每一对数据拿过来之后,所有的训练数据就都准备好了。

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注