当前位置: 代码迷 >> 综合 >> NMT和Attention cs224n
  详细解决方案

NMT和Attention cs224n

热度:70   发布时间:2023-10-12 09:54:09.0

NMT(neural machine translation)

不管是传统学习还是深度学习,都是encoder-decoder的架构:
NMT和Attention cs224n

MT的优势

  • end-to-end training(也是所有深度学习的优势):
    为优化同一个损失函数调整所有参数
  • Distributed representation:
    更好地利用词语、短语之间的相似性(因为利用了word vector和sentence vector)
  • Better exploitation of context
    利用更多上下文——原文和部分译文的上下文,因为gate的出现,可以记忆更长的序列
  • more fluent text generation
    生成更流畅的文本

MT的缺陷

  • 无法显式的利用语义和语法的结构
  • 无法显式利用指代消解

attention机制

  • LSTM可以记忆大约30个词(但很重要因为它可以生成流畅的word)
  • attention可以记忆大约70个词

问题:

如下图,decoder依赖于最后一个encoder隐含层的输出。并将此输出状态一直传递下去,这会导致一些长序列上的记忆问题。
NMT和Attention cs224n
attention机制:
解决方法是将encoder的历史状态视作随机读取内存,这样不仅增加了源语言的维度,而且增加了记忆的持续时间(LSTM只是短时记忆)
理解一下:把之前的状态维护成一个pool,然后采用类似语料对齐的过程,decoder某一个状态的时候,访问特定的encoder状态。

  • which part of source are you next gonna to be translating
  • implicitly making connection between source target
    NMT和Attention cs224n
    一个非常棒的可视化,显示attention model成功地对齐了法语和英语,其中一小段语序的调整也反应出来了:
    NMT和Attention cs224n

原理
打分机制:
首先有一种打分机制,以前一刻的decoder状态和某个encoder状态为参数,输出得分:
score(ht?1,h^s)score(h_{t-1},\hat h_s)score(ht?1?,h^s?
概率化:
得到各个encoder层的得分后softmax归一化分值转化为概率。
at(s)=escore(s)∑escorea_t(s)=\frac{e^{score(s)}}{\sum e^{score}}at?(s)=escoreescore(s)?
加权:
加权和得到一个context vector,作为条件之一生成decoder的当前状态:
ct=∑sat(s)h^sc_t=\sum_s a_t(s)\hat h_sct?=s?at?(s)h^s?
原理图如下:
NMT和Attention cs224n
其中注意力函数就有多种多样的变形了。

decoder寻找

模型能够在给定原文s的情况下计算译文s?的概率P(s?|s)之后,就来到传统的问题了,找出最可能的译文
sˉ?=argmax?sˉ(P(sˉ∣s))\bar{s}* = \operatorname{argmax}_{\bar{s}}(\mathbb{P}(\bar{s} | s ))sˉ?=argmaxsˉ?(P(sˉs))
在decoding的时候,朴素想法是生成所有的翻译,用语言模型打分,然后挑最大的。但译文数量是词表大小的指数函数,无法实现。

在这里我只想说,对于这种问题的:
老生常谈了,从不搜索到贪婪搜索到柱搜索,随处可见。