1.序列模型实例
语音识别:输入语音,输出文本;
音乐生成:输入:空集或单一整数,输出:序列;
情感分类:输入:序列,输出:数字;
DNA序列分析:输入:序列;输出:序列;
机器翻译:输入:序列;输出:序列;
视频活动识别:输入:视频帧;输出:动作;
命名实体识别:输入:句子,输出:人名;搜索,查找不同类型的文本中的人名、公司名、地点、时间、国家名、货币等,
输入、输出序列长度可能不同;
如何表示一个句子中单独的单词;
词汇表;
构建词典:遍历训练集,找到前10000个常用词或网络词典(英语中最常用的10000个词)
词典中的单词:0ne-hot表示法;x是one-hot向量;
用序列模型在X和输出Y之间学习建立一个映射;监督学习(x,y);
遇到不在词表中的单词,使用UNK表示;
notation:表示训练数据中的x和y;
循环神经网络中学习构建x->y的映射;
方案1:标准神经网络,
问题1:输入输出数据不同例子有不同的长度;
问题2:不共享从文本不同位置上学到的特征;部分学到的内容迅速推广到其他部分;用更好的表达方式可减少模型中的参数数量;
在每一个时间步中,循环神经网络传递一个激活值到下一个时间步中,用于计算。
要开始整个流程,在零时刻需要编造一个激活值,通常是零向量;
循环神经网络从左到右扫描数据,同时每个时间步的参数也是共享的。每个时间步使用的是相同的Wax;激活值由Waa决定,每个时间步使用相同的参数waa;输出结果由Way决定;
缺点:只使用了这个序列之前的信息做出预测;解决方法:双向循环神经网络(BRNN);
循环神经网络常用:
前向传播:
a=g1(Waaa+Waxx+ba) tanh、ReLU;
y=g2(Wyaa+by) sigmoid, softmax;
符号简化之后
a=g1(Wa[a+x])+ba)
y=g2(Waa+by)
在编程框架中自动处理反向传播
L=-ylogy^ -(1-y)logy^;
L=(1,Tx)L;
不同类型的RNN
many-to-one 结构(情感分类)
one-to-one
one-to-many
many-to-many
构建语言模型
用RNN构建语言模型,生成莎士比亚文风的文本或其他类型文本;
语言模型告诉你某个特定的句子,出现的概率是多少;是语音识别系统和机器翻译系统的基础;
输入一个文本序列,估计某个句子序列中各个单词出现的可能性;
训练集:很大的英文文本语料库;
语料库:数量众多的英文句子组成的文本;
(1)标记化句子;定义句子的结尾EOS;
(2)建立字典,word转为one-hot向量;
针对UNK建立概率模型;
(1)表示句子中的单词;
(2)构建序列的概率模型(RNN)
y的输出是softmax的计算结果;
x=y,通过softmax层来预测字典中的任意词会是第一个词的概率;
softmax损失函数:
把三个概率相乘,得到含3个词的整个句子的概率;
用RNN训练语言模型。
了解模型学到了什么,进行一次新序列采样;
对概率分布进行采样,生成新的单词序列;
从RNN语言模型中生成随机选择的一个句子(基于词汇的RNN模型);
基于字符的语言模型(a~z;A ~Z;空格)
优点:不会出现未知词汇;
缺点:得到的句子太大、太长;无法捕捉长范围的依赖关系,计算成本高昂;
大多使用基于词汇的模型,随着计算机性能的提升,特殊使用基于字符的模型(许多未知词汇和专有词汇);
从训练的语言模型采样(test);
序列生成;简历RNN语言模型,并使用它;
具体应用:命名实体问题、语言模型;反向传播应用于RNN;基本RNN的问题:训练RNN的问题:梯度消失,解决方法:GRU,并捕获长期依赖;
梯度爆炸:易于发现,参数大到崩溃,NaN解决方法:梯度修剪,最大值阈值;
GRU:捕获深层连接、解决梯度消失问题;
GRU新的变量C:记忆细胞;
GRU:捕捉长范围依赖,让RNN更加有效;
C,F、C~也可是向量,不同的比特代表不同的记忆单元;
神经网络总最常用的是GRU和LSTM。
GRU:是更加简单的模型,更容易创建更大的网络,运行快;
LSTM:更加强大;
窥视孔连接Fo还取决于c;c也能影响门;
第一周随课测验:
语言模型做的是,在t时间步上,
双向RNN:
构成无环图;
BRNN:考虑过去和未来的信息,进行预测;
一个有LSTM单元的双向RNN模型;有i全向和反向过程;
缺点:需要完整的数据序列,才能预测任意位置;语音识别,获取完整的句子后,才可以进行预测;实际的语音识别系统,有更加复杂的模型,
完成训练RNN语言模型,使用这个去采样随机句子;在每一个时间t内做得是:
深层RNNs
学习更加复杂的函数,把RNN的多个层堆叠在一起;
对于RNN,三层已经很多了;
利用工具箱的工具,构建学习序列模型;
第一周随堂测验完成;
自然语言处理与词嵌入
RNN、GRU、LSTM应用到NLP;
(1)用词汇表表示,one-hot表示,把每一个词汇孤立起来,算法对相关词泛化能力不强;
(2)特征化表示,任意一个单词,学习词的特征或者数值化(词的特征值);
e_5391,词汇表中的每一个词汇用很多的特征来表征;(300维的词嵌入,可视化算法t-SNE,将300维度数据,可视化到二维空间,复杂的非线性映射);
对于不同的单词,算法泛化能力更好;高维表征,更好地表示不同的单词;特征表示方法:词嵌入;
对于相近的概念,学到的特征也相近;相似的概念映射为相似的特征向量;
词嵌入作为输入训练好的模型,模型泛化能力强;适用于很小的标记训练集;
学习词嵌入的算法会考虑非常大的文本集;
使用迁移学习,无标签文本学到的知识迁移到一个任务中(只有少量标记的训练数据集)。
用词嵌入实现迁移学习:
(1)从大量的文本集中学习词嵌入(下载网上预训练好的词嵌入模型);
(2)将词嵌入模型迁移到只有少量训练数据的新任务中;用更低维度的特征向量代替原来10000维的one-hot向量;
(3)在新任务中训练模型,可选:使用仅有的少量词训练数据微调词嵌入模型;
词嵌入使用很多,在标准的NLP任务:命名实体识别、文本摘要、文本解析、指代消解;
词嵌入在语言模型、机器翻译中使用得少一些(任务有大量的训练数据);
词嵌入和人脸编码的关系:
有一个固定的词汇表;
词嵌入的特性(类比推理中的作用)->词嵌入算法;
词嵌入特性:帮助实现类比推理,理解词嵌入过了什么以及能做什么;
相似度函数,找到一个使得相似度最大的单词;
相似度函数:
词嵌入可学习类比关系的一般性;在大型文本语料库上实现词嵌入学习算法,自主地发现这些模式;构建类比推理系统;
学习词嵌入具体化;
嵌入矩阵:300*10000;
从矩阵相乘效率角度考虑,实际中单独查找矩阵中地某列;
keras嵌入层;用嵌入层,从嵌入矩阵提取所需列;
嵌入矩阵:包含了字典中所有单词地嵌入向量;
学习矩阵E地具体算法:
用神经网络构建语言模型:
最大化训练集似然;
相似地概念有相似地特征向量;
skip-gram算法:nearby 1 word;
构建语言模型:用目标词地前几个单词作为上下文;
学习词嵌入:用其他类型地上下文;
学习语言模型,如何帮助学习词嵌入;
用更简单地上下文、更简单地算法,建立从上下文到目标词地映射;
构造监督学习任务,建立从上下文到目标词地映射;
学习好的词嵌入;
softmax模型:预测不同目标词地概率P(t/c);
缺点:softmax计算成本太高(分母中,对词汇表中所有单词求和);
CBOW连续词袋模型;
优化损失函数,得到好地嵌入向量集;
最大地问题:计算速度;
解决方案:分级softmax分类器,
实际中,不会使用完美平衡地分类树,
分级地softmax分类器狗造成:常用词在顶部,不常用词在树地深处;
根据不同地经验法则,构造分类树,形成分级softmax分类器,加速softmax分类的方法;
负采样:加速softmax,解决分母中对整个词汇表求和问题。修改训练目标,运行更加有效。
对上下文C采样:
(1)对语料库均匀、随机采样;
更新常用词/非常用词的e^c(词嵌入);
(2)不同的启发,来平衡常用词和非常用词;
CBOW:获得中间词两边的上下文,用周围词去预测中间词;
负采样:构造新的监督问题;
用相同的上下文词,从字典中选区随机的词,
输入:(content,word);
输出:label;
对靠近的两个词采样;分别在文本和字典中随机选择取得的;
正负样本比例:1:K, 每个正样本有k个负样本;
model:类似logistic回归;
10000个可能的logistic回归问题;预测词汇表中可能的词是否是目标词;
每次迭代只训练其中5个;1个真正目标词的分类器+4个随机选择的负样本;
10000维的softmax回归,计算成本太高,转为10000个二分类,每次仅训练k+1个logistic单元,计算成本低;
如何选取负样本?
根据其在语料库中的经验频率,进行采样,通过词出现的概率,对其进行采样;
1/词汇表总数均匀且随机地抽取负样本;对英文单词地分布通常没有代表性;
去居中,
f(wi)语料库中某个词地词频,通过3/4地计算;
总结:1.在softmax中学习词向量;计算成本很高,将其转化为一系列二分类问题,非常有效地学习词向量;
有很多开源的实现,有与训练的词向量,NLP下载其他人预训练的词向量,在此基础上改进;
计算词嵌入的算法:
skip-gram,Glove算法;
实现搭建深度学习框架;