自然语言处理-词向量模型-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