词序:神经网络能按正确的顺序排列单词吗?
当学习第二语言时,最困难的挑战之一可能是熟悉单词顺序。词序在机器翻译中也很重要,因为翻译大致上是一种处理目标语言词汇的过程,它与源语言是对等的。也许你已经做过一个把打乱的单词或字母放在原来顺序的游戏。我想看看神经网络是否能做到这一点。
要求
- NumPy > = 1.11.1
- TensorFlow==1.2(可能使用1.3也可以运行,不过我没有测试过)
- matplotlib
- 距离
- tqdm
模型架构
到2017年,我使用的转换器是在机器翻译任务中最先进的模型,并已经被人们所熟知。这有一篇介绍转换器的文章,地址:https://arxiv.org/abs/1706.03762 然而,我不知道它是否适合这个任务。实际上,我认为一个更简单的架构可能会起作用。如下:
文件说明
-
hyperparams.py
包括所有需要的超参数。 -
data_load.py
包含关于加载和批处理数据的函数。 -
modules.py
具有编码/解码网络的所有构建块。 -
train.py
包含模型和训练代码。 -
eval.py 用于
评估和推理。
训练
- 步骤一:下载并提取Leipzig English News 2015 1M Corpus。
- 步骤二:必要时在hyperparams.py调整超参数。
- 步骤三:运行
train.py
或者下载预训练文件。下载地址:https://www.dropbox.com/s/5axxz6f9g93ms72/logdir.zip?dl=0
训练损失和准确性
- 训练损失
- 训练准确性
评估
- 运行
eval.py
.
我们把WER(单词错误率)作为度量。单词错误率=编辑距离(Edit distance)÷单词数量。例:5530/23541=0.23
以下是一些评估结果。详细信息可以在results文件夹中找到。
输入: another this step development that is in 期望的结果: is this another step in that development 实际结果: that that another step in that development 单词错误率 : 2
输入: time we’re remember going a long to for this 期望的结果: we’re going to remember this for a long time 实际结果: we’re going to remember this for a long time 单词错误率: 0
输入: retail a at look concepts for ahead up-and-coming click spinoff 期望的结果: for a look at up-and-coming spinoff retail concepts click ahead 实际结果: the this retail at this concepts click click click ahead 单词错误率: 7
输入: comfort daughter his is -year-old 期望的结果: comfort is his -year-old daughter 实际结果: his is his -year-old daughter 单词错误率: 1
输入: solar are tumbling prices everywhere 期望的结果: everywhere solar prices are tumbling 实际结果: solar solar prices are about 单词错误率: 2
- 探索ASP.NET MVC5系列之~~~5.缓存篇(页面缓存+二级缓存)
- 洛谷P3383 【模板】线性筛素数(Miller_Rabin)
- BZOJ3667: Rabin-Miller算法
- Numpy 修炼之道 (2)—— N维数组 ndarray
- python爬虫入门(五)Selenium模拟用户操作
- python爬虫入门(六) Scrapy框架之原理介绍
- lambda表达式杂谈
- python爬虫入门(七)Scrapy框架之Spider类
- python爬虫入门(八)Scrapy框架之CrawlSpider类
- python爬虫入门(九)Scrapy框架之数据库保存
- Numpy 修炼之道(1) —— 什么是 Numpy
- TensorFlow修炼之道(3)——计算图和会话(Graph&Session)
- 1.python简介
- 《Python自然语言处理》答案第三章
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- [记录点滴] 一个Python中实现flatten的方法
- [源码解析]Oozie来龙去脉之提交任务
- [记录点滴]Ionic编译过程的研究
- [记录点滴]OpenResty 支持http v2的问题
- [源码解析]Oozie来龙去脉之内部执行
- [记录点滴]编译安装luarocks、luacheck、luautf8
- [笔记整理] 一维搜索
- [记录点滴] 使用工具和命令对redis数据进行备份恢复
- [记录点滴]Spring Boot Admin源码分析笔记
- [记录点滴] luaxml编译过程
- [源码解析] Flink UDAF 背后做了什么
- [源码解析] 当 Java Stream 遇见 Flink
- [源码解析] Flink的Slot究竟是什么?(1)
- [源码解析] Flink的Slot究竟是什么?(2)
- [记录点滴] Spark迁移到Flink的几个点