标签归档:SMT

用 GPT-2 自动写诗,从五言绝句开始

春节前用 GPT2 训练了一个自动对联系统:鼠年春节,用 GPT-2 自动生成(写)春联和对对联 ,逻辑上来说这套NLG方法论可以应用于任何领域文本的自动生成,当然,格式越固定越好,这让我自然想到了自动写诗词,诗词的格式相对比较固定,我们之前已经有所涉及,譬如已经在AINLP公众号上上线了自动写藏头诗首字诗的功能,不过是直接复用的:"自动作诗机"上线,代码和数据都是公开的 ,另外还有一个更大的诗词数据项目可以用作自动作诗的“原料”:【Github】Chinese-poetry: 最全中华古诗词数据库,加上 GPT2-Chinese 这个项目:【Github】GPT2-Chinese:中文的GPT2训练代码 ,可以说万事俱备,只欠试用。

所以本周我们从五言绝句开始继续自然语言生成的主题,关于五言绝句,百度百科是这样说的:

五言绝句是中国传统诗歌的一种体裁,简称五绝,是指五言四句而又合乎律诗规范的小诗,属于近体诗范畴。此体源于汉代乐府小诗,深受六朝民歌影响,成熟定型于唐代。五绝每首仅二十字,便能展现出一幅幅清新的图画,传达一种种真切的意境。因小见大,以少总多,在短章中包含着丰富的内容,是其最大特色。五绝有仄起、平起二格。代表作品有王维的《鸟鸣涧》、李白的《静夜思》、杜甫的《八阵图》、王之涣的《登鹳雀楼》、刘长卿的《送灵澈上人》等。

我主要用了 Chinese-poetry 里的《全唐诗》和《全宋诗》数据 ,首先向这个项目的作者致敬:

《全唐诗》是清康熙四十四年(1705年),彭定求、沈三曾、杨中讷、汪士鋐、汪绎、俞梅、徐树本、车鼎晋、潘从律、查嗣瑮10人奉敕编校,“得诗四万八千九百余首,凡二千二百余人”, 共计900卷,目录12卷。 来自百科

《全宋诗》继唐诗的高度繁荣之后,宋诗在思想内容和艺术表现上有新的开拓和创造,出现了许多优秀作家作品,形成了许多流派,对元、明、清的诗歌发展产生了深远影响。

说明
《全唐诗》和《全宋诗》是繁体存储, 如有需要请自己转换, 但转换后的字不符合上下文。

这里需要首先通过OpenCC做了繁简转换,其次提取里面的五言绝句,最后转换为 GPT2-Chinese 的训练格式,然后就是训练和测试了,感兴趣的同学可以自己尝试,很方便,训练经验可以复用上文关于自动对联的:

1)训练数据可以按 GPT2-Chinese 训练数据的格式要求写个脚本进行转换,可以加一些标记符,这样在生成的时候可以基于这些标记符做trick;
2)训练时请将参数 min-length 设置为一个较小的数字,默认为128,由于对联数据长度比较短,按默认的设置训练后只会得到乱码,我直接设置为1;
3)根据自己GPU显存的大小调整 batch_size 和配置参数, 这里 batch_size 默认为8,训练时在1080TI的机器上会出现OOM,将其设置为4就可以完全跑通了,其他参数不用动;

自动作诗GPT2模型训练完成后,可以直接基于 GPT2-Chinese 里面的 generate.py 脚本进行测试,很方便,我基于 generate.py 和 flask-restful 写了一个 server 版本,对接到AINLP公众号后台了,感兴趣的同学可以关注AINLP公众号,直接进行测试:

关键词“写诗/作诗”触发诗歌的自动生成,例如输入“写诗春”,自动作诗模型会基于“春”进行自动续写,会给出以“春”开头的诗,给出其他的字同理,目前不能多于五个字,因为只能自动生成五言绝句:

关键词“藏头诗”触发藏头诗生成,例如输入“藏头诗春夏秋冬",基于GPT2模型叠加trick生成:

最后,欢迎关注AINLP公众号,测试自动写诗作诗和藏头诗生成器功能:

关于AINLP对话功能模块,感兴趣的同学可以参考:

腾讯词向量和相似词、相似度、词语游戏系列
相似词查询:玩转腾讯 AI Lab 中文词向量
玩转腾讯词向量:词语相似度计算和在线查询
腾讯词向量实战:通过Annoy进行索引和快速查询
玩转腾讯词向量:Game of Words(词语的加减游戏)
词向量游戏:梅西-阿根廷+葡萄牙=?
腾讯 800 万中文词向量 API Demo 搭建

NLP相关工具及在线测试(公众号对话测试)
五款中文分词工具在线PK: Jieba, SnowNLP, PkuSeg, THULAC, HanLP
中文分词工具在线PK新增:FoolNLTK、LTP、StanfordCoreNLP
Python中文分词工具大合集:安装、使用和测试
八款中文词性标注工具使用及在线测试
百度深度学习中文词法分析工具LAC试用之旅
来,试试百度的深度学习情感分析工具
AINLP公众号新增SnowNLP情感分析模块

自动对联及作诗机
风云三尺剑,花鸟一床书---对联数据集和自动对联机器人
自动对联活动获奖结果以及机器对联赏析
"自动作诗机"上线,代码和数据都是公开的
鼠年春节,用 GPT-2 自动写对联和对对联

夸夸聊天机器人及其他技能
一行Python代码实现夸夸聊天机器人
为了夸夸聊天机器人,爬了一份夸夸语料库
夸夸聊天机器人升级:从随机到准个性化
来,试试语音(识别)聊天(机器人)
来,试试成语接龙
推荐一份中文数据,来试试汉字、词语、成语、歇后语在线检索
AINLP公众号新增"狗屁不通文章生成器"接口
来,试试彩虹屁生成器

如果对AINLP公众号感兴趣,也欢迎参考我们的年度阅读清单:AINLP年度阅读收藏清单

鼠年春节,用 GPT-2 自动生成(写)春联和对对联

鼠年春节临近,来试试新的基于 GPT2-Chinese 自动对联系统:自动写对联(输入开头进行对联自动生成)和自动对对联(输入上联自动写下联)。老的自动对联功能是去年基于深度学习机器翻译模型上线的一个自动对对联的对话模块:风云三尺剑,花鸟一床书---对联数据集和自动对联机器人

这一年来,以BERT为代表的预训练模型不断推陈出新,席卷整个自然语言处理(NLP)领域,这其中NLP的难题之一自然语言生成(NLG)也得到了很大的助力,特别是去年上半年 OpenAI 的 GPT-2 的推出,非常惊艳,不过 GPT-2 的模型主要是基于英文领域的语料训练的,虽然到目前为止已经发布了含有15亿参数的完整模型,对于英文领域的自动文本生成非常有帮助,但是对于中文领域的NLG来说还是很受限。

回到中文领域,我们之前推荐过AINLP技术交流群杜则尧同学的开源项目 GPT2-Chinese:GPT2-Chinese:《【Github】GPT2-Chinese:中文的GPT2训练代码》,这个项目可以针对中文数据进行GPT-2模型的训练,可以写诗,新闻,小说,或是训练通用语言模型。所以对于自动对联生成来说,我能想到的就是基于GPT2-Chinese和对联数据训练一份对联领域的GPT2模型,用于对联自动生成:写对联和对对联。幸运的是,对联数据已经有了,依然是我们去年使用过 couplet-dataset ,特别感谢提供这份数据的同学,这份对联数据包含70多万条对联,唯一可惜的是没有横批,要是有横批,就可以造更完整的自动写对联和对对联系统了。

特别需要说明的是,这里并不是基于一个大的中文 GPT-2 模型进行特定领域 finetune 的,虽然目前已经有了大型的中文 GPT-2 预训练模型:gpt2-ml ,但是和 GPT2-Chinese 是两个体系,而 GPT2-Chinese 目前还不支持这个大模型的迁移。关于如何使用 GPT2-Chinese 进行对联数据的 GPT2 模型训练,这个项目的代码和文档都写得非常清楚,直接参考即可,如果有问题,可以查看一下issue,我遇到的问题基本上就是通过文档和issue解决的,这里提几个注意的点:

1)训练数据可以按 GPT2-Chinese 训练数据的格式要求写个脚本进行转换,可以加一些标记符,譬如开头,结尾以及上联下联之间的分隔符,这样在生成的时候可以基于这些标记符做trick;
2)训练时请将参数 min-length 设置为一个较小的数字,默认为128,由于对联数据长度比较短,按默认的设置训练后只会得到乱码,我直接设置为1;
3)根据自己GPU显存的大小调整 batch_size 和配置参数, 这里 batch_size 默认为8,训练时在1080TI的机器上会出现OOM,将其设置为4就可以完全跑通了,其他参数不用动;

对联 GPT-2 模型训练完成后,可以直接基于 GPT2-Chinese 里面的 generate.py 脚本进行测试,很方便,我基于 generate.py 和 flask-restful 写了一个 server 版本,对接到AINLP公众号后台了,感兴趣的同学可以关注AINLP公众号,直接进行测试:

关键词“写对联”触发对联自动生成,例如输入“写对联鼠年”,对联模型会基于“鼠年”进行自动续写,会给出以“鼠年”开头大概3个对联:

关键词“对对联”触发基于上联对下联,例如输入“对对联 一帆风顺年年好”,会给出大概3个候选对联:

当然你可以用“上联”触发老的对联版本进行对比:

至于两个版本的效果,欢迎多做对比,如果遇到了很棒的机器对联,也欢迎在评论里分享。最后,欢迎关注AINLP公众号,测试自动生成对联和自动对对联功能:

关于AINLP对话功能模块,感兴趣的同学可以参考:

腾讯词向量和相似词、相似度、词语游戏系列
相似词查询:玩转腾讯 AI Lab 中文词向量
玩转腾讯词向量:词语相似度计算和在线查询
腾讯词向量实战:通过Annoy进行索引和快速查询
玩转腾讯词向量:Game of Words(词语的加减游戏)
词向量游戏:梅西-阿根廷+葡萄牙=?
腾讯 800 万中文词向量 API Demo 搭建

NLP相关工具及在线测试(公众号对话测试)
五款中文分词工具在线PK: Jieba, SnowNLP, PkuSeg, THULAC, HanLP
中文分词工具在线PK新增:FoolNLTK、LTP、StanfordCoreNLP
Python中文分词工具大合集:安装、使用和测试
八款中文词性标注工具使用及在线测试
百度深度学习中文词法分析工具LAC试用之旅
来,试试百度的深度学习情感分析工具
AINLP公众号新增SnowNLP情感分析模块

自动对联及作诗机
风云三尺剑,花鸟一床书---对联数据集和自动对联机器人
自动对联活动获奖结果以及机器对联赏析
"自动作诗机"上线,代码和数据都是公开的

夸夸聊天机器人及其他技能
一行Python代码实现夸夸聊天机器人
为了夸夸聊天机器人,爬了一份夸夸语料库
夸夸聊天机器人升级:从随机到准个性化
来,试试语音(识别)聊天(机器人)
来,试试成语接龙
推荐一份中文数据,来试试汉字、词语、成语、歇后语在线检索
AINLP公众号新增"狗屁不通文章生成器"接口
来,试试彩虹屁生成器

如果对AINLP公众号感兴趣,也欢迎参考我们的年度阅读清单:AINLP年度阅读收藏清单

Philipp Koehn大神的神经网络机器翻译学习资料:NMT Book

上午有同学在AINLP交流群里询问机器翻译书籍,看到后第一想到的就是Philipp Koehn大神,我读书的时候他活跃在统计机器翻译的一线,特别是他领导开源的Moses机器翻译工具,成了统计机器翻译时代的标配;现在他活跃在神经网络机器翻译的一线,这种一线,不仅仅指paper,还有代码,关注他的github,你会发现他还在为开源的神经网络机器翻译工具贡献代码。

2010年他出过一本SMT的专著:Statistical Machine Translation,这本书也有中文翻译版,个人觉得应该是机器翻译入门必读材料。这几年神经网络机器翻译风声水起,NMT伴随着深度学习的发展攻城略地,Koehn大神也为本书补充了一个专门的NMT章节,或者可以单独成书,关于这个章节,可以在这里找到和下载:https://arxiv.org/abs/1709.07809

Draft of textbook chapter on neural machine translation. a comprehensive treatment of the topic, ranging from introduction to neural networks, computation graphs, description of the currently dominant attentional sequence-to-sequence model, recent refinements, alternative architectures and challenges. Written as chapter for the textbook Statistical Machine Translation. Used in the JHU Fall 2017 class on machine translation.

或者可以在他维护的一个机器翻译课程相关页面上下载,这个主页上有很多已经开过的和再开的机器翻译课程信息:

http://mt-class.org/

最后,如果你觉得麻烦,欢迎关注AINLP公众号,后台回复 nmt 下载:

注:原创文章,转载请注明出处及保留链接“我爱自然语言处理”:https://www.52nlp.cn

本文链接地址:Philipp Koehn大神的神经网络机器翻译学习资料:NMT Book https://www.52nlp.cn/?p=11835

风云三尺剑,花鸟一床书---对联数据集和自动对联机器人

很多年前看到过微软的自动对联工具,写了一篇《机器翻译与微软对联》博文,赞了MSRA用统计机器翻译(SMT)的思路做自动对联系统,当时开玩笑的说:

微软研究院的这个“对联语料库”的规模是67万对,所采用的技术是他们自己的web语料库自动获取技术。开玩笑的说,如果周明老师能给我这个语料库,我也能几天之内构建一个简单的“52nlp自动对联系统”。

前段时间看到了一份对联语料:couplet-dataset

https://github.com/wb14123/couplet-dataset

这份数据包含70万条对联数据,按字切分,作者很用心的给大家准备了训练集、测试集还有词汇表;同时还开源了一个基于Tensorflow的深度学习工具来训练自动对联模型: seq2seq-couplet

https://github.com/wb14123/seq2seq-couplet

感兴趣的同学可以直接上手操作,作者甚至还提供了Demo供大家把玩,不过目前貌似需要科学上网才能访问:

https://ai.binwang.me/couplet/

对我来说,看到这份数据的第一想法就是用神经网络机器翻译(NMT)的思路来尝试自动对联系统,这里NMT开源工具可选择的范围很广,我还是选择了Marian,跑了一个简单的对联“翻译”模型,现在接入AINLP公众号聊天机器人,感兴趣的朋友可以一试。具体方法请关注AINLP公众号,然后后台和AINLP聊天机器人互动:

回复“上联 输入上联内容” ,AINLP机器人将自动回复“下联 自动对联内容”,例如:

例子1:
上联 风云三尺剑
自动回复:
下联 花鸟一床书

注意上图来自微软亚洲研究院电脑对联页面:https://duilian.msra.cn/

其他例子可参考:

关于AINLP公众号相关信息,可参考:AINLP公众号索引、关键字和其他相关资源

注:原创文章,转载请注明出处及保留链接“我爱自然语言处理”:https://www.52nlp.cn

本文链接地址:风云三尺剑,花鸟一床书---对联数据集和自动对联机器人 https://www.52nlp.cn/?p=11145

支持五个SMT模型的NiuTrans 完整版 ver1.0.0 测试版正式发布

以下是来自东北大学自然语言处理实验室朱靖波老师发给CWMT群的邮件:支持五个SMT模型的NiuTrans 完整版 ver1.0.0 测试版正式发布。感谢东北大学对于机器翻译开源事业的贡献!

各位同行朋友们,大家好!

经过一年的努力,今天NiuTrans ver1.0.0 测试版终于正式发布。在上个版本的基础上,新增了三个句法模型: tree-to-string, string-to-tree and tree-to-tree. 这样目前完整版已经支持了SMT目前主流的五个模型,供同行们SMT研究之用。同时也发布了新的较完整的NiuTrans英文版Manual,供大家使用NiuTrans时参考使用。

访问入口显示在东北大学自然语言处理实验室网站(http://www.nlplab.com)首页左上角。另外同时我们开通了NiuTrans新浪微博(http://weibo.com/niutrans),将实时报道NiuTrans的研发进展情况,也便于大家与我们NiuTrans研发团队的互动交流。

NiuTrans将在ACL2012进行演示,为此我们赶在ACL前夕和NiuTrans开源一周年之际发布标准版。但在研发期间我们发现句法模型的实现难度比较高,因此将目前版本称为测试版。希望大家顺便帮助测试一下,使用过程中如发现问题的话,即时告诉我们。最近我们将不断深入测试和改进NiuTrans句法模型,并将及时发布,希望大家注意关注。在此,我代表NiuTrans开发组非常感谢大家的关注,欢迎大家给我们提建议和批评指正,也可以直接e-mail to niutrans at mail.neu.edu.cn,NiuTrans研发团队会及时回答大家的问题。

祝大家身体健康,快乐开心。

Best regards,

Jingbo Zhu (朱靖波)
Natural Language Processing Laboratory
Northeastern University

Moses的一些新变化

  看了一下Moses,发现有了一些新变化,特别是Moses整个开源项目几个月之前从Sourceforge上迁移到github上,可见github近来的人气有多旺。另外Moses的编译方式有了很大的改变,之前是Make方式编译,现在改为了bjam;之前依赖的boost库是可选的,现在boost库是必选的,不安装boost库Moses基本上是无法编译成功的。

  具体到操作上,如果是在ubuntu上,可以通过"sudo apt-get install libboost-all-dev"的方式快速的安装boost库,然后check out源代码:
git clone git://github.com/moses-smt/mosesdecoder.git

  Check out下Moses代码之后,如果不考虑整套统计机器翻译平台的搭建,仅仅测试Moses,直接用bjam编译moses就可以了:
cd ~/mosesdecoder
./bjam -j2
-j后的数字代表多核并行编译;

如果一切顺利并允许几个无关紧要的错误的话,编译完成之后会在dist下面生成一个bin和一个lib目录,前者存放可执行的二进制程序,例如moses, moses_chart,后者存放相关的lib库,例如:libmose.a

Step to Step的编译方法可以参考Moses的官方文档:
http://www.statmt.org/moses_steps.html
这个文档的一个问题是没有提示boost的安装,不安装boost,用bjam编译后会遇到很多boost某个库找不到的错误,并且不会生成Moses的二进制文件及Lib库。

另一个重要新闻是Moese的目前的开发由欧盟下的MosesCore项目支持,查了一下这个项目,貌似是今年才立项的,从名字上看,与Moses紧密相关,并且致力于开源统计机器翻译系统在学术界和工业界的推广:

MosesCore is an EU funded Coordination Action, which aims to encourage the development and usage of open source machine translation.

MosesCore draws together academic and commercial partners sharing a common interest in open source machine translation, and will:

Provide coordination and stewardship of the development of open source software for machine translation, notably the Moses statistical MT toolkit. This will result in at least three major releases of Moses, one in each year of the project.

Outreach to the research community through academic workshops, evaluation campaigns and the machine translation marathons.

Outreach to current and potential users of MT by providing a well maintained web presence, an active newsletter, and three annual outreach events for knowledge sharing and tutorial.

Improve interaction between academic and industrial MT stakeholders through both the outreach events and tutorials, and the marathons.

Moses最新版本发布

  统计机器翻译开源工具Moses的主要负责人之一Hieu Hoang,也是Moses代码的最大贡献者在3月28日的邮件列表里发布了一个通知“Moses release”,除了告知最新的Moses源代码包的下载地址外,还列出了自上一次发布之后的12点改进,这些改进来自于Moses开源社区许许多多开发者的贡献。以下是Hieu Hoang的全文: 继续阅读

机器翻译新闻一则

  今天在新浪科技上看到了“东芝开发智能手机英汉日翻译软件”这则新闻,比较感兴趣!虽然“统计机器翻译”这些年如火如荼,但是在商业化的道路上似乎还是老大哥“基于规则的机器翻译”更加成熟。比较感兴趣的是东芝这款产品是如何解决统计机器翻译所占的的资源问题,即使在PC上,SMT所占的资源有时都让人咋舌,所以感觉SMT更适合Google这类在线翻译模式,不知东芝是如何在手机上解决这个问题的。 继续阅读

统计机器翻译英雄谱一:Franz Josef Och

  一直想写一下统计机器翻译领域的英雄谱,不过这方面自己把握的还不足。前些天计算所刘洋师兄在这里留言,可能有的读者没有注意到,他细数了几位SMT牛人的贡献,写得很好 继续阅读

欧洲议会平行语料库介绍

  平行语料库对于统计机器翻译(SMT)的研究至关重要,欧洲议会平行语料库是目前互联网上可免费获取的非常规范的平行语料库。本文主要根据欧洲议会平行语料库的英文主页介绍进行了粗略翻译,其时间跨度从1996年至2006年,目前这个语料库还在继续扩建中。 继续阅读