python 随机名言_如何用简易代码自动生成经典语录

“不要空想不可能的事情”

“增加自己的幸福感”

“我们最终将创造地面,并呵护它”

“保持希望并学会放弃奇迹”

上面所有引号内的句子都是由一段代码生成的,使用的程序由少于20行的python代码组成。

当涉及到生成自然语言时,人们通常会想到使用高级数学的高级人工智能系统,然而,这并不总是正确的。在本文中,我将使用马尔科夫链和一个鸡汤语录数据集来生成新的鸡汤文字。

马尔科夫链

马尔可夫链是一种仅基于前一事件来预测下一事件的随机模型。拿猫咪的状态切换来简单举例:我有一只猫咪,她不是吃、睡觉就是在玩玩具。虽然她大部分时间是睡觉,不过偶尔会醒来吃点东西,通常情况下她吃完东西后会精力特别旺盛的玩玩具,之后继续回去睡觉或者接着吃东西。

我家猫咪的状态可以很容易地用马尔可夫链建模,因为她根据她以前的状态决定接下来做什么。她不太可能醒来后马上玩玩具,但是饭后非常可能。这些状态转换也可以在状态转换图中进行说明。

每个圆圈都是一个状态,箭头指向下一个状态,每个箭头旁边的数字是由一个状态转换到另一个状态的概率。正如您所看到的,转换的概率完全基于之前的状态。

使用马尔科夫链生成文本

使用马尔科夫链生成文本运用了相同的想法,并尝试计算出一个词在另一个词之后出现的概率。 为了确定转换的概率,我们用一些语句例子来训练模型。例如:

我喜欢吃苹果。

你吃橘子。

仅从这些训练数据我们可以得出结论,“我”、“喜欢”和“吃”总是保持这样的排列顺序,而且“你”和“吃”总放一起;然而,“橘子”或者“苹果”出现在“吃”后面的几率是一样的。下面的转换图能更好的阐述我所说的。

这两个训练句子能够生成两个新的语句,但是情况并非总是如此。我用下面的4个句子训练了另一个模型,然而结果非常不同。

我的朋友在镇上做最好吃的覆盆子派。

我认为苹果派是最好吃的派。

史蒂夫认为苹果是世界上最好的电脑。

我有两台电脑,但都不是苹果电脑,因为我既不是史蒂夫也不富裕。

由这四句话训练的模型的转换图要大得多了。

尽管该图看上去与典型的马尔科夫链转换图非常不同,但其背后的主要思想是相同的。路径从“开始”节点开始,随机选择下个单词直到“结束”节点。每个单词的概率由连接的宽度表示。

即使只训练了四个句子,这个模型也可以生成上百个不同的句子。

代码

生成器的代码非常简单,除了Python的随机模块之外,不需要任何额外的模块或库。它由两部分组成,一部分是训练,另一部分是生成。

训练

这些训练代码构造了我们稍后将用来生成语录的模型。我把一个字典作为模型;它里面的单词作为关键字,并把潜在的后面的单词作为列表里对应的值。例如,前两行训练过的模型的字典:“我喜欢吃桔子”,“你吃苹果”看起来像下面这样:

{'START': ['i', 'you'], 'i': ['like'], 'like': ['to'], 'to': ['eat'], 'you': ['eat'], 'eat': ['apples', 'oranges'], 'END': ['apples', 'oranges']}

我们不需要计算下一个单词出现的概率,因为如果它们出现的概率更高,那么它们将会在潜在的单词列表中出现好几次。例如,如果我们添加额外的训练语句“我们吃苹果”,那么“苹果”一词就出现在“吃”的后面两次,因此概率更高。模型字典中就出现了更高的概率。

{'START': ['i', 'we', 'you'], 'i': ['like'], 'like': ['to'], 'to': ['eat'], 'you': ['eat'], 'we': ['eat'], 'eat': ['apples', 'oranges', 'apples'], 'END': ['apples', 'oranges', 'apples']}

此外,在上面的模型字典中还有两个额外的项,“START”和“END”,它们表示生成的句子或语录的开始词和结束词。

1 for linein dataset_file:

2 line = line.lower().split()

3for i, wordin enumerate(line):

4 if i== len(line)-1:

5model['END'] = model.get('END', []) + [word

6 else:

7 if i== 0:

生成

生成器由一个循环组成。它开始随机的选择一个开始词并添加到一个列表中,之后在字典中搜索包含潜在的下个单词的列表,并随机选择一个添加到上个列表,它会继续选择潜在的下个单词直到碰到结束词,之后停止循环,并输出生成的单词序列或者“语录”。

1import random

2

3generated = []

4 while True:

5 if not generated:

6 words = model['START']

7 elif generated[-1]in model['END']:

8 break

我已经使用马尔科夫链生成了语录,当它作为文本生成器应用到应用程序时,可以提供任意的输入,并将会生成相似的文本。

使用马尔可夫链文本生成器还可以做的另一件很酷的事情,那就是混合不同类型的文本。 比如在我最喜欢的电视节目瑞克和莫蒂中,有一个叫阿布拉多夫·林肯的人物,他是亚伯拉罕·林肯和阿道夫·希特勒的混合体。你可以通过将两位领导人的演讲作为马尔可夫链文本生成器的训练数据,从而实现了这个人物。马尔可夫链是一种令人难以置信的东西,它在所有的应用程序中都有大量的应用。文本生成并不是它最有用的应用程序,但我认为必须是最有趣的应用之一。

本文由阿里云云栖社区组织翻译。

文章原标题《How I generated inspirational quotes with less than 20 lines of python code》

作者:Ramtin Alami

译者:奥特曼,审校:袁虎。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

链家笔试2

链家笔试2 把m升水倒入n个相同的杯子(假设容器足够大)&#xff0c;允许有的容器是空的&#xff0c;共有多少种不同的倒法&#xff1f;&#xff08;用k表示&#xff09;5 1 1 和1 5 1 和1 1 5 是同一种倒法 输入&#xff1a; 第一行是测试数据的数目 x(0 < x < 20),以下每…

线性表、顺序表

文章目录线性表、顺序表线性表概念线性结构特点线性表概念两种分类顺序表代码遍历查找插入删除逆置链表&#xff08;用指针实现变长的先行存储结构&#xff09;特点习题线性表、顺序表 线性表概念 线性结构特点 存在唯一一个被称为“第一个”的数据元素存在唯一一个被称为“最…

lte 在网络覆盖方面应该注意哪些问题_LTE弱覆盖问题分析与优化

LTE弱覆盖问题分析与优化摘要&#xff1a;本文结合现网实际工作情况介绍了LTE弱覆盖的发现手段&#xff0c;LTE弱覆盖的成因&#xff0c;以及LTE弱覆盖的解决方法&#xff0c;总结相关经验&#xff0c;为LTE的规划建设提供参考依据。关键字&#xff1a;LTE弱覆盖、MR数据、站点…

KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(33)

接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(32) 上一回了开始对于drm_gem_handle_create_tail函数的解析,对于函数的注释和第一段代码进行了讲解,本回开始对于drm_gem_handle_create_tail函数的核心功能代码进行解析。为了便于理解,再次贴出drm…

Linux 5.7 将支持国产 RISC-V 芯片 K210

这是转载的一篇文章&#xff0c;文章主要内容是Linux合入了一个国产芯片k210的代码&#xff0c;虽然这个芯片不是很强大&#xff0c;但是对于学习来说非常有意义&#xff0c;而且&#xff0c;还有人在这个开发板上移植了Linux 0.11。今天早上我在查阅 Linux 内核邮件列表的时候…

动态路由选择协议(二)距离矢量路由选择协议

大多数的路由选择协议属于下面二者之一&#xff1a; 距离矢量&#xff08;distance vector&#xff09;和链路状态&#xff08;link state&#xff09;。 本篇学习的是距离矢量路由选择协议的基础。 大多数的距离矢量算法是R.E.Bellman、L.R.Ford和D.R.Fulkerson所做的工作为基…

我和蓝牙BT,BLE有一腿

你好&#xff0c;很不幸&#xff0c;你被一个标题骗了进来&#xff0c;可能我以后还会骗你&#xff0c;我这篇文章主要是写蓝牙相关的&#xff0c;不会涉及技术细节&#xff0c;主要是总结一些概念&#xff0c;这些概念会帮助你了解蓝牙知识&#xff0c;帮助你在面试或者聊天的…

Python之路,week03 - Python基础3

本节内容 函数与函数式编程函数式编程之参数详解局部变量与全局变量作用域嵌套函数 递归函数式编程介绍高阶函数内置函数1. 函数与函数式编程 1.面向对象&#xff1a;华山派---》类---》class 2.面向过程&#xff1a;少林派---》过程---》def 3.函数式编程&#xff1a;逍遥派--…

循环链表、双链表

文章目录循环链表、双链表双链表插入删除单循环链表双循环链表习题线性表实现方法比较循环链表、双链表 双链表 插入 删除 单循环链表 双循环链表 习题 线性表实现方法比较

[芦半山]Binder的异常机制

文中代码分析基于Android 10.0 (Q)两个进程之间若是要进行Binder通信&#xff0c;那么发起通信的一端我们就称它为Client进程。Client进程调用每一个代理对象的方法&#xff0c;本质上都是一次跨进程通信。如果这个方法是同步方法&#xff08;非oneway修饰&#xff09;&#xf…

bufg和bufgp_如何将自己写的verilog模块封装成IP核(一)

平台与材料一个写好的工程&#xff0c;综合通过&#xff0c;不用布局布线&#xff0c;ISE或Vivado皆可。如果是ISE&#xff0c;需要在properties里取消选中 iobuf 。这样就只能被当做内部模块调用了。Vivado步骤打开Vivado&#xff0c;创建一个工程Tools -> Create or packa…

消息中间件核心实体(1)

接上一篇《消息中间件核心实体(0)》&#xff0c;这一篇继续介绍消息中间件中的一些实体。 上一篇主要是Message、Topic、TopicMeta和Queue这样最基础的实体&#xff0c;这几篇介绍一些发送和消费的过程中会涉及到的实体和组件。 1. 发送 1.1 增强Message属性 Message一般只包含…

sklearn(2

算法库顶层设计 SKLEARN监督学习模块 近邻算法 neighbors支持向量机SVM岭回归 kernal_ridge判别分析discriminant_analysis广义线性模型linear_model集成方法ensemble决策树tree朴素贝叶斯naive_bayes交叉分解cross_decompostition高斯过程gaussian_process多层神经网络neural…

sox处理mp3_SoX 音频处理工具使用方法

一、简介SoX 可以读取和写入常见格式的音频文件&#xff0c;并在此过程中选择性的加入一些声音效果。它可以组合多个输入源及合成音效&#xff0c;在许多系统上也可以作为音频播放器或多轨录音机使用。SoX 工具在大部分 Linux 系统上都可以直接通过软件包管理器安装(如sudo apt…

该死的装修

周末了&#xff0c;没有写技术文~因为最近的新房子需要装修&#xff0c;谈了几个装修公司&#xff0c;不知道为什么&#xff0c;我对装修这个事情非常抵触&#xff0c;繁琐的事情太多了&#xff0c;还没有装修&#xff0c;我就觉得有很多事情要斗争。因为家里有小孩&#xff0c…

SKLEARN模型选择

数据集划分方法 K折交叉验证法 将全部训练集S分成k个不相交的子集&#xff0c;假设S中的训练样例子数为m&#xff0c;那么每一个子集有m/k个训练样例&#xff0c;相应子集称作{s1,s2……sk}每次从分好的子集里面&#xff0c;拿一个作为测试集&#xff0c;其他k-1作为训练集在k…

SpringBoot(十) :邮件服务

原文出处&#xff1a; 纯洁的微笑 springboot仍然在狂速发展&#xff0c;才五个多月没有关注&#xff0c;现在看官网已经到1.5.3.RELEASE版本了。准备慢慢在写写springboot相关的文章&#xff0c;本篇文章使用springboot最新版本1.5.3进行开发。 发送邮件应该是网站的必备功能之…

python中order函数_order by排序

作者Toby&#xff0c;持牌照消费金融模型经理&#xff0c;发明国家算法专利,国内最大医药数据中心数据挖掘部门负责人&#xff01;和重庆儿科医院&#xff0c;中科院教授&#xff0c;赛柏蓝保持慢病数据挖掘项目合作&#xff01;清华大学&#xff0c;百度&#xff0c;腾讯&…

被该死的Openssl编译嘲讽了一个下午

昨晚比较尴尬&#xff0c;下班的时候已经很晚了&#xff0c;到半路突然想起来没有带钥匙回去&#xff0c;赶紧折返回公司拿钥匙&#xff0c;在已经很晚的路上我们又多花费了20分钟&#xff0c;到家已经挺晚了&#xff0c;具体多少点我都不好意思说&#xff0c;我要是说出来&…

JavaScript中本地对象、内置对象和宿主对象

http://www.jianshu.com/p/a52e6e183427 http://blog.csdn.net/weiyastory/article/details/52837466 http://www.cnblogs.com/qigang/p/3520974.html 在ECMAScript中&#xff0c;所有对象并非同等创建的。 一般来说&#xff0c;可以创建并使用的对象有3种&#xff1a;本地对象…