Please enable JavaScript.
Coggle requires JavaScript to display documents.
机器翻译 (复现代码: (链接:https://pan.baidu.com/s/10-MFJA1jFhQ0libNn0EhEA 提取码:4a8t,…
机器翻译
复现代码:
-
-
确定max_seq_length,删除只包含<EOS>的句子和长度过长的句子。语料填充:一个batch中文本长度不一,一般会以最长的那个作为seq_length,其余的补零填充。作为tf.nn.dynamic_rnn的输入。用padded_batch来进行batching操作。
由于输入源语言句子和目标语言的句子长度都不知道,我们可以用(tf.TensorShape([None]), tf.TensorShape([]) 分别来表示长度未知的向量和为单个数字的长度。
超参数:定义好参数:最大隐层大小1024,解码器中RNN层数2,源语言词表大小10000,目标语言词表大小4000,batch大小100,跑5轮,0.2的dropout,句子最大单词数量50。LSTM为双向。
-
-
向前传播:一个是tf.nn.embedding_lookup来将输入和输出转换为词向量,另一个是在词向量上dropout。把输入通过LSTM后会得到两个输出,一个是顶层LSTM的双向编码输出,另一个是LSTM在每一步的编码状态。最后我们将两个LSTM编码输出拼接成一个张量
接着把这个张量输入到tf.contrib.seq2seq.BahdanauAttention(...)来计算注意力权重。Memory_sequence_length是一个维度为Batch_size的张量,代表每个句子中的长度。Attention会根据这个信息把填充的位置注意力权重设置为0。我们 用tf.contrib.seq2seq.AttentionWrapper来吧LSTM与注意力结合,成为一个更高层的循环神经网络。注意力wrapper输出为attention_cell,最后把它喂给一个解码器RNN输出。
-
神经翻译机
-
基准模型: RNNenc
-
-
-
表现比传统的词袋模型好。但存在问题:必须记住整个序列的语义信息,无论长度多长的句子都编码成固定向量,限制了翻译过程中长句子的表示。与人类翻译习惯不同,人们不会在生成目标语言翻译时关注源语言句子的每一个单词。
提出新模型
-
注意力机制。首先注意力分数αij = exp(eij)/∑exp(eik),再计算带有注意力分数的上下文信息向量ci = ∑αijhj,以此生成新的隐层状态输出si,并计算新的目标语言输出yi。最后计算对齐模型,eij = α(si-1, hj)
-
-
-
-
-
发展历史
-
-
基于神经网络的翻译
-
核心方法:用神经网络实现自然语言映射,为条件概率建模。encoder-decoder框架,softmax确保其为概率分布,递归神经网络计算句子的向量表示。RNN特点在利用长短时记忆处理长距离依赖。缺点 任意长度都编码为固定维度的向量。 解决,使用注意力机制。
-