目录

介绍

导入库

构建模型组件

添加注意力机制

将模型放在一起

下一步


  • 下载原文件 -- 3.5k

介绍

谷歌翻译工作得如此之好,它通常看起来很神奇。但这不是魔法——这是深度学习!

在本系列文章中,我们将向您展示如何使用深度学习来创建自动翻译系统。本系列可被视为分步教程,可帮助您理解和构建神经元机器翻译。

本系列假设您熟悉机器学习的概念:模型训练、监督学习、神经网络以及人工神经元、层和反向传播。

在上一篇文章中,我们安装了开发自动翻译系统所需的所有工具,并定义了开发工作流程。在本文中,我们将继续构建我们的AI语言翻译系统。

我们将需要编写很少的代码行,因为对于大多数逻辑,我们将使用基于Keras的预格式化模板。

如果您想查看我们最终得到的最终代码,可在此Python笔记本中找到

导入库

首先,我们需要加载所需的库:

import warnings
warnings.filterwarnings("ignore")
import tensorflow as tf
import numpy as np
import string
from numpy import array, argmax, random, take
#for processing imported data
import pandas as pd
#the RNN routines
from keras.models import Sequential
from keras.layers import Dense, LSTM, Embedding, RepeatVector
#we will need the tokenizer for BERT
from keras.preprocessing.text import Tokenizer
from keras.callbacks import ModelCheckpoint
from keras.preprocessing.sequence import pad_sequences
from keras.models import load_model
from keras import optimizers

构建模型组件

使用Keras构建我们的模型非常简单。我们将首先使用Keras提供的Sequential模型创建我们的模型。

model = Sequential()

接下来,我们添加一个长短期记忆(LSTM)层。在KerasLSTM类中,LSTM单元的大多数参数都有默认值,因此我们唯一需要明确定义的是输出的维度:将为我们的序列到序列循环神经网络创建的LSTM单元的数量网络(RNN)。

输入向量的大小是原始句子中单词的总和。因为我们使用了嵌入,所以我们会得到标记化的词。这意味着可以将单词拆分为子标记,从而增加输入句子中的单词数量。

为了让我们的模型大小易于管理(从而确保我们可以在合理的时间内训练它),我们将长度设置为512。我们添加了两个LSTM层:第一个是编码器,第二个是解码器。

model.add(LSTM(512))
model.add(RepeatVector(LEN_EN))
model.add(LSTM(512))

请注意,我们在中间添加了一个RepeatVector。这将是我们注意力机制的一部分,我们将很快添加。

接下来,我们将一个Dense层添加到我们的模型中。该层采用前一层的所有输出神经元。我们需要密集层,因为我们正在做预测。我们想要得到与输入的英语句子对应的最高分的俄语句子。本质上,密集层在每个LSTM单元的输出上计算softmax

model.add(Dense(LEN_RU, activation='softmax'))

LEN_RU是输出向量的大小(稍后我们将计算这些参数)。变量也是如此LEN_EN

到目前为止,我们的模型应该是这样的:

model = Sequential()
model.add(LSTM(512))
model.add(LSTM(512))
model.add(Dense(LEN_RU, activation='softmax'))
rms = optimizers.RMSprop(lr=0.001)
model.compile(optimizer=rms, loss='sparse_categorical_crossentropy')

我们正在使用名为RMSpropKeras优化器。它优化了用于反向传播的梯度下降技术。

我们仍然需要添加嵌入层,并在编码器和解码器之间包含一个注意力层。

嵌入层是用Word2Vec创建的。这实际上是一个预训练的嵌入层。现在我们需要生成Word2Vec权重矩阵(该层神经元的权重)并用该矩阵填充标准Keras嵌入层。

我们可以使用gensim包自动获取嵌入层:

from gensim.models import Word2Vec

然后,我们创建Word2Vec嵌入层:

model_w2v = Word2Vec(common_texts, size=100, window=5, min_count=1, workers=4)

然后可以按如下方式检索嵌入层:

model_w2v.wv.get_keras_embedding(train_embeddings=False)

我们可以调用该model.summary()函数来概览我们的模型:

_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
embedding_1 (Embedding)      (None, None, 100)         1200
_________________________________________________________________
lstm_1 (LSTM)                (None, 512)               1255424
_________________________________________________________________
repeat_vector_1 (RepeatVecto (None, 8, 512)            0
_________________________________________________________________
lstm_2 (LSTM)                (None, 512)               2099200
_________________________________________________________________
dense_1 (Dense)              (None, 512)               262656
=================================================================
Total params: 3,618,480
Trainable params: 3,617,280
Non-trainable params: 1,200
_________________________________________________________________

添加注意力机制

现在我们要添加一个注意力机制。我们可以从头开始编写它,但更简单的解决方案是使用现有的Keras模块,例如Keras self-attention

让我们导入这个模块:

from keras_self_attention import SeqSelfAttention

现在我们将在两个LSTM块之间添加导入的模块:

model.add(SeqSelfAttention(attention_activation='sigmoid'))

我们的模型现在已经完成。

将模型放在一起

这是我们的神经网络的最终代码,用Keras编码:

import warnings
warnings.filterwarnings("ignore")
import numpy as np
import string
from numpy import array, argmax, random, take
#for processing imported data
import tensorflow as tf
import pandas as pd
#the RNN routines
from keras.models import Sequential
from keras.layers import Dense, LSTM, Embedding, RepeatVector
from keras.preprocessing.text import Tokenizer
from keras.callbacks import ModelCheckpoint
from keras.preprocessing.sequence import pad_sequences
from keras.models import load_model
from keras import optimizers
#optional if you want to generate statistical graphs of the DMT
#import matplotlib.pyplot as plt
#from keras.utils import plot_model
#import pydotfrom gensim.models import Word2Vec
from gensim.test.utils import common_texts
from keras_self_attention import SeqSelfAttentionmodel = Sequential()model_w2v = Word2Vec(common_texts, size=100, window=5, min_count=1, workers=4)
model.add(model_w2v.wv.get_keras_embedding(train_embeddings=False))
model.add(LSTM(512))
model.add(RepeatVector(8))model.add(SeqSelfAttention(attention_activation='sigmoid'))model.add(LSTM(512))
model.add(Dense(LEN_RU, activation='softmax'))
rms = optimizers.RMSprop(lr=0.001)
model.compile(optimizer=rms, loss='sparse_categorical_crossentropy')#plot_model(model, to_file='model_plot4a.png', show_shapes=True, show_layer_names=True)model.summary()

运行代码后,我们得到以下输出:

[root@ids ~]# python3 NMT.py
Using TensorFlow backend.
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
embedding_1 (Embedding)      (None, None, 100)         1200
_________________________________________________________________
lstm_1 (LSTM)                (None, 512)               1255424
_________________________________________________________________
repeat_vector_1 (RepeatVecto (None, 8, 512)            0
_________________________________________________________________
seq_self_attention_1 (SeqSel (None, 8, 512)            32833
_________________________________________________________________
lstm_2 (LSTM)                (None, 512)               2099200
_________________________________________________________________
dense_1 (Dense)              (None, 512)               262656
=================================================================
Total params: 3,651,313
Trainable params: 3,650,113
Non-trainable params: 1,200

尽管我们的模型代码按原样运行良好,但请考虑将模型创建代码包含在函数中将使其更易于重用。你不必这样做-但得到的可能怎么看,看在最后的翻译器代码的想法notebook我们前面提到的。

下一步

现在我们的模型已经准备好了。在接下来的文章中,我们将训练和测试这种模式。

https://www.codeproject.com/Articles/5299748/Building-AI-Language-Translation-with-TensorFlow-a

(四)使用TensorFlow和Keras构建AI语言翻译相关推荐

  1. (三)用于构建AI语言翻译系统的工具

    目录 介绍 工具和版本 TensorFlow Keras Pandas Word2Vec 下一步 下载源文件 - 3.5 KB 介绍 谷歌翻译工作得如此之好,它通常看起来很神奇.但这不是魔法--这是深 ...

  2. (五)如何训练和测试AI语言翻译系统

    目录 介绍 使用 LST单元进行训练和测试 现在有自我注意 下一步 在这里,我们将创建一个Keras标记器,它将从平行语料库中找到的单词中构建一个内部词汇表,使用Jupyter notebook训练和 ...

  3. (三)使用Keras构建移动风格迁移CycleGAN

    目录 介绍 处理数据集 构建生成器和鉴别器 下一步 下载项目代码 - 7.2 MB 介绍 在本系列文章中,我们将展示一个基于循环一致对抗网络 (CycleGAN)的移动图像到图像转换系统.我们将构建一 ...

  4. (六)多语言人工智能语言翻译

    目录 介绍 翻译多种语言 下一步 下载源文件 - 3.5 KB 介绍 谷歌翻译工作得如此之好,它通常看起来很神奇.但这不是魔法--这是深度学习! 在本系列文章中,我们将向您展示如何使用深度学习来创建自 ...

  5. keras构建卷积神经网络_在python中使用tensorflow s keras api构建卷积神经网络的初学者指南...

    keras构建卷积神经网络 初学者的深度学习 (DEEP LEARNING FOR BEGINNERS) Welcome to Part 2 of the Neural Network series! ...

  6. TensorFlow2.0(四)--Keras构建深度神经网络(DNN)

    Keras构建深度神经网络(DNN) 1. 深度神经网络简介 2. Kerase搭建DNN模型 2.1 导入相应的库 2.2 数据加载与归一化 2.3 网络模型的构建 2.4 批归一化,dropout ...

  7. 基于tensorflow、keras利用emnist数据集构建CNN卷积神经网络进行手写字母识别

    EMNIST 数据集是一个包含手写字母,数字的数据集,它具有和MNIST相同的数据格式.The EMNIST Dataset | NIST 引用模块介绍: import tensorflow as t ...

  8. AI常用框架和工具丨11. 基于TensorFlow(Keras)+Flask部署MNIST手写数字识别至本地web

    代码实例,基于TensorFlow+Flask部署MNIST手写数字识别至本地web,希望对您有所帮助. 文章目录 环境说明 文件结构 模型训练 本地web创建 实现效果 环境说明 操作系统:Wind ...

  9. 2 万字全面测评深度学习框架 PaddlePaddle、TensorFlow 和 Keras | 程序员硬核评测

    [CSDN 编者按]人工智能想入门深度学习?却苦恼网上的入门教程太零碎,不知道用什么框架好?本文作者用两万字手分别从百度的PaddlePaddle深度学习框架.Google的TensorFlow深度学 ...

最新文章

  1. SQL with NUll处理,Join系列,between,in对比exists以及少量题目
  2. mysql 5.7直接安装版,mysql5.7怎么安装 mysql 5.7安装图文教程
  3. 《系统集成项目管理工程师》必背100个知识点-01项目特点
  4. 分布式CAP理论:为什么CAP理论中的三个指标不能同时满足呢?
  5. BO QUERY BUILDER - SI_INSTANCE相关属性
  6. 记一次CNVD通用漏洞审计
  7. 基于mysql和php的分布式事务处理1,基于MySQL和PHP的分布式事务处理
  8. 手机modem开发(9)---LTE注网总体流程
  9. Android零基础入门第21节:ToggleButton和Switch使用大全
  10. linux下怎么查看程序异常,linux程序莫名异常怎么查
  11. python后端设计_Python后端设计模式
  12. mysql:Cannot load driver class: com.mysql.jdbc.Driver
  13. Dos命令 --复制文件(夹)
  14. 线性代数的本质(Essense Of Linear Algebra)[1]
  15. 阿里云短信API使用
  16. 智和网管平台-真正开放源码的网元管理系统(EMS)
  17. php 开发常用英语单词
  18. Android TTS 支持中文
  19. php 涂鸦,微信小程序涂鸦功能的实现
  20. 计算机体系结构:Chapter 5 :ILP(指令级并行)

热门文章

  1. java package public_Java中的public,protected,package-private和private有...
  2. c语言 socket 断开自动连接,如何优雅地断开TCP连接?
  3. centos6下如何安装mysql服务_CentOS6下安装MySQL数据库服务
  4. mysql主动自增可以_Mysql join联表及id自增实例解析
  5. python 释放链表节点_redis:链表
  6. 电商促销素材|设计简洁,适合小清新文艺气质的你!
  7. 蓝盾小火墙补丁_网络安全知识小科普
  8. react 遍历对象_React 和 Vue 之间的相爱相杀
  9. python往redis导数_Python:教你一招,将500W+的数据快速写入redis(文内赋赠教程)...
  10. Fedora CoreOS to CentOS7 问题汇总1