seq2seq
- seq2seq:输入序列,输出序列,将输入的语言转为一个向量,最后输出再将向量转为语言
- shortcoming:The final state is incapable of remembering a long sequence.即太长了记不住
attention
- 用attention可以改进seq2seq中的遗忘问题,大幅提高准确率,但是计算特别大
- attention会在encoder中的最后阶段s,计算s和之前的每个h计算相关性,告诉模型前面的哪些内容更重要,即计算权重,解决遗忘问题
- decoder每次更新状态时,都会与encoder进行对比一次,并且计算权重,下次再更新状态时,又重新对比encoder所有状态,计算权重,这样解决了遗忘问题了
self-attention
- RNN都存在遗忘问题,self-attention每一轮更新状态时,都会重新看一遍前面的信息,防止遗忘。
- self-attention相比attention更加广泛使用,不局限与seq2seq模型,可以用于所有rnn
transformer
- 是seq2seq,不是rnn
- 只有attention和dense layers
- 刚开始有人提出过RNN,然后为了改进RNN遗忘问题,提出了ATTENTION用于解决seq2seq的遗忘问题,后来发现SELF-ATTENTION 相比Attetion应用更加广泛,可以用于任何RNN模型,最后有人提出ATTENTION 可以剔除RNN,效果更好
- 传统的RNN网络,存在不能并行计算的问题,transformer可以并行。self-attention机制来进行并行计算,在输入和输出都相同
bert
bert是为了预训练Transformer中的encoder, bert其实就是只有编码器的transformer。
首先,训练第一个任务是,随机遮挡单词,然后通过梯度下降调参,让predict与被遮挡的单词尽量接近,所以这个训练无需人工标注,训练集自动生成,模型自动训练好参数
然后,训练第二个任务是,判断两个句子是否相连接。
bert想法简单效果好,但是计算量特别大
好处:
- 使用预训练好的模型来抽词、句子的特征。预训练模型抽取了足够的信息
- 不用更新预训练好的模型
- 需要构建新的网络来抓取新任务需要的信息, 新的任务只需要增加一个简单的输出层
- 相比于word2vec、语言模型来模型说,更加优秀,因为word2vec忽略了时序信息,语言模型只看一个方向
- 基于微调的NLP模型
本文推荐看看shusenwang在bilibili上的课程。