图片来源:unsplash.com 摄影:Thomas Lefebvre
关于该算法如何与提供的参考代码一起使用,请参阅此逐步指南。
使计算机生成的文本模仿人类言语是令人着迷的,虽然生成一些语义通顺的文本并不困难,但是其过程一定很有趣。马尔科夫链就是一种用来生成文本的方法。它的工作原理是根据历史文本生成新的文本,其中邻近单词(或单词组)的原始排序用于生成有意义的句子。
真正有趣的是,你可以基于一个人以前的文字,生成一段和这个人说话方式相似的句子。 或者,您可以合并来自两个不同人的文本并获得混合风格的文本。
下面,以两位伟大总统的演讲稿为例,进行具体的说明:
巴特勒和奥巴马
图片来源:screentv.com
我使用奥巴马的演讲文本和巴特勒的台词对我的马尔科夫链模型进行训练,其生成的文本如下所示:
“我可以在北卡罗来纳州烧我的母亲给我们一个伟大的夜晚计划。”
“所以向前走,我相信我们可以在他们的教堂里制造炸弹。”
“查理,我父亲每次进入情况室都会长大。”
“这场运动必须是弹道式的。”
对于更多技术性的解释, 你可以在网上找到大量的相关内容。 一般情况,马尔科夫链是一种算法,用于根据历史文本从加权单词列表中产生新的结果。 此处马尔科夫链这个概念更加抽象,实际应用中,在文本生成中,它使用历史文本 ,将其分割成单个单词(或单词集),然后随机选择一个单词,之后基于之前选择的单词序列随机选择一个相似的单词。
例如:
上面的示例中显示了:原始文本(A)、生成单词字典(B)以及从随机选择的单词生成的示例文本(C),其中所选单词用红色突出显示。 括号中的数字表示该单词在原始单词中的出现次数。
这不仅适用于文本(其中最流行的应用之一就是在智能手机中进行文本预测),他还可以被应用在任何基于过去信息和给定状态下来预测下一步信息的场景中。例如,你可以编写一个股票市场波动预测模型(例如过去30天的每日变化百分比),然后用它来查看历史上可能的第二天结果是什么(只是举个例子,我很怀疑它的有效性)。
我一直想建立一个文本生成器,因为它是一个非常棒的方式,可以用一个非常便宜的快捷方式来查看如何模仿智能。 你会看到下面的算法,它非常简单。 另一个事实是,就像上面的例子一样,你可以用它来混合来自两个不同人的“声音”并查看结果。
用马尔科夫链生成文本有两个阶段。 首先是“词典构建阶段”,其中包括收集历史文本,然后生成一个词典,其中,键为给定句子中的词,值为该词之后紧邻的那个词。
在这里,您可以看到原始句子被分解成单词,并将随后的单词与计数器一起包括在内以指示出现的次数。 请注意,句号也包括在内。
第二个是执行,你从一个给定的单词开始,然后用这个单词以概率的方式看下一个单词是什么。
例如:
遍历字典以生成文本
你不能从任何的随机词开始——如果你这样做,那么你会得到这样的句子: “ate the cat”。 你应该记录每个句子的首个单词以使事情简化,于是你会得到这样的结果:“John ate the cat” 。
不要忽略标点符号 ——如果你删除了标点符号,你会得到这样的句子:“The dog barked at John cat”。相反,保留标点符号,你才更有可能生成一个更加真实的句子 : “The dog barked at John’s ca”。
以句号结尾——当你从一个单词开始,然后找到下一个单词,再找到下一个单词……你可以继续下去,直到你达到指定的长度,但是你最终会在这个句子中间停下来,比如:“The cat ate John’s”。相反,当你可以遇到一个句号的时候便停止(这也是不删除标点符号的另一个理由) , 例如:“The cat ate John’s boots”。
我使用过不同的文本,包括艾迪·墨菲的“单口相声”文稿、唐纳德特朗普推文、奥巴马演讲和巴勒特的剧本。你可以在下面的网址下载他们:
https://github.com/pub12/MarkovText
完全可以使用上述的任意一个素材来生成我们的字典,但你还可以混合使用两个素材(例如:奥巴马的和巴勒特的),创建一个字典文件。 然后,当你遍历整个字典的时候,你可以获得这两份文本的信息。
确保您可以平衡文本很重要 。例如,如果你有奥巴马的8000份文本而只有艾迪·墨菲的1000份文本,那么你可能会看到更多来自奥巴马演讲稿的单词。当然,当你建立词典时,你可以人为地为那些数量较少的文本素材设置权重,以平衡各个训练素材。首先,这并不完美 。当你创建你自己的模型的时候,你会看到有些文本都是一些莫名其妙的句子。训练的素材越多,你的模型才越有用。其次,在词典中使用单个单词没有太大的用处 , 你应该使用2-3个单词组,实际数量取决于您有多少历史文本。
你可以在下面的网址中找到本文涉及的所有源代码:
https://github.com/pub12/MarkovText
翻译:Sylvia 王贝贝
审校:奔跑的笤帚把子
编辑:Yiri
原文地址:https://hackernoon.com/automated-text-generator-using-markov-chain-de999a41e047
关注集智AI学园公众号
获取更多更有趣的AI教程吧!
搜索微信公众号:swarmAI
集智AI学园QQ群:426390994
学园网站:campus.swarma.org
商务合作|zhangqian@swarma.org
投稿转载|wangjiannan@swarma.org