为了在8月25日这天给钢铁直男们助攻一个浪漫优雅的七夕节,飞桨的研发人员也是蛮拼的!为了给开发者谋福利,加班加点在PaddleHub上线了AI情话和情诗模型!
话不多说,咱们直接看效果!
AI情话实测效果展示
输入:
你问我多喜欢你
生成
你问我多喜欢你,
我也说不出来,
我心里明白,
我宁愿跟你吵架也不愿意去爱别人。
哎妈呀,泪奔了,哭的不要不要的!
再试试,输入:
你有打火机么?
生成:
你有打火机么? 没有啊!那你怎么点燃我的心的?
效果炸裂,这还只是一个AI情话功能。
要是再整首诗写在小卡片上,女神的心能瞬间化成一江春水向东流。。。
AI藏头诗实测效果展示
输入:
吾爱秋香
生成:
吾慕斯人不以官,
爱闲能有几人闲。
秋来莫作功名看,
香满南山雪满山。
一战深藏功与名!
目前演示页限制是七言绝句,如果是需要其它的七言律诗、五言绝句和五言律诗,可以通过代码调用,效果也是妥妥的!
是不是着急了?我仿佛看到一群大老爷们儿向我杀来。
我这就把链接交出来,大家快来我们PaddleHub官网上体验吧:
https://www.paddlepaddle.org.cn/hub/scene/aiwriting
这是怎么做到的?
这样炸裂效果的背后,离不开顶尖的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 就能跑得动。
飞桨PaddleHub的开发者提供了AI情话、AI藏头诗、AI对联、AI写诗四种文本生成的示例代码,通过 Notebook 文件,我们能更形象地了解模型使用的完整过程。AI Studio项目地址如下:
https://aistudio.baidu.com/aistudio/projectdetail/746002
以下为调用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)
如下所示,运行脚本后就可以从服务器端拿到推理结果了。
飞桨的PaddleHub已经帮我们做好了各种处理过程。相信只要有一些 Python 基础,在本地预测、以及部署到服务器端都是没问题的。
更多预训练模型,马上了解PaddleHub
大家看到的AI情话,包括之前疫情期间开源的口罩人脸检测模型,都只是飞桨模型生态的冰山一角,更多的高质量的预训练模型,欢迎登录飞桨官网了解。
地址:https://www.paddlepaddle.org.cn/hublist
欢迎关注课程直播
飞桨模型生态的发展,离不开每一位开发者的贡献,值得一提的是,我们本次的AI情话模型,也是开发者在AI Studio平台基于ERNIE-GEN的代码训练并贡献到PaddleHub上的,我们也欢迎更多的开发者可以加入进来,一起把深度学习模型玩起来用起来,看看通过丰富的预训练模型还能构造出哪些有趣的任务满足七夕的需求吧。
同时我们相信还有很多技术达人想了解更多模型微调的技术细节,为了满足大家的需求,我们将于8月27日晚上19:00在【飞桨PaddlePaddle】B站账号上开一场直播课为大家进行讲解,敬请关注~