- 非端到端的方式(传统)
Data–>cleaning–>feature engineering(人工设计特征)–>分类器(预测)
怎么让模型自动地学习特征呢?
-
端到端的模型
Data–>cleaning–>deep learning(可以理解为自动地从数据中学出特征)[表示学习:representation learning]–>预测 -
RNN
可以表示一些时序类的特征
RNN的每一个隐含层都是一个向量,每一个隐含层的向量都包含了之前出现的所有单词的信息。
RNN模型存在梯度爆炸和梯度消失的现象。
- LSTM
- 门:帮你过滤哪些信息是重要的,哪些信息是可以丢弃的。帮我们记住最需要记住的信息。
- 但是不可以100%解决梯度消失问题。
- Multimodel Learning(多模态学习)
把不同的数据源拼接在一起,做一些有趣的事情。
- transformer为啥比RNN好呢?
- transformer不是一个时序类的模型。
- 不是时序类的模型,可以并行化处理。
- Attention
- 可以让深度学习可视化
- Seq2Seq训练数据
<中文1,英文1>
<中文2,英文2>
.
.
.
<中文n,英文n>
希望每个batch通过matrix_operation来计算,如果中文1,中文2,中文100长度不一样怎么办。选择每个batch中最长的句子,把剩下的句子用特殊符号进行填充。
Inference Decoding
- 参数的估计是根据一些训练数据来学习模型的参数
- Inference/Decoding指的是在给定了已知模型的参数下, 给定一个输入,要计算出它的一个输出值。
- 在做机器翻译的时候怎么评估模型的性能呢?
不能简单看每个对应位置的单词是否相等,因为针对一句话我们可以用很多种不一样的方式把它表示出来。比如"Weather is good today!"和"Today’s weather is good!"其实都是正确的翻译。那么怎么判断模型的好坏呢?我们可以使用n-gram的方法。
- 可以数一下两个句子之间有多少个重叠的单词。但是这种方法不是很好。比如真实的翻译应该是"Weather is good today!"。预测的翻译是"Good today is weather!"。显然这个预测的结果不是很好,因为预测的句子不通顺。就是说当我们只考虑每个单词的时候,就编变成了unigram,它不会去考虑单词之间的一些关系。
- 可以把unigram, bigram,trigram结合在一起。(类似Bleu score)
Exhaustic Search
- Beam search在Seq2Seq中的应用只是在test阶段使用。
在训练的过程中,每一个decoder的输出都是有正确答案(Seq2Seq也是有监督的学习方式,用聊天机器人打比方,输入的时候是需要question和answer作为输入的;中英文翻译系统,需要输入中文和英文的句子对照)。Beam search是根据decoder预测的每个时序的词的概率分布去搜索最适合的词,这样可以增加输出的正确率。