首页  > 百科热搜  > 鼠年春节,用 GPT-2 自动写对联和对对联

鼠年春节,用 GPT-2 自动写对联和对对联

发布时间:2023-07-28 23:25:19     作者:AI小白入门     浏览量:719    

自动对对联

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

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

自动对对联

回到中文领域,我们之前推荐过AINLP技术交流群杜则尧同学的开源项目:GPT2-Chinese,这个项目可以针对中文数据进行 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 写了一个 GPT2 的 Server 版本,对接到 AINLP 公众号后台了,感兴趣的同学可以关注 AINLP 公众号,直接进行测试:

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

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

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

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

收藏文章

收藏

文章标签: 对联     GPT     鼠年    
上一篇:民警3次出警找回丢失手机,失主赠送两面锦旗致谢 下一篇:来晋宁吃什么?新街“老酱鱼”