Tensorflow 机器翻译NMT笔记 1 快速上手

2023-11-20

开始

首先,这篇博客基本基于:https://github.com/tensorflow/nmt/ 的内容来的,作为个人学习的笔记,也当做一个博客内容分享。顺序和Github上的顺序有一些区别,注意咯

首先,这里讲的是一个基于Seq2Seq实现的机器翻译系统,即Neural Machine Translation,具体的论文可以参考(Sutskever et al., 2014, Cho et al., 2014)。具体关于Seq2Seq是什么,以及Encoder-Decoder是什么,我就不再详细赘述了,有兴趣的可以看看我博客里之前的内容,都有。

在Readme里面,对于这个项目来说,具有轻量化、高质量、集成了一些Google NMT的技巧以及具备实际使用能力等几个特性,也就是说非常具有参考学习的意义。

这个项目更好的一个地方在于,提供了两类不同的语料供我们测试,一大一小,如果大家没有GPU或者只是单纯想学习一下,那么那个小规模的语料就很贴心了。

NMT

这里写图片描述

传统的phrase-based机器翻译是将源语句按照一定的规则,分解成不同的phrase,然后在逐个翻译,造成翻译结果不流畅,并且系统复杂性太差。而在NMT当中,则是应用了这样一个Encoder-Decoder的模型,原始的Encoder-Decoder当中,Encoder将源语句按顺序读入,然后归纳成为一个蕴含了逐个语句所有信息的上下文向量Context,然后Decoder通过这个Context可以生成一个新的语句,并且是另一种语言的语句,从而完成了翻译。这样一个模型,除了做NMT以外,也可以做对话、语音识别、文字归纳等任务。

当然在实际使用中,不可能使用上面所说的那么简单的Encoder-Decoder。具体的一些经典的改进和细节可以有:
1. Attention:Attention绝对是Encoder-Decoder的标配,有了Attention,Decoder不再使用一个固定的Context,而是动态的计算当前状态的Context,效果改进明显。
2. 一般Encoder和Decoder都使用RNN网络,当然也不可能是原始的RNN,一般都是LSTM或者GRU,主要用于解决长期依赖问题,通俗一点就是原始的RNN不适合处理太长的序列,需要LSTM GRU等加强版的RNN来解决。
3. RNN可以是单向的,也可以是双向的RNN,一般Encoder部分都是用双向的RNN,似乎Decoder部分双向不太合适?(待求证)
4. RNN可以多层堆叠,这个我也写过,需要的可以自行看下。

这里写图片描述

代码初步运行

在写记录的这个时间,这个实例代码提供的是Tensorflow 1.2版本的,要是遇到什么问题的话,记得更新改进下版本。

基本的机器环境:
Python 2.7,Tensorflow(GPU or CPU 版都可以) 1.2.1,Ubuntu 64bit

按照官方的教程:克隆代码,下载数据集,运行Demo,这个三个步骤来完成一个最简单的初步上手

# 从github克隆代码到本地
git clone https://github.com/tensorflow/nmt/
# 使用自带的脚本下载一个简单的数据集
cd nmt
nmt/scripts/download_iwslt15.sh /tmp/nmt_data
# 运行代码
mkdir /tmp/nmt_model
python -m nmt.nmt \
    --src=vi --tgt=en \
    --vocab_prefix=/tmp/nmt_data/vocab  \
    --train_prefix=/tmp/nmt_data/train \
    --dev_prefix=/tmp/nmt_data/tst2012  \
    --test_prefix=/tmp/nmt_data/tst2013 \
    --out_dir=/tmp/nmt_model \
    --num_train_steps=12000 \
    --steps_per_stats=100 \
    --num_layers=2 \
    --num_units=128 \
    --dropout=0.2 \
    --metrics=bleu

如果不出意外的话,那么就可以运行结束,与此同时,可以使用Tensorboard来观察训练的各项指标

tensorboard --port 6222 --logdir /tmp/nmt_model/

确定了自己程序没有问题后,就开始聊聊和分析下这个项目吧,请期待第二篇

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tensorflow 机器翻译NMT笔记 1 快速上手 的相关文章

随机推荐

  • [项目管理-25]:高效沟通的利器,结构思考力与树形结构化表达

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 目录 前言 第1章 结构化思考力概述 1 1 非结构化思考力的问题与结构化思路力的好处 1 2 什么是结构化思路力 1 3 三大沟通层次 层
  • vue prop属性使用方法小结

    Prop 一 基本用法 Prop的基本用法很简单 作用是在子组件中接收父组件的值 父组件传值
  • Allegro如何调整丝印字号

    1 设置颜色管理器 先将所有的都关掉 如果要调节top层丝印 打开top层的焊盘和阻焊层 绿油层 打开板框 丝印和位号 2 选择 设置字号 在Edit中执行Change命令 Find中选择Text 在Options中勾选刚才修改的2号字体
  • JSON首字母大写问题

    一般如果json中的字段和类里的属性相同 则不需要修改 如果不同则可以在类的属性上添加 JsonProperty 或者 JSONField 但是如果JSON数据或者类中属性首字母大写的话 只能使用 JsonProperty 否则注入的值是n
  • Spring学习笔记总结

    第一章 引言 1 EJB存在的问题 2 什么是Spring Spring是一个轻量级的JavaEE解决方案 整合众多优秀的设计模式 轻量级 1 对于运行环境是没有额外要求的 开源 tomcat resion jetty 收费 weblogi
  • 浅谈音视频开发入门基础及进阶资源分享

    导言 音视频开发涉及的知识面比较广 知识点又相对独立琐碎 入门门槛相对较高 想要对音视频开发具有深入全面的了解 需要在行业深耕多年 本文将简单介绍音视频的采集 编解码 传输 渲染四个技术点并对涉及到的知识点和原理进行解释 希望你可以对音视频
  • JAVA并发:线程安全与Synchorinzed

    1 什么是线程安全问题 线程的合理使用能够提升程序的处理性能 主要有两个方面 第一个是能够利用多核 cpu 以及超线程技术来实现线程的并行执行 第二个是线程的异步化执行相比于同步执行来说 异步执行能够很好的优化程序的处理性能提升并发吞吐量
  • 强符号与弱符号

    文章目录 强符号不允许多次定义 强弱可以共存 都是弱符号 简而言之 在 C 语言中 函数和初始化的全局变量 包括显示初始化为 0 是强符号 未初始化的全局变量是弱符号 在链接器进行链接的时候 有下面的规则 强符号不允许多次定义 即不同的目标
  • 多少个X 蓝桥杯模拟

    问题描述 给定一个字母矩阵 一个 X 图形由中心点和由中心点向四个45度斜线方向引出的直线段组成 四条 线段的长度相同 而且四条线段上的字母和中心点的字母相同 一个 X图形可以使用三个整数 r c L 来描述 其中 r c 表示中心点位于第
  • QT 数据库

    sqlite SQLITE功能简约 小型化 追求最大磁盘效率 支持跨平台 不需要服务器 在本地的 数据库操作基本的功能QT里面都有 可视化软件也很小 有支持关系模式的model In memory database IMDB 即内存数据库
  • java动态代理简单实例

    java动态代理简单实例 package hello import java lang reflect InvocationHandler import java lang reflect Method import java lang r
  • 人工智能与信息化

    众所周知 世界上任何事物都能被存储好然后收藏 唯一不能完全被记载的是电子数据 如手机数据 电脑数据 格物斯坦提醒 因为要管理我们每个人的电子化信息 由于数据量大 操作起来极其不方便 很费时费力 但未来一种通过玻璃光 几秒钟内将电子数据全部安
  • 8.全配置自动生成模块前后端

    文章目录 学习资料 配置式开发全新的模块 快速实现 字典管理 代码生成器详细属性设置 全智能模块开发 查询调整 多表连接 药品模块 生产厂家下拉框 学习资料 https www bilibili com video BV13g411Y7GS
  • PageAbility基本概念

    作者 韩茹 公司 程序咖 北京 科技有限公司 鸿蒙巴士专栏作家 一 Page与AbilitySlice Page Page模板 以下简称 Page 是FA唯一支持的模板 用于提供与用户交互的能力 一个Page可以由一个或多个AbilityS
  • QtWebassembly中文显示支持

    Qt Webassembly中文显示支持 由于webassembly是运行在wasm虚拟环境中的 因此是无法直接访问当前系统字体 如果需要提供中文或其它字体支持需要将字体文件作为资源与应用一起编译打包到wasm中 并在应用中主动加载字体资源
  • HTML5学习(三):布局标签、列表、超链接和id

    1 布局标签 header表示网页的头部 页眉 main表示网页的主体部分 一个页面中只会有一个main footer表示网页的底部 页脚 nav表示网页中的导航 aside和主体相关的其他内容 侧边栏 article表示一个独立的文章 s
  • Linux系统上Hadoop的配置

    目录 1 免密登录 2 设置java安装的根目录 3 hadoop参数配置 hadoop地址配置 1 免密登录 cd ssh ls ssh keygen t rsa P f ssh id rsa ls 多了两个文件 id rsa id rs
  • 杭电ACM 1004题

    原题大概意思就是统计输入字符串中 重复的最大个数 import java util Scanner public class Main public static void main String args Scanner sc new S
  • C++ Primer 第五版 电子书(英文)pdf下载

    C Primer 第五版 电子书 英文 pdf下载下载链接 https pan baidu com s 13BQ93O0g8QaNq4ultcxhKA 提取码获取方式 关注下面微信公众号 回复关键字 1169
  • Tensorflow 机器翻译NMT笔记 1 快速上手

    开始 首先 这篇博客基本基于 https github com tensorflow nmt 的内容来的 作为个人学习的笔记 也当做一个博客内容分享 顺序和Github上的顺序有一些区别 注意咯 首先 这里讲的是一个基于Seq2Seq实现的