目录
介绍
使用 LST单元进行训练和测试
现在有自我注意
下一步
在这里,我们将创建一个Keras标记器,它将从平行语料库中找到的单词中构建一个内部词汇表,使用Jupyter notebook训练和测试我们的模型,并尝试在启用自注意力的情况下运行我们的模型。
- 下载源文件 - 3.5 KB
谷歌翻译工作得如此之好,它通常看起来很神奇。但这不是魔法——这是深度学习!
在本系列文章中,我们将向您展示如何使用深度学习来创建自动翻译系统。本系列可被视为分步教程,可帮助您理解和构建神经元机器翻译。
本系列假设您熟悉机器学习的概念:模型训练、监督学习、神经网络以及人工神经元、层和反向传播。
在上一篇文章中,我们构建了一个基于深度学习的模型,用于从英语到俄语的自动翻译。在本文中,我们将训练和测试此模型。
使用 LST单元进行训练和测试我们将开始训练和测试我们模型的核心:没有自我注意和词嵌入的LSTM单元。标准的Keras嵌入组件将提供从一组词到向量的编码。
模型训练包括几个具体的任务:
- 标记输入数据(预处理)
- 确定训练/自测数据比率
- 模型的训练
我们将首先准备输入(源)数据和输出(目标)数据,使其具有数值、固定大小的输入和输出模型。在此之前,我们无法将句子或单词提供给我们的Keras神经网络(NN)模型。
我们将首先创建一个Keras分词器,它将根据在平行语料库中找到的词构建一个内部词汇表。让我们将它包装在一个函数中:
### tokenizer ###
def tokenization(lines):
#print(lines)
tokenizer = Tokenizer()
tokenizer.fit_on_texts(lines)
return tokenizer
首先,我们必须使用fit_on_texts函数。
这个函数接受一个句子列表作为它的参数,并建立一个从最常见的词到索引的映射。它不编码句子,但准备了一个标记器来这样做。
然后,我们必须提供一种方法来编码我们的输入句子。让我们创建另一个函数来做到这一点:
### encode ###
def encode_sequences(tokenizer, length, lines):
# integer encode sequences
seq = tokenizer.texts_to_sequences(lines)
# pad sequences with 0 values
seq = pad_sequences(seq, maxlen=length, padding='post')
return seq
一旦我们初始化了标记器,我们将调用texts_to_sequences函数进行编码。以下代码从数字向量中检索单词:
temp = []
for j in range(len(i)):
t = get_word(i[j], ru_tokenizer)
if j > 0:
if (t == get_word(i[j-1], ru_tokenizer)) or (t == None):
temp.append('')
else:
temp.append(t)
else:
if(t == None):
temp.append('')
else:
temp.append(t)
return ' '.join(temp)
让我们使用Jupyter notebook来训练和测试我们的模型。如果您在没有GPU的机器上运行,您可能希望在Colab上运行notebook,因为它提供了免费的支持GPU的notebook实例。
处理我们数据集的第一个条目将为我们提供训练数据中条目的准确结果,以及其他数据的近似交易。这让我们可以检查翻译器是否正常工作。
下表显示了英文输入数据,然后是理想的俄语翻译,最后是模型翻译:
俄语翻译器出奇的好,可能是因为我们用超过400,000个输入训练了模型。
当然,它仍然不如专业的自动翻译系统,可见挑战有多么艰巨。一些缺陷立即显现出来。例如,句子“你对我很好”被翻译为“ты был для мне очень мне”(“你对我来说非常好”)。
我们还可以通过简单地交换输出和输入数据来创建反向翻译(俄语到英语)。或者,为了试验其他语言,我们可以从Tatoeba项目加载任何其他训练集。
现在有自我注意接下来让我们尝试在启用自注意力的情况下运行我们的模型。我们看到了喜忧参半的结果。在某些情况下,翻译接近完美(黄色),但在其他一些情况下,翻译没有提高,甚至在质量上不如没有自我注意的翻译(灰色)。
直觉上,这是有道理的。注意机制可以帮助模型关注句子中单词的重要性——句子越长,确定哪些单词重要和不重要就越容易。使用self-attention的翻译模型通常会提供更好的结果,但并非总是如此,尤其是在输入较短的情况下。
在接下来的文章我们会分析我们的模型所产生的结果,并讨论翻译普遍基于DL方法的潜力。
https://www.codeproject.com/Articles/5299749/How-to-Train-and-Test-an-AI-Language-Translation-S