一.词嵌入介绍
1.词汇表征
在之前,我们是根据单词在词汇表中的位置来表示单词的(one-hot),而这个方法有一个缺点。
在做如上图所示的迁移学习时,模型没法根据上一句的orange juice而判断得到下面一句apple的后面大概率也是juice。有一种方法能比较好的解决这个问题,那就是特征化的表示方法。
如上图所示,假设每个单词有300维,每一维代表的都是一个特征,里面的值就代表这个特征和这个单词的关系,以Gender举例,假设Man的性别为-1,那么我们自然可以知道Woman的为1,而King和Man性别都为男,所以他们的值比较接近,同理,Queen也是。由此,一个单词就可以由很多维的特征值来表示。通过这种表示方法,我们就能判断出Apple和Orange比较接近,从而能让模型推理出apple后面是juice。
上面我们讨论的每个单词都是300维的,我们将之嵌入到一个二维空间中去,方便我们观察,这就是词嵌入。常用的可视化算法有t-SNE。
2.如何用词嵌入做迁移学习
- 从大量的文本集中学习词嵌入/下载预训练好的词嵌入模型
- 通过词嵌入迁移到新的只有少量标注训练集的任务
- (可选)选择要不要继续微调数据的词嵌入
一般在A的数据量比较大,B的数据量比较小时,我们才会做迁移学习。
人脸识别与文本迁移学习的差别:
- 在人脸识别中,任给一张图片,NN都会计算出一个相应的编码,即使是陌生的图片。而文本中是有一个固定的词汇表,固定的编码,对于不认识的文本,用unk表示
3.词嵌入的特性
- 词嵌入可以用来做类比推理
如上图所示,woman对应于man,现在要找到一个词对应于king,方法就是去遍历寻找,找到一个单词 ew e w 使得 eman−ewoman≈eking−ew e m a n − e w o m a n ≈ e k i n g − e w ,也就是使得 sim(ew,eking−eman+ewoman) s i m ( e w , e k i n g − e m a n + e w o m a n ) 这个相似度最大化。不过一般这种的准确率不高,大概只有30%~75%。
其中一种计算相似度的方法是余弦相似度:
sim(u,v)=uTv∥u∥2∥v∥2 s i m ( u , v ) = u T v ‖ u ‖ 2 ‖ v ‖ 2
还可以用平方距离/欧氏距离来测量相异度,它和相似度的主要区别是对u和v之间距离的标准化的方式不同。
4.嵌入矩阵
我们需要学习一个嵌入矩阵E,通过E与单词的one-hot向量相乘,我们就可以得到这个单词的嵌入向量
ej
e
j
。
- 学习一个嵌入矩阵E,我们通过随机初始化矩阵E,使用梯度下降法,学习矩阵中的各个参数,从而可以得到嵌入向量 ej e j
- -
二.学习词嵌入:Word2Vec&Glove
1.Word2Vec
Skip-gram
Skip-gram就是通过一个目标词去预测四周最有可能出现的词。即抽取上下文和目标词进行配对,构造一个监督学习问题。举例来说,如上图所示,选定目标词为orange,skip_window=2代表从目标词左右各抽取2个词,num_skips=3代表从刚才抽取的词中选3个作为输出词。我们选择了juice,glass,my。
构建一个神经网络,训练数据就是如(orange,juice),(orange,glass),(orange,my)这样的一对词,假设词汇量为10000,最终的模型输出就是一个概率分布(维度为10000),即orange周围的词为a,为the……的概率,我们希望让juice、glass、my的概率尽可能的最大。计算概率的公式如下图所示的 P(t|c) P ( t | c ) 。在模型收敛后,我们就可以得到嵌入矩阵E了。
但是这样子计算概率有一个缺点,分母中需要对整个词汇表进行求和,计算速度会非常慢,有个解决方案是分级softmax分类器。目标词可能在前5000个中,在前5000个中又在前2500个中,直到最终在一个叶子节点找到它。这样不需要在为单次分类对词汇表中所有10000个词进行求和了,用这样的分类器树,计算成本与词汇表大小的对数成正比。- CBOW
CBOW和Skip-gram相似,但是它是通过周围的词去预测中间的词。
2.负采样
负采样与Skip-gram还是比较相似的,选取(orange,juice)这个正样本的方式和Skip-gram一样,在目标词前后抽取,标记相应的y为1;而其余的则是从字典中随机抽取,记相应的y为0.。让模型去训练,从而达到能分辨这2种不同的采样方式。
- 记负样本的数量为k,当小数据集的时候,k一般在5-20的范围选取;当大数据集的时候,k一般在2-5的范围选取。
模型的softmax公式如上图所示,负采样的速度要比Skip-gram快很多,是因为每次迭代不是更新所有的10000个单元,而是把它转化为10000个二分类问题,这样每个都很容易计算,每次迭代要做的也只是训练其中的t+1个。
另外,根据经验,通过概率公式A选取负样本比较好。如下:
3.GloVe
这里的i和j分别就是上文中的c和t,
Xij
X
i
j
代表的意思就是i在j的周围出现的次数,当抽取的是某个单词周围范围比较大的词时,
Xij=Xji
X
i
j
=
X
j
i
.
这里的
f(Xij)
f
(
X
i
j
)
是加权函数,这样更加好的照顾到常用词和非常用词,这里定义当
Xij=0
X
i
j
=
0
时,
f(Xij)=0
f
(
X
i
j
)
=
0
,
0log0=0
0
l
o
g
0
=
0
GloVe模型的损失函数如下图所示:
三.使用词嵌入的应用
1.情感分类
简单的情感分类模型如上,可以将每个单词的one-hot表示转为嵌入向量,然后求平均或者求和,通过一个softmax函数得到预计的输出评价等级。
不过这个有一点不好,当评价为Completely lacking in good taste,good serbvice,and good ambience.时,尽管这是一个负面的评价,但是有很多正面的词汇,模型可能判断为好的评价。下面的RNN模型可以解决这个问题。
在上一个模型的基础上,将各个单词的嵌入向量输入到一个RNN层中,这样可以得到比较不错的效果。
2.词嵌入除偏
在利用词嵌入模型时,有个问题就是词偏见,如上图所示的当Man对应为Computer Programmer时,Woman可能推测为Homemaker;Father对应为Doctor时,Mother为Nurse,这就是社会上的一种性别偏见现象。我们需要消除掉这种偏见。
- 辨别出我们想要减少或想要消除的特定偏见的趋势。
- 对于那些定义不明确的词(如grandfather和grandmother就是性别很明确的词,而babysitter,doctor这种就是不明确的),减少或消除它们的偏差。
- 均衡步,使得有一致的相似度。(如在判断babysitter时,grandfather和grandmother都有可能)如图所示,就是将babysitter移到非偏见维度上,调整grandfather和grandmother的位置,使得它们到达babysitter的距离一致。