人工智能AI教你写情话,藏头诗,分分钟拿下她
广大的钢铁直男们,你有女朋友了吗?表白了吗?被拒了么?
什么?!还有没女朋友的或者还没有向女神表白的?
要想赢得女神芳心,文(甜)艺(言)情(蜜)话(语)也是不能少的!
但是,礼物的小贺卡上准备好要写什么了吗?打电话或者见面后准备说啥?还在说“XX,我爱你”,“XX,我们白头到老”么?还是一直挠头不知道怎么表达?
没关系,AI来拯救你!
AI情话、AI藏头诗、AI情诗大礼包开源上线啦!
话不多说,咱们直接看效果!
AI情话实测效果展示
哎妈呀,泪奔了,哭的不要不要的!
效果炸裂,这还只是一个AI情话功能。
要是再整首诗写在小卡片上,女神的心能瞬间化成一江春水向东流。。。
AI藏头诗实测效果展示
一战深藏功与名!
目前演示页限制是七言绝句,如果是需要其它的七言律诗、五言绝句和五言律诗,可以通过代码调用,效果也是妥妥的!
是不是着急了?我仿佛看到一群大老爷们儿向我杀来。
AI对联实测效果展示
AI作诗实测效果展示
数据集介绍
诗歌:采用chinese-poetry中开源的300万行唐、宋诗训练数据,将诗的前2行作为模型输入,其余作为输出。最终得到ernie_gen_poetry module。
藏头诗:将chinese-poetry中的300万行唐、宋诗划分为了五言绝句、七言绝句、五言律诗、七言律诗四组数据集,每组数据集中取每行的首字作为模型输入,完整的诗作为输出。产出ernie_gen_acrostic_poetry module,可在模型加载的时候指定五言或七言,绝句或律诗,体验页只展示了七言绝句。
对联:采用couplet-clean-dataset开源的74w对联数据,上联作为输入,下联作为输出。产出ernie_gen_couplet。
情话:采用网络搜集的情话情书数据,对于情书数据采用滑动窗口的方式切分为多句情话,最终得到4.3w行情话数据,将情话中的第一句话作为输入,整句话作为输出,产出ernie_gen_lover_words module。
我这就把链接交出来:https://github.com/PaddlePaddle/PaddleHub
这是怎么做到的?
这样炸裂效果的背后,离不开顶尖的ERNIE-GEN 算法加持,什么?不知道ERNIE-GEN?ERNIE听说过吧,NLP领域模型中的带头大哥,曾经斩获多项大奖!后来经过不断研发,ERNIE又衍生出了很多其它模型或组件,形成了ERNIE家族!ERNIE-GEN就是其中优秀一员。
热心的说明:下面是讲技术的环节,想了解怎么用的小伙伴可以快速往下滑
ERNIE-GEN是面向生成任务的预训练-微调框架,首次在预训练阶段加入span-by-span 生成任务,让模型每次能够生成一个语义完整的片段。在预训练和微调中通过填充式生成机制和噪声感知机制来缓解曝光偏差问题。此外, ERNIE-GEN 采用多片段-多粒度目标文本采样策略, 增强源文本和目标文本的关联性,加强了编码器和解码器的交互。
更多详情参考论文ERNIE-GEN:An Enhanced Multi-Flow Pre-training and Fine-tuning Framework for Natural Language Generation
这些由ERNIE-GEN算法衍生出的AI情话(ernie_gen_lover_words)、AI藏头诗(ernie_gen_acrostic_poetry)等模型在微调时首先通过加载ERNIE 1.0中文模型参数完成热启动,然后采用开发者在网络上搜集到的情诗、情话数据,基于ERNIE-GEN框架进行微调。与传统的Seq2Seq做法相比,该模型实际使用效果具备更强的泛化能力,即使是微调使用的数据集中没见过的词汇或句子,模型也能够理解。
例如输入“小编带大家了解一下程序员情人节”,将会输出:
实际上“程序员”“数据库”这些词是从未出现在情话数据集中的,但是得益于知识增强的语义表示模型ERNIE带来的泛化能力,使模型仍然能够领悟到二者之间的关系。同时ERNIE-GEN独特的填充生成机制和噪声感知生成的策略,使得微调后模型文本生成效果更加自然流畅,相比传统的基于RNN结合Seq2Seq的生成做法,所需的训练数据量更小,而且文本生成效果更有内涵。
正如模型输出所言,希望在七夕这一天,我们的程序都能够正常的工作,大家可以放心地过个愉快的情人节。
想知道怎么用吗?
整个预训练模型只要求安装PaddlePaddle 与 PaddleHub,诸位兄弟只需要了解基础 Python 就能跑得动。
以下为调用AI情话预训练模型的代码:
import paddlehub as hub #导入预训练模型 module = hub.Module(name="ernie_gen_lover_words") #准备输入开头数据 test_texts = ['情人节'] #执行文本生成 results = module.generate(texts=test_texts, use_gpu=True, beam_width=5) #打印输出结果 for result in results: print(result)
运行这个脚本后,我们就可以收货了。
哎呀,甜度太高了,有点上头。
[2020-08-21 20:58:08,095] [ INFO] - Installing ernie_gen_lover_words module [2020-08-21 20:58:08,097] [ INFO] - Module ernie_gen_lover_words already installed in /home/aistudio/.paddlehub/modules/ernie_gen_lover_words ['情人节,我愿做一条鱼,任你红烧、白煮、清蒸,然后躺在你温柔的胃里。', '情人节,对你的思念太重,压断了电话线,烧坏了手机卡,掏尽了钱包袋,吃光了安眠药,哎!可我还是思念你。', '情人节,对你的思念太重,压断了电话线,烧坏了手机卡,掏尽了钱包袋,吃光了安眠药,哎!可我还是思念你,祝你情人节快乐!', '情人节,对你的思念太重,压断了电话线,烧坏了手机卡,掏尽了钱包袋,吃光了安眠药,唉!可我还是思念你,祝你情人节快乐!', '情人节,对你的思念太重,压断了电话线,烧坏了手机卡,掏尽了钱包袋,吃光了安眠药,哎!可是我还是思念你。']
如果有服务化部署的需求,借助 PaddleHub,服务器端的部署也非常简单,直接用一条命令行在服务器启动模型就行了:
!hub serving start -m ernie_gen_lover_words -p 8866
是的,就是这么简单,一行搞定服务器端!相比手动配置各种参数或者调用各种框架,PaddleHub的服务器端部署实在是太好用了。
只要在服务器端完成部署,剩下在客户端调用就问题不大了。如下为客户端向服务器端发送请求做推理的示例脚本,包括制定要推理的输入文本、发送推理请求、返回并保存推理结果几个部分。
import requests import json # 发送HTTP请求 data = {'texts':['情人节'], 'use_gpu':False, 'beam_width':5} headers = {"Content-type": "application/json"} url = "http://127.0.0.1:8866/predict/ernie_gen_lover_words" r = requests.post(url=url, headers=headers, data=json.dumps(data)) # 保存结果 results = r.json()["results"] for result in results: print(result)
如下所示,运行脚本后就可以从服务器端拿到推理结果了。
结尾:欢迎加入我们一起学习
最后,拿起你的小手机,点赞收藏,加扣群,里面有更多更好玩的资料源码分享。
正所谓,来者都是客,咳咳,不对,是你有一块钱,我有一块钱,我们合在一起就是两块钱,知识,是可以互相交流的^_^