2017 年,Salesforce 的 Bryan McCann 等人发表了一篇文章 Learned in Translation: Contextualized Word Vectors。
主要流程
第一步:
采用sequence to sequence架构模型,其训练任务为英文和德文之间的转换。这个训练任务是Encode和Decode同步的,同时是一个在有监督的训练语料上进行预训练。
第二步:
而后用第一步预训练好的模型,只是用其Encoder的输出和每个word的 Embedding向量拼接, 做为其它下游任务的输入,而下游的task-specific 模型,根据自己需要来定。 文中给出了包括文本分类,Question Answering,Natural Language Inference 和 SQuAD 等等几种下游任务。
下面主要说下第一步的Encoder和Decoder怎么设计?
Encoder:
输入:每个word的GloVe Embedding:中间: 双层双向的LSTM,同时文章自己给出了命名,叫MT-LSTM, 其中MT为machine translation。
输出: 每个词都会输出一个一个向量 zt
Decoder:
输入:
当前词t的输入是采用:
上一个词Encoder的输出 zt-1
上一个词Decoder的输出 ht-1
上一个词的注意力向量[图片上传中...(image.png-302cc3-1612492736851-0)]
可以看到主要计算中主要依赖当前词解码器的输出ht, 由于计算下一个词的时候才使用上一个词的注意力,所以此时已经有上一个词的ht-1,因此就能算出上一个词的注意力。
中间: 采用 双层单向 的LSTM
输出: 当前词的LSTM输出为当前词的向量,可以算损失。 同时当前词的输出向量还可以为下一个词预测提供输入的一部分。
优点是:
- 预训练迁移模型
- 解决了word2vec一词多义的静态向量问题, 可以根据具体语境进行调整,是一个过程。
缺点:
- Cove在预训练时,同时优化编码器和解码器,但在其他任务上只保留解码器,一定程度上舍弃了一部分预训练问题。