Python代码量少不是吹的!20行代码就能实现鸡汤智能生成器!

“Don’t think of the overwhelming majority of the impossible.”

“不要去想不可能之事”

“Grew up your bliss and the world.”

“努力赢得自己的幸福和世界”

“what we would end create, creates the ground and you are the one to warm it”

“我们想要结束的创造却造就了大地,唯你抱以温情”

“look and give up in miracles”

“仰望奇迹,放弃幻想”

 

使用马尔科夫链生成文本

使用马尔科夫链生成文本也是采用了相同的理念,努力找到一个词出现在另一个词后面的概率。为了确认这些转换的可能性,我们用一些例句训练模型。

例如,我们使用下面这些句子训练模型:

我喜欢吃苹果(I like to eat apples)。 你吃橘子(You eat oranges)。

从上面这两个训练句子,我们可以总结出“I”(我),“like”(喜欢)和“eat”(吃)总是以相同的顺序出现,而“you”(你)和“eat”(吃)一直连在一起。但是“orange”(橘子)和“apples”(苹果)出现在词汇“eat”(吃)后面的几率是相等的。下面这个转换图表能更好地显示我上面讲的这一堆:

这两个训练句子能够生成两个新的句子,但是情况不总是这样。我用下面这四个句子训练了另一个模型,结果大不相同:

我朋友做出的树莓派在镇上最好(my friend makes the best raspberry pies in town)。 我觉得苹果派最好(i think apple pies are the best pies)。 史蒂夫觉得苹果做出的电脑在世界上最好(steve thinks apple makes the best computers in the world)。 我有两台电脑,它们不是苹果电脑,因为我既不是史蒂夫也不是大款(I own two computers and they’re not apple because I am not steve or rich)。

 

我们不需要计算跟随词出现的概率,因为如果它们出现的概率较高,那么它们会在可能跟随词列表中多次出现。例如,如果我们想另外添加训练句子“我们吃苹果”(‘we eat apples’),词汇“苹果”(‘apples’)已经在两个句子中出现在词汇“吃”(eat)后面,那么它出现的概率就会很高。在该模型的词典中,如果在“吃”(eat)列表中出现两次就属于出现概率较高。

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

另外,在上面的模型词典中还有两个术语:“起始”(START)和“结束”(END),它们表示一个生成的句子的起始词和结束词。

 

用马尔科夫链文本生成器还可以做别的很酷的事情,就是混合不同的文本类型。例如,在我最喜欢的电视剧《瑞克和莫蒂》中,有个角色叫做“亚拉道夫·林肯勒”(Abradolf Lincler)就是用“亚拉伯罕·林肯”和“阿道夫·希特勒”两人的名字混合而成。

你也可以这么操作,把一些名人的名字输入马尔科夫链中,让它生成好玩的混合人物名,(比如…

郭达·斯坦森

尼古拉斯.赵四

甚至你还能更进一步,把一些名人的名言,比如上面说的林肯和希特勒的演讲句子用马尔科夫链混合后生成全新风格的演讲。

马尔科夫链几乎可以应用在所有领域,虽然文本生成并非最有用处的应用,但我确实觉得这项应用很有意思,万一你生产的鸡汤文有朝一日吸引来的粉丝比咪蒙还多呢?

是不是超级简单了,get到了吗?欢迎关注我的博客或者公众号:https://home.cnblogs.com/u/Python1234/ Python交流学习

欢迎加入我的千人交流学习答疑群:125240963

猜你喜欢

转载自www.cnblogs.com/Python1234/p/9111380.html