Deep Models for Text and Sequence
转载请注明做者:梦里风林
Github工程地址:https://github.com/ahangchen/GDLnotes
欢迎star,有问题能够到Issue区讨论
官方教程地址
视频/字幕下载git
Rare Event
与其余机器学习不一样,在文本分析里,陌生的东西(rare event)每每是最重要的,而最多见的东西每每是最不重要的。github
语法多义性
- 一个东西可能有多个名字,对这种related文本可以作参数共享是最好的
- 须要识别单词,还要识别其关系,就须要过量label数据
无监督学习
- 不用label进行训练,训练文本是很是多的,关键是要找到训练的内容
- 遵循这样一个思想:类似的词汇出如今类似的场景中
- 不须要知道一个词真实的含义,词的含义由它所处的历史环境决定
Embeddings
- 将单词映射到一个向量(Word2Vec),越类似的单词的向量会越接近
- 新的词能够由语境获得共享参数
Word2Vec


Predict Words

- 单词通过embedding变成一个vector
- 而后输入一个WX+b,作一个线性模型
- 输出的label几率为输入文本中的词汇
- 问题在于WX+b输出时,label太多了,计算这种softmax很低效
- 解决方法是,筛掉不多是目标的label,只计算某个label在某个局部的几率,sample softmax
t-SNE
- 查看某个词在embedding里的最近邻居能够看到单词间的语义接近关系
- 将vector构成的空间降维,能够更高效地查找最近单词,但降维过程当中要保持邻居关系(原来接近的降维后还要接近)
- t-SNE就是这样一种有效的方法
类比
- 实际上咱们能获得的不只是单词的邻接关系,因为将单词向量化,能够对单词进行计算
- 能够经过计算进行语义加减,语法加减


Sequence
文本(Text)是单词(word)的序列,一个关键特色是长度可变,就不能直接变为vector机器学习
CNN and RNN
CNN 在空间上共享参数,RNN在时间上(顺序上)共享参数ide

- 在每轮训练中,须要判断至今为之发生了什么,过去输入的全部数据都对当下的分类形成影响
- 一种思路是记忆以前的分类器的状态,在这个基础上训练新的分类器,从而结合历史影响
- 这样须要大量历史分类器
- 重用分类器,只用一个分类器总结状态,其余分类器接受对应时间的训练,而后传递状态

RNN Derivatives
- BackPropagation Through time
- 对同一个weight参数,会有许多求导操做同时更新之
- 对SGD不友好,由于SGD是用许多不相关的求导更新参数,以保证训练的稳定性
- 因为梯度之间的相关性,致使梯度爆炸或者梯度消失

Clip Gradient
计算到梯度爆炸的时候,使用一个比值来代替△W(梯度是回流计算的,横坐标从右往左看)函数

- Hack but cheap and effective
LSTM(Long Short-Term Memory)
梯度消失会致使分类器只对最近的消息的变化有反应,淡化之前训练的参数,也不能用比值的方法来解决学习
- 一个RNN的model包含两个输入,一个是过去状态,一个是新的数据,两个输出,一个是预测,一个是未来状态

- 中间是一个简单的神经网络
- 将中间的部分换成LSTM-cell就能解决梯度消失问题
- 咱们的目的是提升RNN的记忆能力
- Memory Cell

三个门,决定是否写/读/遗忘/写回优化
- 在每一个门上,不单纯作yes/no的判断,而是使用一个权重,决定对输入的接收程度
- 这个权重是一个连续的函数,能够求导,也就能够进行训练,这是LSTM的核心


- 这样的模型能让整个cell更好地记忆与遗忘
- 因为整个模型都是线性的,因此能够方便地求导和训练
LSTM Regularization
- L2, works
- Dropout on the input or output of data, works
Beam Search
有了上面的模型以后,咱们能够根据上文来推测下文,甚至创造下文,预测,筛选最大几率的词,喂回,继续预测……
this
- 咱们能够每次只预测一个字母,but this is greedy,每次都挑最好的那个
- 也能够每次多预测几步,而后挑总体几率较高的那个,以减小偶然因素的影响
- 但这样须要生成的sequence会指数增加
- 所以咱们在多预测几步的时候,只为几率比较高的几个候选项作预测,that's beam search.
翻译与识图
以为个人文章对您有帮助的话,给个star可好?