python编写程序输出诗句_用Python写个会做诗的机器人

2023-10-22 16:31

本文主要是介绍python编写程序输出诗句_用Python写个会做诗的机器人,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通过简单的代码就能实现一个简单的聊天机器人,今天小编就带领大家,利用自然语言处理技术和聊天机器人结合,做一个自动做诗的聊天机器人。

1.原理介绍

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

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

15243603_201904220958211STlq.jpg

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

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

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

15243603_2019042209582124Pu4.jpg

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

2.白话解释LSTM

那么LSTM是如何工作的呢?

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

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

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

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

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

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

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

15243603_2019042209582139ZQO.jpg

3.实战机器人

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

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

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

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

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

15243603_2019042209582141gxH.jpg

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

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

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

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

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

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

下面是部分代码的展示:

15243603_201904220958215btIk.jpg

4. 效果展示

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

15243603_201904220958216lEGZ.jpg

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

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

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

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。

这篇关于python编写程序输出诗句_用Python写个会做诗的机器人的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/262510

相关文章

Python按照24个实用大方向精选的上千种工具库汇总整理

《Python按照24个实用大方向精选的上千种工具库汇总整理》本文整理了Python生态中近千个库,涵盖数据处理、图像处理、网络开发、Web框架、人工智能、科学计算、GUI工具、测试框架、环境管理等多... 目录1、数据处理文本处理特殊文本处理html/XML 解析文件处理配置文件处理文档相关日志管理日期和

Python标准库datetime模块日期和时间数据类型解读

《Python标准库datetime模块日期和时间数据类型解读》文章介绍Python中datetime模块的date、time、datetime类,用于处理日期、时间及日期时间结合体,通过属性获取时间... 目录Datetime常用类日期date类型使用时间 time 类型使用日期和时间的结合体–日期时间(

使用Python开发一个Ditto剪贴板数据导出工具

《使用Python开发一个Ditto剪贴板数据导出工具》在日常工作中,我们经常需要处理大量的剪贴板数据,下面将介绍如何使用Python的wxPython库开发一个图形化工具,实现从Ditto数据库中读... 目录前言运行结果项目需求分析技术选型核心功能实现1. Ditto数据库结构分析2. 数据库自动定位3

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用