机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

加载库

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

作者使用 help.py 加载数据,同时使用 project_test.py 测试函数。

数据

该数据集包含一个相对较小的词汇表,其中 small_vocab_en 文件包含英文语句,small_vocab_fr 包含对应的法文翻译。

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

预处理

我们将使用以下预处理方法将文本转化为整数序列:

1. 将词转化为 id 表达;

2. 加入 padding 使得每个序列一样长。

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

Padding

通过使用 Keras 的 pad_sequences 函数在每个序列最后添加零以使得所有英文序列具有相同长度,所有法文序列具有相同长度。

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

预处理流程

实现预处理函数:

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

模型

在本节中,我们将尝试各种神经网络结构。我们将训练 4 个相对简单的结构作为开始:

  • 模型 1 是一个简单的 RNN;
  • 模型 2 是一个带词嵌入的 RNN;
  • 模型 3 是一个双向 RNN;
  • 模型 4 是两个 RNN 组成的编码器—解码器架构。
机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

模型 1:RNN

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

我们构建一个基础的 RNN 模型,该模型是将英文翻译成法文序列的良好基准。

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

基础 RNN 模型的验证集准确度是 0.6039。

模型 2:词嵌入

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

词嵌入是在 n 维空间中近义词距离相近的向量表示,其中 n 表示嵌入向量的大小。我们将使用词嵌入来构建一个 RNN 模型。

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

嵌入式模型的验证集准确度是 0.8401。

模型 3:双向 RNN

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

双向 RNN 模型的验证集准确度是 0.5992。

模型 4:编码器—解码器框架

编码器构建一个语句的矩阵表示,而解码器将该矩阵作为输入并输出预测的翻译。

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

编码器—解码器模型的验证集准确度是 0.6406。

模型 5:自定义深度模型

构建一个将词嵌入和双向 RNN 合并到一个模型中的 model_final。

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

预测

def final_predictions(x, y, x_tk, y_tk):

tmp_X = pad(preproc_english_sentences)

model = model_final(tmp_X.shape,

preproc_french_sentences.shape[1],

len(english_tokenizer.word_index)+1,

len(french_tokenizer.word_index)+1)

model.fit(tmp_X, preproc_french_sentences, batch_size = 1024, epochs = 17, validation_split = 0.2)

y_id_to_word = {value: key for key, value in y_tk.word_index.items()}

y_id_to_word[0] = '<PAD>'

sentence = 'he saw a old yellow truck'

sentence = [x_tk.word_index[word] for word in sentence.split()]

sentence = pad_sequences([sentence], maxlen=x.shape[-1], padding='post')

sentences = np.array([sentence[0], x[0]])

predictions = model.predict(sentences, len(sentences))

print('Sample 1:')

print(' '.join([y_id_to_word[np.argmax(x)] for x in predictions[0]]))

print('Il a vu un vieux camion jaune')

print('Sample 2:')

print(' '.join([y_id_to_word[np.argmax(x)] for x in predictions[1]]))

print(' '.join([y_id_to_word[np.max(x)] for x in y[0]]))

final_predictions(preproc_english_sentences, preproc_french_sentences, english_tokenizer, french_to

机器学习很神秘,入门Python神经机器翻译!这篇最适合新手学习

我们得到了语句完美的翻译同时验证集准确度是 0.9776!

进群:125240963   即可获取数十套PDF哦!

猜你喜欢

转载自blog.csdn.net/qq_42156420/article/details/80970295