自然语言处理与词嵌入

神经网络和深度学习[1-2]
神经网络和深度学习[1-3]
神经网络和深度学习[1-4]
改善深层神经网络:超参数调试、正则化以及优化【2-1】
改善深层神经网络:超参数调试、正则化以及优化【2-2】
改善深层神经网络:超参数调试、正则化以及优化【2-3】
结构化机器学习项目 3
Ng的深度学习视频笔记,长期更新

2.1 词汇表征

前面讲到过,单词的表示,使用,然后用独热编码。对于每一个单词的向量表示,都单独的表示自己,没有一个算法来生成一个向量表示这些交叉单词。如下图所示:
dl1201
看右边的句子:

1
2
I want a glass of orange ____
I want a glass of apple ____

我们知道第一个句子后的单词可能是juice,第二个句子后的单词也应该是juice,但是对于独热编码表示的单词向量并不能看出orangeapple这两个单词之间的关系,比如WomanMan等。那么怎么优化独热编码的向量呢,比如如下图:
dl1202
我们将词汇表中的单词都列出来,然后给出一些特征,含有该特征的单词的值越接近1,不含有该特征的单词的值就接近于0,和该特征相反的单词的值就越接近-1。比如我们设置300个特征,那么表示Man的单词向量就是一个300维度的向量。
上面提到为每个单词生成一个300维度的词嵌入矩阵,这里有一个算法用两维空间来生成词向量矩阵,可以可视化的观察词之间的联系,如下图所示:
dl1203
可以知道manwoman趋向于一起,kingqueen趋向于一起,这四个单词也趋向于一起作为people标签;右边的dog,cat,fish趋向于一起作为anumals等等。

2.3 词嵌入的特性

这一节讲到了词嵌入的类比推理,比如我们用词嵌入向量表示单词后,Man对应Woman,那么King对应着哪个单词呢?比如我们给出4个特征,如下图所示:
dl1204
我们计算Man向量和Woman向量的近似差,同样的我们计算King向量和Queen向量的近似差,其结果矩阵是相同的,也就是说我们需要在词汇表中找到一个向量,使得其与King向量的差结果和Man向量和Woman向量的近似差最接近,那么那个单词就是我们需要找到的。如下图:
dl1205
需要计算一个w词的相似度:

求解相似度的公式如下:

这样我们就可以得到很多相似推理,比如BigBigger相当于TallTallerYenJapan相当于RubleRussia

2.4 嵌入矩阵

这一节比较简单,就讲了一下嵌入矩阵,如下图所示:
dl1206
这里嵌入矩阵的行表示特征数,列是词汇库大小,之前提到的独热编码向量是原始的单词向量,我们需要学习的是嵌入向量,比如单词orange的嵌入向量求解如上图所示。

2.5 学习词嵌入

比如你正在使用神经网络建立一个语言模型,去预测下面句子最后一个单词,单词下面的数字代表在词汇表中的位置:

1
2
I want a glass of orange ______.
4343 9665 1 3852 6163 6257

将这些用词嵌入向量表示,然后构建神经网络,输出,如下图:
dl1207

2.6 Word2Vec

这一部分在cs224n中有讲解到,这里就一一记录了,讲一下SoftMax

这里主要的问题是计算速度,对于softmax模型,每次我们想估计这个概率,我们需要对10000各单词求和,如果词汇库更大,这个求和就显得非常慢。关于这个问题的一种解法是使用层级softmax分类,比如第一个分类告诉你目标单词在词汇表的前5000个单词中,第二个分类又告诉你目标词在前2500个单词中或者在后2500个单词中…这样我们不需要对10000个单词求和,这样词汇库的计算大小就是,这里构建的树使用的是哈夫曼编码,常见的单词在树的顶部,不常见的单词在树的深处。当然这里并没有加速太多,下一节讲到的负采样是一个更简单的方法。【关于这块的使用我还是不是很理解…】

2.7 负采样

这部分就是说不用计算全部的单词,我们只用将训练集中的目标单词作为正样本,然后随机的从词汇库中选取k个单词作为负样本(非目标单词),然后计算其Sigmoid函数值,如下图所示:
dl1208
即计算如下概率:

2.8 GloVe 词向量

我们已经学习到了不同的算法来计算词嵌入,这里介绍另一种算法,是一个在NLP社区有一些动力的算法,它的使用没有Word2Vec模型和skip-gram模型常见,但是它仍然有一些爱好者,这部分是由于它的简单性。GloVe代表用单词表示的全局向量,前面我们通过选择文本语料库中彼此靠近的两个单词来对单词进行抽样,用表示单词i出现在j的上下文中的次数(这里也就是说i表示的是target,j表示的center).
。。。

2.9 情绪分类

比如下面这些句子(作为输入),对应着不同的分数(作为输出):
dl1209
从上面的句子可以看出并不能通过某些词来判断结果y,比如第一个句子中有excellent,表示正面的,但是最后一个句子中也有类似的词good,但最后的句子展现的却是负面的,因为前面有lack,反向了。
通过学习词嵌入矩阵,对这些向量求和输出到softmax中,这是many-to-one类型,如下图所示:
dl1210

2.10 词嵌入除偏

前面讲到通过词向量来学习单词的相似性,但是这是有问题的,如下图所示:
dl1211
下面给出一种解决办法,我没有看懂什么意思。。。【先放着了,结合这篇论文看看 Man is to computer programmer as woman is to homemaker?】
dl1212

如果觉得有帮助,给我打赏吧!