吴恩达机器学习DeepLearning.ai 5-2课程总结
课程的详细笔记:https://blog.****.net/koala_tree/article/details/79440375
作业的详细笔记:https://blog.****.net/Koala_Tree/article/details/79455764
=========================================================================
下面开始我自己的总结
一、循环神经网络应用于NLP(自然语言处理)
1、word embedding的基本概念
单词有2种表示方法:
(1)one-hot编码方式:对应某个词典,用[0,0,...1,0,0]来表示某个单词,其中1为单词在词典中的位置。
这种表示方法的局限性:无法表示两个单词的相关性,任意两个词之间的内积都是0
(2)word embedding词嵌入表示方法:构建了一个特征空间,用来表示词与词的相关性;
举例:比如特征空间里的维度包含性别、年龄、水果等属性,那么男、女这两个词在性别维度上会取值较大,且相反,但在水果属性上取值很小,直观看和几乎水果关系;苹果、橘子在性别维度上取值约为0,但是在水果这个维度上取值较大;
通过这个例子,可以理解,word embedding矩阵最重要的作用就是高维的特征空间来描述词的含义,并且不同的词在特征空间中的分布,可以找到词与词的相关性。
(1)one-hot编码方式:对应某个词典,用[0,0,...1,0,0]来表示某个单词,其中1为单词在词典中的位置。
这种表示方法的局限性:无法表示两个单词的相关性,任意两个词之间的内积都是0
(2)word embedding词嵌入表示方法:构建了一个特征空间,用来表示词与词的相关性;
举例:比如特征空间里的维度包含性别、年龄、水果等属性,那么男、女这两个词在性别维度上会取值较大,且相反,但在水果属性上取值很小,直观看和几乎水果关系;苹果、橘子在性别维度上取值约为0,但是在水果这个维度上取值较大;
通过这个例子,可以理解,word embedding矩阵最重要的作用就是高维的特征空间来描述词的含义,并且不同的词在特征空间中的分布,可以找到词与词的相关性。
另外一个例子:t-SNE可视化模型,可以看到含义相近的词语在二位空间上的位置很接近。
在自然语言处理中,很重要的是训练word embedding,当然也可以拿别人训练好的结果。再进一步做机器学习的模型的时候,即使只有较小的训练数据,也可能得到较好的结果。
以文中的例子说明:
A. He drinks a glass of apple ______. (juice)
B. He drinks a glass of orange ______. (juice)用A去训练预测juice,获得经验可以用于对B中juice的预测。因为apple和orange含义相近。
2、训练word embedding矩阵的方法:
(1)前提:需要非常大的文本数量,进行上下文的分析
(2)早期的方法:构造word embedding矩阵,与某个词的one-hot向量相乘以后,得到相应embedding以后,传递给softmax进行多分类。这样做的弊端在于,需要计算每个词的概率(假如词典数为1万个,则需要计算1万次概率),计算量非常大。
(1)前提:需要非常大的文本数量,进行上下文的分析
(2)早期的方法:构造word embedding矩阵,与某个词的one-hot向量相乘以后,得到相应embedding以后,传递给softmax进行多分类。这样做的弊端在于,需要计算每个词的概率(假如词典数为1万个,则需要计算1万次概率),计算量非常大。
(3)Word2Vec,主要从两个方面进行优化
i.从模型训练的输入输出对象上
1)skip-gram算法:输入为单词,输出为该词的上下文
2)CBOW算法:输入为某个词的上下文,输出为该词
ii.从提高训练效率的角度上
1)分层softmax:
构建一棵树,每一次分裂都是一个Sigmoid分类器,对于高频词汇,位置比较浅,而生僻词的位置会很深。2) 负采样算法:
对于目标单词,从取样窗口里随机选取1个单词作为正样本,在从取样窗口外的词典里,随机选取k个(文中按照训练规模推荐5个以下、5-20个)单词,作为负样本,对1+k样本进行Sigmoid二分类。对于负样本的选取,如果完全按照单词的出现频率来采样,会导致向the,at,in 等单词很容易被采样到,而有些低频词极难被采样,从而影响模型训练效果。所以为了权衡词语的固有使用频率差异和模型训练的效果,论文中也给出了推荐的使用频率(大概是按频率的3/4次幂来统计)。
3、word embedding用于迁移学习:
将训练好的word embedding矩阵迁移到其他的机器学习任务,即使新的任务中样本,也可能取得好的效果,非常神奇。
将训练好的word embedding矩阵迁移到其他的机器学习任务,即使新的任务中样本,也可能取得好的效果,非常神奇。
含有很少的训练大大减小了自然语言处理的模型训练成本。以情感分析为例,
以5-2的作业Emojifier为例,需要根据每一句话的意思,输出一个符合语义的表情,共5种表情,分别为爱、开心、不开心、玩耍、吃饭。训练数据集只有127条。作业中给了两种解决方案:
(1)word embedding+Average+Softmax
获取每个词的word embedding向量,求平均后,输出到Softmax。这个模型的效果也还可以,训练数据、测试数据的准确率大概有97%、84%。问题在于,这个模型没有考虑词的先后顺序,对于诸如I am not happy,可能会误识别为高兴,所以用LSTM进行优化。
(2)word embedding+lstm+Softmax
由于每个句子的长度不同,需要按照最大长度对不符合条件的句子进行padding,padding的方法是对embedding向量赋为0,然后输入2层lstm模型中,最后的效果更好一些。训练数据、测试数据的准确里大概为约100%、90%左右。(如下图)
(1)word embedding+Average+Softmax
获取每个词的word embedding向量,求平均后,输出到Softmax。这个模型的效果也还可以,训练数据、测试数据的准确率大概有97%、84%。问题在于,这个模型没有考虑词的先后顺序,对于诸如I am not happy,可能会误识别为高兴,所以用LSTM进行优化。
(2)word embedding+lstm+Softmax
由于每个句子的长度不同,需要按照最大长度对不符合条件的句子进行padding,padding的方法是对embedding向量赋为0,然后输入2层lstm模型中,最后的效果更好一些。训练数据、测试数据的准确里大概为约100%、90%左右。(如下图)