NLP-word2vector

目录

一、词向量

二、 word2vec的训练

1.核心

2.Skip-gram model

3.目标函数

4.目标函数的优化

5.skip gram另一种目标函数

6.Negative Sampling

7.更新参数

三、词向量评估

1.评估方式


一、词向量

如下图,左边是one-hot编码,右边是词向量。

one-hot是稀疏向量,对于每一个词,在向量中给定一个位置置为1,其他位置全是0

词向量是分布式表示法,可以是自定义维度的向量,并且每一个维度都会有值

NLP-word2vector_第1张图片

one-hot的缺点:

①过于稀疏

②无法表达语义及词之间的相似度

③容量小,如果是8维的,onehot只能表示8个词

④只有局部泛化能力

词向量的优点:

①密集,50维,100维均可,通常不超过300维

②容量大:理论上能表达无数个单词,比如8维向量,仅仅把数字置为0和1,也有2^8这么多。   

③全局泛化能力强

二、 word2vec的训练

1.核心

Intuition:“在一个文章里,离得越近的单词,相似度越大

这个原则,也可以应用在其他领域,比如对于租客要租房子,那么顾客查看的每一个房子,都可以当做一个单词,如果顾客看了10个房子,那么就相当于他说了十个词,这样就可以把房子,通过词向量的方式进行表达,可以有效减少维度,并且减少从语义上面,构造特征的麻烦。(如果不用词向量,可能需要很多维度:房屋面积、类型、地点、卧室容量……并且非数字的还需要转换成one-hot编码,非常稀疏并且麻烦。)

2.Skip-gram model

既然一个文章中,离得近的单词,相似度高,那么我们可以

①通过旁边的2个单词,预测中间的单词,叫做cbow(不常用)

②通过中间的单词,预测两边的单词,叫做skip-gram

比如一句话:We are working on NLP project,我们希望通过on,能预测出左边的are working, 以及右边的NLP project的概率,并且全部计算在一起,把下面的条件概率最大化。

p(are|on) p(working|are) p(NLP|on) p(project|NLP)

3.目标函数

比如我们有三句话:今天 天气 很好 今天 上 NLP 课程 NLP 是 目前 最火 的 方向

取window size=1,则目标函数:

argmaxθ { p(天气|今天)p(今天|天气)p(很好|天气)p(很好|今天)p(上|今天)p(今天|上)p(NLP|上)p(上|NLP)p(课程|NLP).....p(目前|最火)p(的|最火)p(最火|的)p(方向|的)p(的|方向) }

简化的写法如下图所示:

①第一个连乘是对于w,是中心词,第二个连乘是对于c,是上下文,也就是中心词左右两侧,各window size那么多的词。

②对该简化的写法取对数,则连乘变为求和

③对该求和取softmax,其中c'是词库中所有的词,w是中心词

④对取softmax之后的值进行最后的简化就得到我们最终的目标函数

NLP-word2vector_第2张图片

定义的θ,就是我们的词向量,既是u也是v,[u,v]中u是每个单词的词向量,未知,是需要学出来的,大小是|v| * k,其中|v|是词库的长度,k是词向量的维度。

v和u是维度一样的。u是上下文,v是中心词

NLP-word2vector_第3张图片

之所以会把词向量做成u和v这两个来用,是因为在计算中每个单词起到两部分作用,一个是作为中心词,一个是作为上下文。

4.目标函数的优化

根据上面我们计算的目标函数,可以看出来其中有一项是对数中求和,这个的时间复杂度,在词库量非常大的时候,会非常高:

NLP-word2vector_第4张图片

策略:通过negetive sampling 进行采样,然后训练,能很大程度地降低时间复杂度。

5.skip gram另一种目标函数

给定任意组合wi, wj,希望下面的概率越大越好:

NLP-word2vector_第5张图片

这个概率,就是这两个词同时出现在上下文中的概率。如果它们不存在于上下文中,那么,这个概率越小越好。

由此一来,我们的问题变成了二分类:给定两个词,它们属于/不属于上下文。可以通过逻辑回归的方式来转换目标函数:

其中的ui, vj分别是wi和wj的词向量。通过计算它们的内积,得到相似度,然后把sigmoid转换后的结果作为概率。

将所有样本合起来以后,总结起来的目标函数如下:

假如文本是:Today's weather is great

则词库是:[Today's, weather, is, great]

第一个连乘是从正样本中采集的样本的概率乘积,正样本如下:

[(Today's, weather),(weather,Today's), (weather,is), (is, weather), (is, great), (great, is)]

第二个连乘是从负样本中采集的样本的概率乘积,负样本如下:

[(Today's, is),(Today's, great), (weather,great), (is, Today's), (great, weather), (great, Today's)]

6.Negative Sampling

根据上面的目标函数,对于正样本,我们要最大化D=1的概率,对于负样本,最大化D=0的概率。同样的,我们把目标函数进行简化一下,通过sigmoid转换并化简结束后,发现最后有一项求和,时间复杂度大(因为负样本过多)。因此negative sampling进行计算

 NLP-word2vector_第6张图片

 

Negative Sampling是对于每一个正样本,我们在负样本中进行采样,比如采样10个或者5个。

这样的话,对于每一个正样本,我们都有5个或10个负样本,来构成目标函数,这样的计算量能大大减少。

NLP-word2vector_第7张图片

例子如下:

 

7.更新参数

我们可以使用随机梯度下降来更新参数,和其他的模型训练一样,对参数求出梯度,并设定学习率进行更新即可。

 

三、词向量评估

1.评估方式

①通过TSNE降维到二维,并可视化

②选择训练好的词,计算两两之间的相似度

③通过类比的方式:

NLP-word2vector_第8张图片

你可能感兴趣的:(NLP,自然语言处理,人工智能,nlp,word2vec)