七夕节脱单“神助攻”!AI教你写情话
广大的钢铁直男们
七夕节快要到了
给女朋友的礼物下单了么?
玫瑰鲜花预订好了么?
烛光晚餐筹备了么?
什么?!还有没女朋友的或者还没有向女神表白的?
那明天更是关键的,还不抓紧时间准备礼物:
但是你以为仅有礼物就够了?No!
这些只是刚刚及格,要想赢得女神芳心,文(甜)艺(言)情(蜜)话(语)也是不能少的!
什么?你说甜言蜜语都是虚的?说你是钢铁直男,你还真刀枪不入了!
请问在礼物的小贺卡上准备好要写什么了吗?
如果异地恋,准备好微信发什么了么?
打电话或者见面后准备说啥?还是说憋了半天来了一句“今天天气不错”,等着女朋友给你接一句“挺风和日丽的”?
还在说“XX,我爱你”,“XX,我们白头到老”么?还是一直挠头不知道怎么表达?
没关系,AI来拯救你!
AI情话、AI藏头诗、AI情诗大礼包开源上线啦!
为了在8月25日这天给钢铁直男们助攻一个浪漫优雅的七夕节,飞桨的研发人员也是蛮拼的!为了给开发者谋福利,加班加点在PaddleHub上线了AI情话和情诗模型!
话不多说,咱们直接看效果!
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
- Table View滑动时报错
- knockout源码分析之执行过程
- knockout源码分析之订阅
- bootstrap源码分析之Carousel
- BOOtstrap源码分析之 tooltip、popover
- 两个链表的第一个公共结点
- mac下Android开发环境搭建
- 三位数的排列组合
- Undefined symbols for architecture i386:"_OBJC_CLASS_$_xx", referenced from: 解决方法
- Xcode5.0使用iOS6.1SDK及模拟器
- 内存泄露
- 深入理解及应用Position
- 数字营销人的年终奖该如何翻倍?这里有5个秘籍
- 处理日期时间NSDate
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- sas文本挖掘案例:如何使用SAS计算Word Mover的距离
- R语言ggplot2 对Facebook用户数据可视化分析
- 如何实现一个圆弧倒计时进度条
- R语言Kaggle泰坦尼克号性别阶级模型数据分析案例
- 以图搜图系统概述
- GitHub Pages 配置 letsencrypt 开启HTTPS
- R语言中ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型用于预测时间序列数据
- 以图搜图系统工程实践
- R语言线性判别分析(LDA),二次判别分析(QDA)和正则判别分析(RDA)
- 用R语言实现神经网络预测股票实例
- R语言社区主题检测算法应用案例
- C++ vector学习笔记
- 锂电池充电慢?手把手教你制作锂电池快充充电器
- c++ cin, get学习笔记
- c++ sort 学习笔记