上一次的聊天机器人,大家关注度非常的高,阅读量破万了(不到20行代码,用Python做一个智能聊天机器人),通过简单的代码就能实现一个简单的聊天机器人,今天小编就带领大家,利用自然语言处理技术和聊天机器人结合,做一个自动做诗的聊天机器人。

1.原理介绍

首先,让机器自动做诗,就需要运用自然语言处理的手段,让机器能够学会理解“诗句”,进而做出我们需要的诗句。如何让机器“理解”诗句呢?我们用到了深度学习中的长短期记忆网络(LSTM)。有点晕,不要急,我们后面会用白话给大家解释。

LSTM是循环神经网络(RNN)的一种变形,RNN能够很好的解决自然语言处理的任务,但是对于长依赖的句子表现却不是很好,例如:

上面的例子中后面使用“was”还是“were”取决于前面的单复数形式,但是由于“was”距离“dog”距离过长,所以RNN并不能够很好的解决这个问题。

为了解决上述的问题,便引入了LSTM,为了更加直观的解释,我这里引入一个不是很恰当的例子:

比如我们正在看一场电影,我们能够通过镜头的切换来了解故事的进展。而且随着故事的发展,我们会知道某些主角的性格,年龄,喜好等等,这些都不会随着镜头的切换而立马被忘掉,这些就是长期记忆,而当故事发生在某个特定的场景下,比如下面喜洋洋的这张图:

通过我们对于这部动漫的长期记忆,我们知道这是喜洋洋在思考,而在这个镜头中,我们利用到了长期记忆中关于“喜洋洋思考动作”的记忆,而在该镜头下需要被用到的长期记忆就被称为“工作记忆”。

2.白话解释LSTM

那么LSTM是如何工作的呢?

1).首先得让LSTM学会遗忘

比如,当一个镜头结束后,LSTM应该忘记该镜头的位置,时间,或者说忘记该镜头的所有信息。但是如果发生某一演员领了盒饭的事情,那么LSTM就应该记住这个人已经领盒饭了,这也跟我们观看影片一样,我们会选择忘记一些记忆,而保留我们需要的记忆。所以LSTM应该有能力知道当有新的镜头输入时,什么该记住,什么该忘记。

2).其次是添加保留机制

当LSTM输入新的镜头信息时,LSTM应该去学习什么样的信息值得使用和保存。然后是根据前面的两条,当有新的镜头输入时,LSTM会遗忘那些不需要的长期记忆,然后学习输入镜头中哪些值得使用,并将这些保存到长期记忆当中。

3).***是需要知道长期记忆的哪些点要被立即使用

比如,我们看到影片当中有个人在写东西,那么我们可能会调用年龄这个长期记忆(小学生可能在写作业,而大人可能再写文案),但是年龄信息跟当前的场景可能不相关。

4).因此LSTM只是学习它需要关注的部分,而不是一次使用所有的记忆。因此LSTM能够很好的解决上述的问题。下图是对于LSTM的一个很形象的展示:

3.实战机器人

下面便是实战的环节,虽然LSTM效果非常出色,但是仍旧需要对于数据的预处理工作,LSTM需要将每个诗句处理成相同的长度,而且需要将汉字转换成为数字形式。那么如何进行预处理呢,主要分为3步 :

读入数据,我们收集了众多的诗词数据

统计每一个字出现的次数,同时以其出现的次数作为每个汉字的id。

在产生批量数据的时候,我们需要将每一个诗句的长度都统一到同样的长度,因此,对于长度不够的句子,我们会以“*”进行填充

所以在***的效果展示的时候,可能在诗句中出现“*”的字样。数据预处理的部分代码如下图所示:

上述的代码中主要完成了下面几步:

1).首先是读入数据,并将句长大于100的进行缩减,删掉100个字符后面的部分。

2).然后在每个句子的开头和结尾加入‘^’和‘$’作为句子的标志。对于句长小于MIN_LENGTH的直接删除

3).***将处理好的诗句,进行字数的统计,统计每个字出现的次数,并按照出现的次数作为每个汉字的id。

对于数据预处理部分的代码,我都进行了注释,方便大家进行理解,对于我们对于数据处理,以及python语句的理解都有极大的帮助。

模型的训练,需要确保电脑中已经配置了tensorflow和numpy库。当模型训练完成后,我们可以直接对于模型进行调用,嵌入到我们的聊天机器人程序中,来实现我们的聊天机器人(对于聊天机器人的介绍,可以参照文末历史文章)。

下面是部分代码的展示:

4. 效果展示

说了这么多,我们来看一些训练完的机器人作诗的效果

在图A中展示了做诗机器人效果,机器人输出“请输入藏头诗提示:”,当我们输入藏头诗提示时,机器人便会做出符合我们要求的藏头诗。

在图B中展示了有“*”字符存在的情况,当然由于中华文化的博大精深,也受制于训练资料的限制,当我们的藏头诗提示中存在没有在训练资料里出现的字符时,机器人便会提示该字符不在字典中,

在如图C中红色标识出来的部分,会处理异常的情况,提示不在字典中!

【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0

python写诗代码_牛逼了,用Python写个会做诗的机器人相关推荐

  1. 牛逼的python代码_牛逼了!Python代码补全利器,提高效率告别996!

    给大家介绍一款专门针对Python的代码自动补全利器: Kite,效果绝佳.它的使用条件很简单,支持多种IDE和操作系统,并且免费使用.支持Windows.Mac.Linux 支持Atom.PyCha ...

  2. 牛逼的python代码_牛逼啊!一个随时随地写Python代码的神器

    现在学Python的人越来越多,很多小伙伴都非常有激情,利用碎片时间随时随地学习Python, 大家知道Python是一门编程语言,但是学语言光看不练是没有用的.最好能编程并运行,有没有什么好的神器可 ...

  3. python find不区分大小写_牛鹭学院:Python基础了解

    本文来自牛鹭学院学员:田雨 python初印象 Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节.类似于PHP和Perl语言. Python 是交互式语言: 在一个 Python ...

  4. python蓝牙编程代码_以编程方式通过python将蓝牙设备绑定到rfcomm

    我用python编写了一个脚本,用于M5Stack Stick C(如raduino)与树莓派之间的串行通信.一切正常.我可以将树莓派中的" X"," Y"或& ...

  5. python爬小说代码_中文编程,用python编写小说网站爬虫

    原标题:中文编程,用python编写小说网站爬虫 作者:乘风龙王 原文:https://zhuanlan.zhihu.com/p/51309019 为保持源码格式, 转载时使用了截图. 原文中的源码块 ...

  6. python新年有趣代码_搞几款由“Python”语言编写的“有趣、恶搞、好玩”的程序代码!...

    下载好向圈APP可以快速联系圈友 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 为提高大家对"Python"编程语言的学习兴趣,今天给大家分享几款有趣的Python程序代 ...

  7. python动态执行代码_第6.6节 Python动态执行小结

    一.    Python动态执行支持通过输入数据流或文件传入Python源代码串,进行编译后执行,可以通过这种方式扩展Python程序的功能: 二.    动态执行方法可能导致恶意攻击,因此使用时需要 ...

  8. java打字游戏代码_牛逼啊!一个随时随地写Python代码的神器

    现在学Python的人越来越多,很多小伙伴都非常有激情.利用碎片时间随时随地学习Python, 大家知道Python是一门编程语言,但是学语言光看不练是没有用的.最好能编程并运行,有没有什么好的神器可 ...

  9. python实现局域网攻击_牛逼了!一行Python代码搭建一个局域网服务器

    不知道大家有没有遇到过这样的情况, 在做项目或者研发的时候,迫切想要将一个文件传输给另一台电脑,却找不到U盘,于是麻烦的通过登陆qq.微信等社交软件 ,或者邮箱等工具进行传输,十分麻烦,让人苦恼. 都 ...

  10. python大鱼吃小鱼程序代码_最近跟导师学Python,熬夜弄了两个晚上写出来个大鱼吃小鱼游戏!...

    在之前学习过pygame的基本知识了,现在该做个小游戏实战一下检测一下自己的所学.小伙伴们需要Python书籍.视频资料,游戏和游戏源码获取可以加群707548179就可以领取 今天用Python来做 ...

最新文章

  1. 使用ASIHTTPRequest 编译提示找不到libxml/HTMLparser.h的解决方法
  2. python哪些类型可以作为迭代器_详解Python迭代和迭代器
  3. 中国环保塑料薄膜行业营销策略分析及投资规划建议报告2021-2027年版
  4. 神策数据CEO桑文锋:精准采集数据,走向智能化分析
  5. golang的mahonia字符集转换工具用法
  6. 「读懂源码系列2」我从 lodash 源码中学到的几个知识点
  7. sql2008 获取表结构说明
  8. 面试 | 程序猿面试,Elasticsearch被坑被虐的体无完肤...
  9. 驱动模块Makefile 编写【原创】
  10. 【图像压缩】基于matlab GUI DCT图像无损压缩【含Matlab源码 726期】
  11. android获取当前显示的view,Android中ViewPager获取当前显示的Fragment
  12. 大麦盒子(domybox)无法进入系统解决方案!【简单几步】
  13. pdf转换软件注册码
  14. 【清橙A1339】JZPLCM(顾昱洲) (树状数组)
  15. 【Web前端】HTML—6.表单标签
  16. 如何使用Adobe Acrobat对PDF文档进行电子签名
  17. 用思维导图赏析老舍话剧著作《茶馆》
  18. Clion安装及相关环境(MinGW和OpenOCD)的配置及利用Clion点亮led灯
  19. JavaWeb学习笔记(5)-B站尚硅谷
  20. 是时候让你的程序有点春节的味道了

热门文章

  1. linux每个进程有4g,32位Linux单进程有4G内存限制
  2. 2022 美亚杯 团体赛AGC部分+资格赛服务器部分 所有服务器部分解题思路
  3. python统计套利_基于python的统计套利实战(四)之策略实现
  4. 服务器如何安装虚拟声卡,虚拟声卡安装方法和使用【图文教程】
  5. vue将图片保存到相册_vue 图片下载到本地,图片保存到本地
  6. G2O和Sliding Window中的Marginalization
  7. 计算机怎么看事件管理,如何打开事件查看器 win7事件查看器打开及使用方法介绍...
  8. dnc开源梦之队2018 开源项目精选集
  9. 商业智能BI财务分析,如何从财务指标定位到业务问题
  10. IE浏览器设置UserAgent