用python画对联,Python回文对联
鼠年春节临近,试试基于GPT2-Chinese的全新自动对联系统:自动写联(输入开头自动生成对联)和自动对联(输入上联自动写联)。老自动对联功能是去年推出的基于深度学习机器翻译模型的自动对联对话模块:风云三尺剑,花鸟书——对联数据集,自动对联机器人。
一年来,以BERT为代表的预训练模型不断创新,席卷了整个自然语言处理(NLP)领域。其中NLP的难点之一自然语言生成(NLG)也得到了很大的帮助,尤其是去年上半年OpenAI的GPT-2的推出,令人惊叹。然而,GPT-2模型主要是基于英语语料库的训练。到目前为止,已经公布了一个完整的模型,有15亿个参数,对于英文的自动文本生成很有帮助,但是对于中文的NLG还是有限的。
回到中文领域,我们之前推荐过AINLP技术交流组的开源项目gp T2-Chinese:gp T2-Chinese:《【Github】GPT2-Chinese:中文的GPT2训练代码》,可以训练中文数据的GPT-2模型,可以写诗歌、新闻、小说,也可以训练常用语言模型。所以对于对联自动生成,我能想到的是基于GPT2-中文和对联数据,在对联领域训练一个gp T2模型,可以用于对联自动生成:写对联和对对联。幸运的是,couplet数据已经存在,它仍然是我们去年使用的couplet-dataset。感谢提供这个数据的同学们,这个对联数据包含了70多万副对联。唯一可惜的是没有横批。如果有横批,就可以构建一个更完整的自动写联对仗系统。
特别是,在特定领域的微调不是基于大型中国GPT-2模型。虽然已经有一个大型的中文GPT-2预训练模型:gpt2-ml,但是和gp T2-中文是两个系统,gp T2-中文目前不支持这个大型模型的迁移。关于如何用GPT2-Chinese训练couplet数据的GPT2模型,这个项目的代码和文档都写的很清楚,可以直接参考。如果有任何问题,您可以检查问题。我遇到的问题基本都是靠文档和issue解决的。以下是需要注意的几点:
1)训练数据可以按照gp T2-中文训练数据的格式要求,写一个脚本进行转换,可以添加一些标记,比如开头、结尾和上下链接之间的分隔符,这样就有窍门了;可以在生成时基于这些标记来完成;
2)在训练过程中,请将参数min-length设置为一个较小的数字,默认值为128。由于couplet数据长度比较短,按照默认设置训练后你只会得到乱码,所以我直接设置为1;
3)根据您的GPU显存大小调整batch_size和配置参数。这里batch_size默认为8,训练时1080TI机器上会出现OOM。设置为4,就可以完全贯穿了。其他参数不需要移动;
对联GPT-2模型训练完成后,可以直接基于GPT 2-中文版的generate.py脚本进行测试,非常方便。我写了一个基于generate.py和flask-restful的服务器版本,接入AINLP微信官方账号后台。感兴趣的同学可以关注AINLP微信官方账号,直接测试:
关键词“写对联”触发对联自动生成。例如,如果您输入“为鼠年写对联”,对联模型将根据鼠年自动延续,并给出大约三个以鼠年开头的对联:
关键词“对联”的触发是基于对联的对仗。比如输入“对联对仗年年顺,年年好”,大概会给出三个候选对联:
当然,你可以用“顶联”触发旧对联版本进行对比:
至于两个版本的效果,欢迎大家多做对比。如果遇到很棒的机器对联,也欢迎在评论里分享。最后,欢迎关注AINLP微信官方账号,测试自动生成对联和自动对齐对联的功能:
对于AINLP对话功能模块,有兴趣的同学可以参考:
如果你对AINLP微信官方账号感兴趣,请als
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。