Transformer应用之语言翻译解析

本文通过构建一个基于Transformer的模型来实现语言翻译的功能并演示其效果。包括数据准备,模型构建,预测推理等主要环节。

一、数据准备

首先需要准备一份训练数据集与一份测试数据集,以下是数据样例,每一行包含一条英文语句和对应的翻译成中文的语句(即训练标签):

Transformer应用之语言翻译解析_第1张图片

其次通过训练集构建出中英文词典:

Transformer应用之语言翻译解析_第2张图片

       如果按照one hot编码的方式把训练集中所有语句的单词都拿出来构建词典,会造成词典过于庞大而影响性能,所以这里采用按照数据集中的词汇出现频率进行统计,只在词典中保留必要的词汇,另外为了防止预测时给出的词汇是词典中不存在的,需要添加UNK(unkown)标记:

Transformer应用之语言翻译解析_第3张图片

加载数据时对于英文语句的单词切分使用了工具包nltk.tokenize,而对于中文语句则按照中文字符的方式简单切分:

Transformer应用之语言翻译解析_第4张图片

二、模型构建

以下是Transformer的完整结构图,按照顺序结构从左边输入,然后进入N个Encoder(多头注意力层+前馈神经网络层),在Encoder中,利用自注意力机制使每个token相互“注意”从而计算Q (queries),K(keys),V(values)的值,接下来进入N个Decoder,在Decoder中,使用掩码自注意力机制使当前的token“查看”之前的tokens来计算Q,K,V的值,然后利用Decoder-Encoder注意力机制进行Q,K,V的计算,这里的Q来自于Decoder的states中的值,而K,V来自于Encoder的states中的值,最后通过前馈网络层利用softmax函数输出预测出的每个单词的概率值。

Transformer应用之语言翻译解析_第5张图片

按照以上模型结构构建出的模型:

Transformer应用之语言翻译解析_第6张图片

三、预测推理

首先加载训练好的模型

利用前面准备的测试集进行预测,即把英文语句翻译为中文语句的过程,首先打印每一个待翻译的英文句子,以及对应中文语句答案:

Transformer应用之语言翻译解析_第7张图片

用训练好的模型进行decode预测,也就是通过把输入的一个英文句子进行分词后得到的每个单词,传入模型预测出对应的中文词汇,然后再把每个词汇组装起来作为一个中文语句:

Transformer应用之语言翻译解析_第8张图片

四、预测(中英文翻译)效果解析:

短句翻译的效果示例:

Transformer应用之语言翻译解析_第9张图片

待翻译的语句的词汇不在词典中存在(即存在UNK,下面这句话中的单词“blushed”在词典中不存在,所以模型预测结果就是乱的):

这是测试集中的数据:

再譬如下面的这个例子:

句子结构比较复杂,有包含指代关系的情况下的预测结果:

Transformer应用之语言翻译解析_第10张图片

你可能感兴趣的:(AI,transformer,深度学习,自然语言处理)