Encoder-Decoder模型

编码的过程和解码的过程使用RNN实现,由于RNN存在梯度消失和梯度爆炸问题,因此通常引入LSTM。首先,编码(encode)由一个编码器将输入词序列转化成一个固定维度的稠密向量,解码(decode)阶段将这个激活状态生成目标译文。


Encoder-Decoder

The Encoder

encoder部分利用RNN压缩表示的性质。首先将源语言句子的每个词表示成一个向量,这个向量的维度与词汇表大小V相同,并且向量只有一个维度有值1,其余全都是0,1的位置就对应该词在词汇表的位置。这样的向量通常被称为one-hot向量,或者说1-of-K coding,它与词典的词一一对应,可以唯一的表示一个词,但是这样的向量实用,因为:

  1. 向量的维度往往很大,容易造成维度灾难,
  2. 无法刻画词与词之间的关系(例如语义相似性,也就是无法很好的表达语义)
    所以接下来要做的就是将每个词映射到一个低纬度的语义空间,每个词将由一个固定维度的稠密向量表示(也成分布表示Distributed Representation),也就是词向量。词向量的维度K,通常取100到500之间。词向量在整个翻译系统的训练过程中也会逐步更新,会变得更“meaningful”。
    我们知道词向量在语言学上有一定含义,这个含义无法直观的解释,但是向量之间的距离在一定程度上可以衡量词的相似性。模型的向量维度至少都在100维以上,无法直接画在纸上或者显示在屏幕上,可以使用PCA,T-SNE等方法映射到低维空间,压缩的向量确实可以保存源语言的句子的语义信息,因为语义越相近,句子在空间的距离就越近,这是传统的词袋模型(bag-of-words)所挖掘不出的信息。例如调换主语和宾语被认为语义不相近的句子。

The Decoder

decoder部分同样适用RNN实现,

encoder-decoder模型虽然非常经典,但是局限性也非常大。最大的局限性就在于编码和解码之间的唯一联系就是一个固定长度的语义向量C。也就是说,编码器要将整个序列的信息压缩进一个固定长度的向量中去。但是这样做有两个弊端,一是语义向量无法完全表示整个序列的信息,还有就是先输入的内容携带的信息会被后输入的信息稀释掉,或者说,被覆盖了。输入序列越长,这个现象就越严重。这就使得在解码的时候一开始就没有获得输入序列足够的信息,
那么解码的准确度自然也就要打个折扣了

你可能感兴趣的:(Encoder-Decoder模型)