一、词向量简单介绍
1、如何在计算机中获取单词的有用的meaning?
通常的方法是:使用WordNet,包含一系列的同义词集和上下文词集
2、WordNet资源存在的问题
(1)有些词语仅表达了部分意思,还有其他意义未能完全表达出来
(2)无法做到up-to-data,一些单词的意思还不存在
(3)主观的影响
(4)需要人力去创建和维护
(5)对于意义相近的词难以精确
4、用离散符号表示单词
在传统nlp中,我们把单词认为是离散的符号,,可以用一系列one_hot编码的向量表示
motel = [0 0 0 0 0 0 0 0 0 0 1 0 0 0 0]
那么就会有大量与原子符号对应的词汇。但是,当需要表示很多词汇时,one_hot编码所需长度就会越来越长,对应的向量也会越来越长。而这种编码方式没有给出任何词汇之间的内在关系概念。我们经常想到的是一些有相近含义的词汇和短语,可以联系起来或者等同起来,而我们使用one_hot编码,它们就不存在天然的近似关系。
eg:motel = [0 0 0 0 0 0 0 0 0 0 1 0 0 0 0] hotel=[0 0 0 0 0 0 1 0 0 0 0 0 0 0] 它们正交,即内积为0
由于它们是基于符号的,因此无法得出词汇和模型之间的关联,每个词汇都是独立存在。
5、我们试图建立一个直接的方法,一个单词编码表示的含义是可以直接阅读的,在这些表示中就可以直接看出相似性 --> 构造类向量,做类似求点积的操作,这样既可了解词汇之间的相似性
分布相似性:You can get a lot of value by representing a word by means of its neighoors.
利用一个单词的上下文去表征它的意思。表示某个词汇含义的值,只需通过观察其出现的上下文,并对这些上下文做一些处理即可得到。考虑词汇意义的正确方法是从文本中理解它们的使用,所以从本质上来说,如果你可以预测这个单词出现的上下文,也就能理解这个单词的含义了。
eg:如果想知道banking的意思,我们需要找到数千个包含banking的例句,然后观察每一次他出现的场合,统计所有出现过的内容,通过某种方式用这些上下文中的词表示banking的含义。
6、representing words by their context
定义一个模型,旨在通过中心词汇 和 Context words来预测单词向量
P(context|) = ..
损失函数:
J = 1 - (|)
这里的-t表示围绕在中心词t周围的其他单词
目标:调整词汇表示,是损失最小化
7、Main idea of word2vec
(1)两个用于生成词汇向量的算法
A.skip-gram(SG):Predict context words given target
B.continuous bag of words(CBOW):predict target word from bag-of-words context.
(2)两套效率中等的训练方法
A.Hierarchical Softmax
B.Negative Sampling
二、skip-gram算法介绍
1、步骤
(1)每次都选取一个词做为中心词
(2)尝试去预测它一定范围内的上下文词汇
(3)模型将定义一个概率分布,即给定一个中心词汇,预测某个单词的上下文出现的概率
(4)定义半径m,然后从中心词汇开始,到距离为m的位置(包括左边和右边)
(5)损失函数
注:负的对数似然准则意味着我们使用的是交叉熵损失函数
(6)predict surrounding words in a widow of radius m of every word
取两个向量的点积->转化为softmax形式->
O:表示输出单词的下标,单词在词汇表空间中的索引
C:中心词的index
:center vector 索引为c的单词所对应的向量
(7)demo
2、训练模型
(1)将模型中所有的参数都放进一个大的向量中,然后通过改变这些参数进行优化,让模型的目标方程最大化
思路:调整参数,也就是这些向量,以便让负的对数似然项最小化,从而使预测的概率最大化。=> gradient 梯度
(2)对p(o|c)取对数,我们想要调整
使这一目标方程J最小化
(3)求中心词汇的偏导数(推导过程)
(4)补充提问:
问:为什么不用一个矩阵来中和两个向量来表示上下文的内容呢?
答:因为对于中心词汇和上下文词汇,我们有不同的表示,并不意味着同一个词汇会最有可能出现,因为它们有两种不同的表示方式,但在实际中它们确实有很多相似性。尽管你不太可能在上下文中得到相同的词汇,但是很可能得到意义非诚近似的词汇,并且它们之间关联性很强,当这些词汇成为中心词汇的时候,你得出的上下文很可能就是你的第一词汇,实际上你的得到的结果是同一个词出现在双方。
3、Cost Function
We will optimize(maximize or minimize) our cost/loss functions
For now:minimize -> gradient descent
4、梯度下降算法
在整个训练数据集上最小化损失函数,需要对每一个窗口采用梯度下降算法
更新:
注意:alpha必须足够下,让你可以平缓的朝着最小值方向前进,那么这个方法才最有效
5、改进:随机梯度下降算法
--------------------------------------------------------------------------------------------------------
后面又找到一篇总结的较详细的文章:https://blog.csdn.net/a096030098/article/details/81227051
---------------------------------------------------------------------------------------------------------
一文详解 Word2vec 之 Skip-Gram 模型(结构篇)
https://www.leiphone.com/news/201706/PamWKpfRFEI42McI.html
一文详解 Word2vec 之 Skip-Gram 模型(训练篇)
https://www.leiphone.com/news/201706/eV8j3Nu8SMqGBnQB.html