王平,一个IT老码农,写Python十年有余,喜欢专研通过爬虫技术来挣钱。

春节贴春联是中国人庆祝春节(过年)的特有习俗。但我真正对对联有些认识和喜欢,不是从年年贴春联开始的,而是从《唐伯虎点秋香》那段经典的对对子开始的。那工整又有韵律和意境的对子,配上有节奏的配乐读出来着实让人热血沸腾,大呼过瘾。

本文末尾有对对联的入口,可以与人工智能对(tiao)对(xi)联(ta)哦~

先来回味一下这段台词吧,你的耳边是否响起了对对子的节奏。。。

对穿肠:一乡二里共三夫子,不识四书五经六义,竟敢教七八九子,十分大胆!

宁王:对啊,怎麼不对呢?你不给我面子,我可真的要发飙了!

唐伯虎:让我来试试! 十室九贫,凑得八两七钱六分五毫四厘,尚且三心二意,一等下流!

对穿肠:好工整啊!

华太师:华安,你来的正是时候。

唐伯虎:没事,没事,没事。

对穿肠:在下是七省文状元兼参谋将军,绰号对王之王的对穿肠。阁下是?

唐伯虎:小弟读过两年书,尘世中一个迷途小书僮,华安。

对穿肠:好!我就来会一会你!

(两人互相凝视,蓄势待发,突然......亲了一下......众人跌倒在地!)

唐伯虎:对不起,我俩惺惺相惜,情不自禁。

对穿肠:言归正传,我们开始了。

图书里,龙不吟虎不啸,小小书僮可笑可笑。

唐伯虎:棋盘里,车无轮马无韁,叫声将军提防提防。

众 人:对得好!对得好!

对穿肠:莺莺燕燕翠翠红红处处融融洽洽。

唐伯虎:雨雨风风花花叶叶年年暮暮朝朝。

众 人:华安真行啊!对得好!

宁 王:快出对子对死他,对死他!

对穿肠:十口心思,思君思国思社稷。

唐伯虎:八目共赏,赏花赏月赏秋香。

对穿肠:我上等威风,显现一身虎胆。

唐伯虎:你下流贱格,露出半个龟头。

对穿肠:我堂堂参谋将军会输给你个书僮? 你家坟头来种树。

唐伯虎:汝家澡盆杂配鱼。

对穿肠:鱼肥果熟入我肚。

唐伯虎:你老娘来亲下厨!

(对穿肠倒地喷血)

唐伯虎:对对本为消遣作乐,今曰穿肠兄居然对到呕出几十两血,可谓空前绝后,小弟佩服佩服!

十年前,微软亚洲研究院推出了一个对联生成引擎,可以根据用户输入的上联自动生成下联,当时火了一把。那时候我觉得这个好神奇啊。

十年后,人工智能的风已经热吹了几年。随着硬件GPU计算能力的提升,和深度学习框架(TensorFlow,PyTorch,MxNet等等)的推出和发展,人工智能(其实就是更深层的机器学习)首先在图像处理领域大放异彩,人脸识别、物体检测等技术应用广泛。然而,在自然语言处理处理方面,深度学习的应用还没有图像处理那么成熟。不过,人工智能作古诗,对对子应用的看起来还不错。

今天,在春节到来之前,我就来用Python搭建一套人工智能对对联的系统,供朋友们在春节期间娱乐一下。

一、人工智能的实现

基于深度学习实现的对对联已经有好多种方法。这次我们主要参考这个实现:

https://github.com/wb14123/seq2seq-couplet

并且,这个作者还提供了70万条对联的数据,有了这个数据就可以训练我们自己的模型了。

做深度学习训练是最考验硬件的,必须上GPU,不然训练可能要一两个月才能完成。通常深度学习的系统环境是这样的:

CPU:现在常规的已经足够,计算主要靠GPU;

内存:至少16GB,越多越好;

GPU: NVIDIA,至少是gtx-1060吧。目前最具性价比的是gtx-1080 Ti

OS: Ubuntu 16.04 (普遍使用的版本)

Python: Python 3.6 版 (2.x的版本用的很少了)

深度学习框架: TensorFlow、PyTorch和MxNet最流行

我的机器已经配置好了TensorFlow和GPU等环境,不过GPU只是1070,性能有点弱弱。按照说明可以比较容易的配置好训练环境。训练跑起来后,就听到GPU风扇转起来了,发热量有点大。好在是冬天,可以取取暖。要是夏天就只能流汗了~

训练的过程很漫长。。。最终训练了一周。搞人工智能的活儿没点儿像样的硬件,还真耗不起青春啊。训练期间,有足够的时间去完成其它的功能。

二、Web API的建立

上面的github中有个Flask写的Server。不过,我更喜欢Sanic,就用Sanic写一个吧。服务器接收上联,生成下联后返回json数据,Sanic很容易搞定。如果你用过Sanic,就知道它有多么容易了。

这个Server程序一运行,就先加载训练好的模型。然后给Server写一个路由响应函数即可。

三、与公众号对接

这个对接之前没有做过。通过读开发文档,弄明白了流程:在公众号后台设置服务器地址用来接收腾讯服务器发送的消息,我的服务器处理后再返回给腾讯服务器。

举个例子,关注公众号的用户给公众号发送一条上联,腾讯服务器收到后转发给我的服务器,我的服务器生成下联返回给腾讯服务器,腾讯服务器再传给用户的微信客户端。

弄清楚了数据传输路径,再结合文档中描述数据的格式,就可以实现跟微信对接的程序了。

(0)验证微信消息来源

微信的API通过一个验证机制来让我们开发者服务器来确认消息是从微信服务器发来了,而不是其它人的消息。这个机制官方文档中有描述,我把它实现为一个函数,其中三个参数是微信服务器发过来的,而里面的token是我在公众号后台设置的,这个token很关键不能让别人知道,不然他就可以拿它伪装成微信服务器了。当然,我的token你看到了也没关系,我会改成别的哦。

(1)解析微信消息数据

微信服务器传过来的消息是一个xml结构的数据,具体格式参见其官方开发文档。我用lxml来解析这个xml结构:

(2)实现关注事件自动回复和关键字回复

之前已经在公众号后台设置了用户关注后自动打招呼,和基于关键词的自动回复。启用开发模式后,这个功能就要我自己实现了:

把设置的关键词和回复内容用dict保存,后面添加也很方便。用正则表达式匹配这些设置的关键词和微信消息内容,速度也够快。

(3)生成回复消息

我的服务器处理完微信服务器发过来的消息后,就要生成一个xml格式的消息返回给微信服务器,它接收后再发给微信用户,从而实现最终的自动回复微信用户。这个xml格式也是正在开发文档中描述。

这样,与微信服务器对接的功能就实现了。接下来,把这些功能放到Sanic服务器程序里面就好了。

不过,我不是这样做的。而是让对联功能的服务保持独立,因为它启动一次加载人工智能模型太费时间,调试不方便。把对外的web服务写成另外的Sanic服务程序,两者之间,通过requests访问:

完成后测试成功。可惜,只留下下面一条测试的截图(后面有解释)

到此为止,一切正常!

。。。。。。

但是,原来公众号设置的菜单不见了。后台显示开发模式下要自己开发这个菜单,没问题,难不倒我。根据文档试了试,竟然不成功?!

为什么呢?权限那里显示,菜单开发的权限只有在公众号认证后才能获得。晕,还要去认证公众号。好吧,公众号你赢了。也就是说,前面废了那么大劲儿从读文档到写程序对接的功夫全白费了,公众号对接的代码白写了~~

四、独立的网页

我就是不认证,就是不认证!但我可以换个思路,停用开发模式。增加一个菜单,菜单链接对对联的网页就可以了。做这个网页太简单了,还是上Sanic。有心的同学,可以在这个网页上发现对对联的API,你可以使用这个API开发自己的应用哦。

这个网页就是一个单页面,布局用bootstrap,用jQuery和服务器交互。因为就一个简单页面,没有用jinja模板,直接读取html文件并用 response.html() 返回即可。坏处是每次调整网页都有重启一下服务:

网页有点简陋,就是下面的样子,类似对话流。有兴趣的同学可以和它对对子。

这个系统的搭建,主要是使用Python完成,涉及一点网页css和js的东西,也涉及系统和网络服务的知识,可以算得上一个全栈开发的例子。当然,主要的还是Python,不管是人工智能还是Web都有Python的用武之地。别想了,赶快学Python吧。

扫码关注下方公众号后,底部回复 对联 即可和人工智能一起对对联


Python中文社区作为一个去中心化的全球技术社区,以成为全球20万Python中文开发者的精神部落为愿景,目前覆盖各大主流媒体和协作平台,与阿里、腾讯、百度、微软、亚马逊、开源中国、CSDN等业界知名公司和技术社区建立了广泛的联系,拥有来自十多个国家和地区数万名登记会员,会员来自以公安部、工信部、清华大学、北京大学、北京邮电大学、中国人民银行、中科院、中金、华为、BAT、谷歌、微软等为代表的政府机关、科研单位、金融机构以及海内外知名公司,全平台近20万开发者关注。

▼ 点击下方阅读原文,免费成为社区注册会员 

过大年,和人工智能一起对对联!相关推荐

  1. 虎年到,新年用Python与人工智能一起写春节对联 python+pytorch+Transformer+BiLSTM+ATTN+CNN

    艾薇巴迪大家好,虎年春节就要到了,首先在此祝大家新春快乐.虎年大吉. 用Python与人工智能一起写春联 前言 1.分析 2.配置对联项目 2.1.配置下载 2.2.数据预处理 2.3.训练 2.4. ...

  2. tensorflow实现贴对联

    项目名称 对春联 项目介绍 本系统可以根据用户给出的上联,自动对出合适的下联. 实现原理 通过下载网上有关对联的数据集,并将其处理成上联下联分开的形式,统计字典文件.然后使用Tensor2Tensor ...

  3. 教你用人工智能写文章写歌词写对联

    最近一直在研究人工智能智能,从gpt2.transformers.bert.... 最后发现,其实对小白来说,人工智能并没有那么高大上,看代码像看天书.... 其实你只要会安装python,懂pip是 ...

  4. 人工智能对联生成 API 数据接口

    人工智能对联生成 API 数据接口 基于百万数据训练,AI 训练与应答,多结果返回. 1. 产品功能 AI 基于百万历史对联数据训练应答模型: 机器学习持续训练学习: 一个上联可返回多个下联应答: 毫 ...

  5. 又被 AI 抢饭碗?2457 亿参数规模,全球最大中文人工智能巨量模型 “源1.0”正式开源...

    作者 | 伍杏玲 出品 | AI科技大本营(ID:rgznai100) 输入: 昔我往矣,杨柳依依. 今我来思,雨雪霏霏. 行道迟迟,载渴载饥. 我心伤悲,莫知我哀! (以战争为题写一首诗) 回复: ...

  6. 明年,我要用 AI 给全村写对联

    作者 | 神经小兮 来源 | HyperAI超神经 春节已经过完,你是否还沉浸在年味里? 到腊月二十九.三十,家家户户贴上了 红红的春联,春节就正式拉开了序幕. 春联也称为「对联」.「门对」.「楹联」 ...

  7. 写给程序员的 18 幅对联,你能看懂几个?

    说在前边 今天我换头像了,大家别丢失哈. 大年初一了,我们从一开始就约定好了按照年龄一家一家的轮着聚会.我在我的发小中算是较小的,今年轮到我家了. 前几年聚会的时候,那时候还小,是把自己的一些鸡毛蒜皮 ...

  8. 独家 | 王海峰:百度大数据与人工智能(附PPT下载)

    1月28日上午,由中国工程院和清华大学联合主办的"长城工程科技会议"第四次会议工业大数据分会在清华大学信息科技大楼召开.中国工程院院士李伯虎.工业和信息化部信息化和软件服务业司副司 ...

  9. 2017回顾与2018前瞻:机器学习与人工智能

    隔一年,科技媒体 KDnuggets 最近向大数据.数据科学.人工智能和机器学习领域的一些顶尖专家征询了他们对于 2017 年这些领域最重要的发展,以及 2018 年的主要发展趋势的看法.这篇文章是本 ...

  10. 风景这边独好的AI大年,百度亚马逊等巨头第一季度成绩单怎么样?

    苹果春季新品发布会邀请函 来源:遇见人工智能 该来的还是来了,但是那又如何? 这句话是送给苹果的.本以为这个季度不会再有新品发布的苹果,却用一张主打"同学们,来次课外活动吧"的神奇 ...

最新文章

  1. 关于本分类(codeforces-好题系列)
  2. java中如何实现两个值互换
  3. 看下这段程序 ^_^
  4. 我是怎么利用微信做兼职月入1W的
  5. c51单片机led奇数偶数亮_两STM32单片机串口通讯实验
  6. codeforces:812(div2):总结
  7. 初一模拟赛(4.20)
  8. mybatis多产数_freeCodeCamp杰出贡献者–我们如何选择,认可和奖励多产的志愿者
  9. 项目管理、bug管理工具 ---禅道使用流程
  10. python怎么获取word文档的章节_python读取word文档的方法
  11. mysql 主备监控_mysql 主从备份监控slave状态nagios脚本
  12. NWT失败反省:不想办法开展业务,天天想着让别人不能用
  13. 【中级计量经济学】Lecture 9 面板数据模型
  14. ioncube php encode,ioncube加密与解密 php代码
  15. tensorflow安装
  16. 【无标题】用ubuntu通过c语言实现俄罗斯方块小游戏的方案及改进思路
  17. 【HTML】html基本标签-1(文字,列表,图片标签)
  18. PKI 公钥基础设施
  19. JZOJ-senior-5952. 【NOIP2018模拟11.5A组】凯旋而归
  20. 计算机科学发的论文不能检索,中南大学研究生发表论文的规定

热门文章

  1. Netty8# Netty之ByteBuf初探
  2. Drupal 7 自定义页面如何向自定义的主题传参
  3. python爬取皮肤_如何用Python爬取LOL官网全英雄皮肤
  4. ue4 android 插件,基于ijkplayer封装的UE4安卓播放器插件
  5. 一个离职程序员的找工作历程(2021.4.28更新)
  6. 设计师工作经验_得到我作为设计师的第一份工作
  7. java连接mysql lookup_Java数据库连接池lookup用法
  8. 如何注册阿里大于申请签名和短信模板
  9. 爬虫小练习:堆糖图片抓取--爬虫正式学习day1
  10. android单点触摸事件,Android多点触控详解