文章目录
1. Seq2seq model
1.1 什么是Seq2Seq模型
Seq2Seq模型是一种基于encoder-decoder的机器翻译方法。该方法将可变长度的输入序列映射到另一长度的输出序列,两个序列长度可以不相等。
1.2 应用领域范围
- 语音识别与产生(Speech Recognition and Speech Generation)
- 机器语言翻译(Machine Language Translation)
- 聊天机器人(Chatbot)
- 智能问答(Smart Q & A)
- 名称实体/主题提取(Name entity/Subject extraction)
- 关系分类(Relation Classification)
- 路径查询回答(Path Query Answering)
- 文字摘要(Text Summarization)
- 产品销售预测(Product Sales Forecasting),等等。
1.3 工作原理
Seq2Seq模型由两个RNNs组成:encoder和decoder。Encoder接收输入序列(句子),在每一个时间步骤处理一个符号(词语)。最终转换成一个固定长度的特征向量(context vector)。在这个过程中,encoder将会编码序列中重要的信息而丢失掉那些不那么重要的信息。context vector可以视为整个输入序列的信息总结。Decoder逐步生成另一个输出序列,在每个时间步骤产生一个输出符号(词语)。Decoder初始化的时候,接收上一时刻的隐藏状态(context vector)和 < G O > <GO> <GO>分词特殊符号(开始decoding的标志)。以后每一时间步骤接收上一时刻的隐藏状态和符号(词语)输出。具体流程如下:
1.输入序列在输入到encoder之前,进行Embedding处理:word2id+embedding。
2.编码整个输入序列:每一个时间步骤输入一个token,同时产生一个隐藏状态作为下一个时间步骤的隐藏状态输入。最终得到固定长度的context vector。
3.初始化decoder:context vector作为初始隐藏状态 + < G o > <Go> <Go> token作为初始输入。
4.decoder运行,每一个时间步骤产生隐藏状态和一个输出。输出是下一个词语出现的概率。选择最大的概率,经过Embedding+id2word,输出最终的词语。
5.把步骤4得到的上一时刻的隐藏状态和最大概率词语向量做为这一时刻的输入,运行这一时刻的decoder。
6.重复步骤4和5,直到生成 < E O S > <EOS> <EOS> token或达到目标序列的最大长度。
至此,Seq2Seq模型运行完毕。
(1)输入到模型的序列长度都一样,对于不同长度的序列,使用padding补上不足的部分。其中,使用到的特殊符号意义如下:
< E O S > <EOS> <EOS>:End of sentence
< P A D > <PAD> <PAD>:Filler
< G O > <GO> <GO>:Start decoding
< U N K > <UNK> <UNK>:Unknown; word not in vocabulary
假设输入序列的输入长度为10,以如下智能问答为例:
Q: How are you ? ===> [ P A D , P A D , P A D , P A D , P A D , P A D , “ ? ” , “ y o u ” , “ a r e ” , “ H o w ” ] [ PAD, PAD, PAD, PAD, PAD, PAD, “?”, “you”, “are”, “How” ] [PAD,PAD,PAD,PAD,PAD,PAD,“?”,“you”,“are”,“How”]
A: I am fine. ===> [ G O , “ I ” , “ a m ” , “ f i n e ”