最近因为要做一个title压缩的任务,所以调研了一些text summary的方法。

   text summary 一般分为抽取式和生成式两种。前者一般是从原始的文本中抽取出重要的word or sentence,然后按照一定的语法或者句法进行组合,从而对原始的文本进行压缩。再文本摘要的早期,基本都是这个思路,代表性的方法是textrank。所谓生成式的方法,就是试图让机器理解原始的文本,从而自己归纳出原始文本的摘要,给出的结果(词语或者句子)可能是原始文本中没有出现过的,这也是其与抽取式的方法最大的不同之处。

   随着最近几年深度学习的大行其道,生成式的方法的研究也逐渐多了起来。其实最主流的思路就是使用基于深度学习的seq2seq框架。说起seq2seq就不得不提著名的nmt(nerual machine translation,神经机器翻译),其基本也是基于seq2seq框架的,一般分为encoder和decoder,最近几年流行在基本的seq2seq框架上加上attention机制(注意力机制),一般可以显著提高translation的质量。

    废话了这么多,本文是对于google nmt 官方github repo 实验的一个踩坑记录。基本不做理论方面的讨论,主要讨论记录一些实验结果。

1. google nmt 官方 github 地址:nmt

2. clone repo to local,这个按照教程做就可以了,不表。

3. first experiment

  • 教程中给出的第一个实例是越南语到英语的翻译(Vietnamese to English),

    具体如何下载数据,训练(train)以及在测试集上推断(infer)的脚本github上面都说的很清楚了,不表。

  • 注意第一个实验只是作为一个demo,其训练数据只有13w+,这个对于大规模的机器翻译真的可以说是very small

    了。

  • 数据的准备一般有以下部分:

    1. source language & target language,格式是每行一句话,source & target两个文件每行是一一对应的,
    2. 还有就是需要source & target 的vocabulary(词汇表),其中包括了该种语言尽可能多的词汇,每行一个word(还

      包括特殊的开始,结束token,unknow token)
    3. 数据集分为三个部分,训练集,验证集,测试集,特别地,.vi结尾的是越南语文件,.en结尾的是英语文件
  • 作者进行了普通的nmt 以及加入了attention 机制的nmt两组实验

  • 我使用了公司四核(4*24G) RAM 的 Tesla M40 显卡 进行train & infer(使用 nvidia-smi 查看nvidia 显卡信息)

  • 实验结果表明在训练数据较少的情况下,使用attention 的nmt 的翻译质量还是比不加attention的翻译强不少的,这个结果是

    通过将二者的翻译结果分别于参考翻译进行粗略得到的,当然使用定量的bleu指标也可以得到一样的结论,加入attention的nmt bleu

    score 要比普通的nmt 高不少。具体结果见下图1,2:


图1:普通nmt翻译结果(右)与参考翻译(左)



图2:nmt with attention 翻译结果(右)与参考翻译(左)

直观看上去,确实是attention nmt 的翻译质量更胜一筹。

2. second experiment

  • 教程中给出的第二个实验是德语到英语的翻译(WMT German-English)

  • 这个部分的训练数据就比较大了,400w+行,教程中提供了train 和 infer 两个脚本,

    在下载完数据之后,我又下载了几个pretrained de-en(德语到英语) model,但是发现

    infer总是会报错如下:

FailedPreconditionError (see above for traceback):
Attempting to use uninitialized value dynamic_seq2seq/decoder/multi_rnn_cell/cell_1/basic_lstm_cell/kernel
[[Node: dynamic_seq2seq/decoder/multi_rnn_cell/cell_1/basic_lstm_cell/kernel/read = Identity[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:0"]
(dynamic_seq2seq/decoder/multi_rnn_cell/cell_1/basic_lstm_cell/kernel)]]
  • de-en infer fail 这个问题暂时没有找到原因。

  • de-en train from stratch 没有问题,但是因为训练数据巨大,所以应该需要训练很久(几天吧)

3. 使用nmt 做 text summary

  • text summary 在nmt的框架下,可以看做是单语言的简化(一般的翻译是两个语言之间),原文是source,

    summary 是target

  • 需要准备的训练数据有:

    1. text.ori:原始的文本,每行一个文本,越多越好,需要去除一些无关词汇
    2. text.sum:原始文本对应的summary文本,每行一个summary
    3. vocab.txt:全部的word组成的文本,包括token_start,token_end,以及unknow_token等
  • train & infer 的脚本仿照 vi-en 或者de-en来写就行,需要显示指定source 以及target,可以这样写:

--src=ori --tgt=sum

其余的参数类似指定

  • 这部分的实验,TODO

4. OTHERS

  • google nmt github repo 讲的非常清楚,除了代码部分,关于nmt,attention等基础知识也讲的很清楚,值得一看,

    而且它也给出了一些有价值的参考资料,可以好好阅读一下。

google nmt 实验踩坑记录的更多相关文章

  1. Unity AssetBundle 踩坑记录

    Unity AssetBundle 踩坑记录 editor 下选择什么平台的 ab 加载 Material doesn't have a color property '_Color' UnityEd ...

  2. manjaro xfce 18.0 踩坑记录

    manjaro xfce 18.0 踩坑记录 1 简介1.1 Manjaro Linux1.2 开发桌面环境2 自动打开 NumLock3 系统快照3.1 安装timeshift3.2 使用times ...

  3. unionId突然不能获取的踩坑记录

    昨天(2016-2-2日),突然发现系统的一个微信接口使用不了了.后来经查发现,是在网页授权获取用户基本信息的时候,unionid获取失败导致的. 在网页授权获取用户基本信息的介绍中(http://m ...

  4. CentOS7.4安装MySQL踩坑记录

    CentOS7.4安装MySQL踩坑记录 time: 2018.3.19 CentOS7.4安装MySQL时网上的文档虽然多但是不靠谱的也多, 可能因为版本与时间的问题, 所以记录下自己踩坑的过程, ...

  5. ubuntu 下安装docker 踩坑记录

    ubuntu 下安装docker 踩坑记录 # Setp : 移除旧版本Docker sudo apt-get remove docker docker-engine docker.io # Step ...

  6. SpringBoot + Shiro + shiro.ini 的踩坑记录

    0.写在前面的话 好久没写博客了,诶,好多时候偷懒直接就抓网上的资料丢笔记里了,也就没有自己提炼,偷懒偷懒.然后最近参加了一个网络课程,要交作业的那种,为了能方便看下其他同学的作业,就写了个爬虫把作业 ...

  7. 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密

    你真的了解字典(Dictionary)吗?   从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...

  8. ABP框架踩坑记录

    ABP框架踩坑记录 ASP.NET Boilerplate是一个专用于现代Web应用程序的通用应用程序框架. 它使用了你已经熟悉的工具,并根据它们实现最佳实践. 文章目录 使用MySQL 配置User ...

  9. SpringBoot+SpringSecurity+Thymeleaf认证失败返回错误信息踩坑记录

    Spring boot +Spring Security + Thymeleaf认证失败返回错误信息踩坑记录 步入8102年,现在企业开发追求快速,Springboot以多种优秀特性引领潮流,在众多使 ...

随机推荐

  1. pycharm进行调试[转载]

    转自:https://blog.csdn.net/william_hehe/article/details/80898031 1.首先设置断点. 2.Step into(F7):进入 若函数A内存在子 ...

  2. 浅谈Android View滑动和弹性滑动

    引言 View的滑动这一块在实际开发中是非常重要的,无论是优秀的用户体验还是自定义控件都是需要对这一块了解的,我们今天来谈一下View的滑动. View的滑动 View滑动功能主要可以使用3种方式来实 ...

  3. OAuth 白话简明教程 2.授权码模式(Authorization Code)

    转自:http://www.cftea.com/c/2016/11/6703.asp OAuth 白话简明教程 1.简述 OAuth 白话简明教程 2.授权码模式(Authorization Code ...

  4. mysql的转储SQL文件

    1.转储数据库的SQL文件,有两个选择,一是转储结构:另一种是转储数据与结构: 2.以上两种转储都不会将事件(定时器)转储,所以特别注意这个,否则以为将数据库备份完了,其实漏掉了所有的事件代码,所以需 ...

  5. uva1330 在一个大的矩阵中寻找面积最大的子矩阵

    大白书 P50页 #include <algorithm> #include <cstdio> using namespace std; ; int ma[maxn][maxn ...

  6. 数据在千万级别上进行全文检索有哪些技术?强大的大数据全文索引解决方案-ClouderaSearch

    数据在千万级别上进行全文检索有哪些技术?强大的大数据全文索引解决方案-ClouderaSearch1.lucene (solr, elasticsearch 都是基于它) 2.sphinx3.elas ...

  7. Django框架----数据库表的单表查询

    一.添加表记录 对于单表有两种方式 # 添加数据的两种方式 # 方式一:实例化对象就是一条表记录 Frank_obj = models.Student(name ="海东",cou ...

  8. win10锁屏界面无法更新

    win10的锁屏界面都是巨硬公司推送过来的,质量还不错,最近锁屏界面无法更新,解决方案如下: 以管理员身份运行cmd,分别运行如下两个命令 del /f /s /q /a "%userpro ...

  9. P3501 [POI2010]ANT-Antisymmetry

    P3501 [POI2010]ANT-Antisymmetry 二分+hash 注意:答案超出int范围 ------------ 先拿一个反对称串来做栗子:010101 我们可以发现 0101(左边 ...

  10. MySQL中INSERT的一般用法

    原文链接:http://www.blogjava.net/midnightPigMan/archive/2014/12/15/421406.html MySQL中INSERT的一般用法 INSERT语 ...