最近,我使用了一台接受过奇幻小说培训的人工智能,为大约1000名读者生成了自定义故事。这些故事非常奇特,它们附带了地图(地图!),它们看起来是这样的:
天哪,我刚刚在邮件中收到的故事,是@robinsLoan的人工智能程序根据我的兴趣生成的,简直是令人愉快的。看看这张漂亮的第一页。pic.twitter.com/3qXzrde20Oa。
--Dan Cohen(@dancohen)2019年6月8日。
在这里,我想分享一些可能对其他从事类似项目的人和/或想象他们可能会这样做的人有用的笔记。
我要补充的是,我可能会推出另一个与AI相邻的产品,就像这样,最好的(只有?)。听到这样的事情的方法是注册我的时事通讯,你可以在这页的顶部或底部做这件事。
好的-首先我要学哲学,然后是技术。如果你愿意,你可以跳到前面去!
老实说,我认为这个项目的关键不是人工智能,而是论文。
我很高兴发现了Lob,这是一项允许您使用代码打印和邮寄东西的服务。这些东西是怎么印的?它们是从哪里寄来的?我不知道,这有点令人不安,但也有点神奇。我是说,这个功能-
响应=LOB。信件。创建({Description:";Letter for#{Purchase[";Email";]}";Letter for#{Purchase[";Ship_to_Name";]#etc},发件人:{Name:";流星年份";#etc},文件:PDF_Name,Double_Side:True,mail_type:";USPS_FIRST_CLASS";},{";等价性-密钥";=>;购买[";电子邮件";]})。
-邮寄一封信!大约一美元!太疯狂了!
我为什么要印刷和邮寄这些故事?毕竟,我本可以在网络上创建一个免费访问的任务生成器。一系列提示;地图;人工智能的喷射。
人们可能已经找到了打开页面的方法,并对出现的内容笑了一会儿。截图,贴在网上。然后:转到下一个小玩意儿!一点也不缺。也许你自己做了一些这样的小玩意儿。你可能知道这种感觉。
相比之下,因为这些故事是以实物形式传递的,所以我在人们的前院里有信件的照片。在他们的房子里。带着他们的狗。
我很好奇,所以打开了外面的神秘信封。里面有一张地图!IT@robinsLoan流星年人工智能(神经网络?)。冒险。不包括好奇的狗。pic.twitter.com/ozdrG6hvMW。
-Jonathan Fly(@jonathanfly)2019年6月8日。
我最初被AI语言模型所吸引,是因为它们向我展示了有一种奇怪而难以形容的味道的句子。这就像作为第二语言的英语,除了第一种语言不是西班牙语或瑞典语,而是,我不知道,是火星语。对于喜欢文字的人来说,喜欢句子怪异和/或美丽和/或意想不到的话,这显然很有吸引力。
但是,如果这就是吸引力,那么挑战就是让人们真正阅读这些句子。不只是欣赏它的框架,也不只是对它的技术点头。
遇到这些追寻,读者的灵魂会不会颤抖?他们的眼睛是否含着泪水,模糊了文字?呃,没有。但是他们中的一些人确实花了一些时间在他们的打印输出上。对我来说,这是至关重要的,没有商量余地。“我知道你在那里做了什么”是稀粥。我在这里是为了让人们阅读一些东西。
我从@robinsLoan发起的人工智能任务充满了奇怪和奇妙的东西。我最喜欢的是:芬里斯是一个被割裂的国王,一个侏儒,而不是一个侏儒……我也喜欢那只没有角的独角兽,那是一个胸前画着角的男人……的确是非常好的作品。pic.twitter.com/DoUn5FlZ3E。
-保罗·F·奥尔森(@pfolson)2019年6月10日。
更新:2019年10月,我在流氓般的庆祝活动上做了一次关于这些技术的演讲。录音提供了一种很好的方式来获取这些信息,特别强调人工智能生成的语言的质量。
您可以在此处查看存档的参与邀请函。它引诱了大约1000人花几美元在谷歌上填写表格,上面写着他们任务领导人的名字,他们的任务探索者寻找的物品的种类,在路上遇到的生物的种类-你知道,任务的要领!。
使用瑞安·盖伊(Ryan Guy)出色的奇幻地图生成器(Fantasy Map Generator)代码,我粗制滥造出了几千张地图,每一张都不同,但/也与上面的非常相似。(而且,让我们做一个真正的…。这些地图是这次展览的亮点。你现在可以停止阅读了。)。
地名都来自一个微小的神经网络,训练对象是从世界历史中挑选出的真实地名。现在查看输入文件,我看到我使用了英格兰、意大利、法国、丹麦、日本和古罗马的城镇列表。神经网络可以起到搅拌器的作用,以一种吸引人的方式将结构和音素混合在一起。他们真的,真的很会记名字!
接下来,下载Quest设计表回复。使用Ruby脚本,每个读者都被分配了一张地图,地图上的地名与他们的回答结合在一起,生成了一个“故事骨架”,我可以将其输入到AI文本生成器中。
我需要在这里稍作停顿,了解一下背景情况。我使用的文本生成器是GPT-2,这是旧金山的OpenAI开发的一个强大的语言模型。GPT-2最初是针对来自网络的几千兆字节的文本进行训练的。我在几百兆字节的奇幻小说上继续训练--“微调”模型。我个人的GPT-2现在非常坚定地认为,大多数句子应该是关于阴暗的看守和厌倦道路的护林员。(我并不反对。)。
GPT-2的代码为您提供了提供“上下文”的选项。在要求模型生成文本之前,您可以输入一系列字符来基本上确定故事中发生的事情。如果您这样做了,GPT-2将尽职尽责地参考该上下文中包含的名称、地点以及在某种程度上包含的情况。它并不是完全一致的--任何人类作家都可以做得更好--但到目前为止,这是一种完全逃避人工智能语言模型的能力。
这个背景概念是任务生成过程中的关键。我会在从GPT-2中获取文本和从故事框架中输入提示之间交替-实际上,引导GPT-2沿着特定的路径前进。
从单个读者的地图和表单生成一个故事框架的Ruby代码如下所示:
Prompt";#{format_for_start(Survey[:group])}在#{City1}开始他们的任务,这是一个以##34;,3 Prompt&34;闻名的城市。这场击败黑魔王的任务由#{Survey[:Leader]}领导,他&34;,2 Prompt";探索者寻找#{Survey[:Seek]},这是";,3 Prompt";他们本来打算出行#{Survey[:Travel]},但不幸的是,在前往#{City2}的路上,却遇到了#{Survey[:邂逅]}。探索者穿越到名为#{Country 1}的国家,以#{Country 1}闻名,在那里,在#{Country 1},黑魔王发现了他们。黑魔王残酷地说,他们的任务失败是因为探索者只想要#{调查[:欲望]}吗?还是因为它,2个提示,#34;{调查[:领袖]}&39;最后的想法是";,1个提示&34;世界是宁静的。";,1,&34;";
如果我的过程中有任何部分甚至有点新奇或有趣,那就是这里,所以我想停下来指出几点。
首先:我可以用提示文本后面的数字指定我想要的句子数量。这是一个至关重要的艺术控制!GPT-2生成固定长度的序列;您不能要求它“请只有两句话”。但是,您可以选择固定长度的序列,自己将其拆分成句子(简单地按句号拆分非常有用),然后只使用您想要的数量。
第二:注意我在提示符末尾使用的词语。我算不上是一个人工智能的窃窃私语者,但我确实认为我已经学到了一点如何将语言模型推向有趣的方向。一般来说,这些系统只满足于…。出去逛逛。他们喜欢描述一个场景,然后重新描述它,然后再描述它,而不是用转折或转折来推进情节。(为他们辩护:他们不知道什么是阴谋,不知道什么是转折,也不知道什么是转折。)。请注意,在上面的第四个提示中,“但是,不幸的是,”产生了可靠的有趣结果。您可以看到,我几乎所有的提示都是这样“设置”GPT-2的。(与之形成对比的是,这个模板的另一个版本没有那些指导性的词语,产生的故事明显没有那么“进行中”。)。
就在我摆弄这些提示的时候,我的朋友丹提出了一个想法:如果GPT-2收到的文本和读者读到的文本有时不同会怎么样?在上面的例子中,发生的情况是GPT-2看到了一行“the world was silent”,这将影响它生成的文本;但是,没有向读者显示“the world was silent”。相反,读者看到的是…。没什么。空字符串。所以读者只能看到GPT-2对“世界是安静的”的回应,实际上是这样的。
有一阵子,他觉得自己听到了远处一首古老的情歌。
我觉得那真的很可爱!没有必要在这些台词的开头加上“世界是安静的”;他们自己传达了这一点。这种向GPT-2显示您对读者隐藏的文本的技术是告诉系统您想要什么的一种偷偷摸摸的方式。这是隐藏的议程,云后的月亮。我认为它可能非常强大,但/我在这里只触及了皮毛。
一对小偷在埃斯城开始了他们的探险,这座城市以|3闻名于世。这次击败黑魔王的探险是由芬里斯·图斯克领导的,|2探索者们寻找一个丢失的魔咒,|3他们打算快速旅行,但不幸的是,|1然后,在通往罗德·赫利的路上,他们遇到了一只麋鹿。探索者越境进入一个叫做哈格罗博努的国家,这个国家因黑魔王在哈格罗博努发现了他们而闻名于世。黑魔王残酷地|2他们的任务失败是因为探索者只想要和平吗?还是因为|2芬里斯·图斯克(Fenris Tusk)最后的想法是|1世界是宁静的。|1|。
在我为每个阅读器生成了这些文件中的一个之后,我如何使用它呢?
Python脚本将文件的第一个提示符作为上下文提供给GPT-2,然后要求它提供大量文本。接下来,它对文本进行大量过滤:如上所述,截短到所需的句子数量;拒绝不可靠的(例如,如果它包含字符串“www”或“http”);重要的是,检查我自己的写作中永远不会用到的单词。(为此,我使用了Darius Kazemi的单词过滤器,其中包含了我选择的其他单词和短语。如果您正在使用语言模型生成将显示给除您之外的其他人的文本,则必须包括如下步骤。对我来说,重要的是生成一堆故事,寻找场景,甚至是暗示~我发现了一些令人不快或令人不安的东西,然后添加过滤器来拒绝这类内容。股票词汇过滤器不可能捕捉到所有的信息,我也不会想象到这一切,只是坐在那里投机。我必须调查一下产量。)。
当Python脚本拥有通过所有这些测试的文本时,它将(1)原始提示、(2)响应生成的文本和(3)下一个提示返回到GPT-2,所有这些都连接在一起。通过这种方式,上下文不断增长,始终混合着读者提供的提示和GTP-2自己的“想象力”,因此两者都可以在故事展开时影响故事。
完成的任务被存放到一个纯文本文件中,另一个Ruby脚本将其转换为PDF,再由另一个Ruby脚本发送到Lob进行打印和邮寄。
它终于来了!一个AI生成的虚构任务和@robinsLoan自动生成的地图!看看那些埃舍尔式的峡湾。看看他们和院长:https://t.co/DfNbteBfee我只是填了一张表格,剩下的人工智能就做了,😍-Lib风格。下面是一些精选的代码片段,更多的内容在线程中。pic.twitter.com/mY7EKUcxqU。
-Becki Lee(@omgbeckilee)2019年6月11日。
让我们想象一下,十年后,名为GPT-2000的超级强大的语言模型可以独立创作出一本完整的奇幻小说。它的工作也很称职!剧情很酷,人物也很有趣,而且经常会有一句非常漂亮的句子。
符合这些要求的奇幻小说不在少数。事实上,已经有比(几乎)任何人都能读到的更多的书了。它们非常便宜,甚至,如果你可以使用公共图书馆,甚至是免费的。所以,这项技术的潜力并不是“终于!有什么好读的!“。
坐在这里看着我生成的这本任务故事目录是一件很奇怪的事情。有一千多本,我永远不会全部读完的。当我只想读一本的时候,我该怎么选择呢?当然是随机的。还能怎么做?
现在,让我们假设这个目录不仅是故事,而且是GPT-2000的完整奇幻小说,一千本,每一本都是全新的,从来没有人读过!当我考虑这种可能性时,我问自己:这种感觉是一种慷慨的感觉-就像图书馆里藏书丰富的幻想过道-还是…。还有别的事吗?我想可能是目录让人感觉不堪重负,或者麻木,甚至令人毛骨悚然。
比方说我想读一本GPT-2000的小说。我要像以前一样随机选择一个文件吗?我会是唯一读过那本小说的人,永远不会。如果它很棒,我就没有人可以谈论它了。如果它很棒,就在它下面的那本小说可能会更好,但我永远不会知道。
阅读语言模型产生的文本洪流,意识到其中有多少是伟大的-当然,不是整个小说的价值,甚至不是整个故事的价值,而是句子和段落的价值;它们很酷,很复杂,很令人愉悦-然后看到那些文本消失了,滚动到人们的遗忘中,取而代之的是更多同样充满伟大大理石的文本,你意识到:伟大的语言并不缺乏。但是伟大的语言并不能造就伟大的故事。这根本不是一个故事的意义所在。
我很高兴这场对抗黑魔王的任务只是一场模拟。天气很冷,而且闻起来很难闻。@robinsLoan pic.twitter.com/fo9Jf4AX6L。
-Velocipede先生(@mrvelocipede)2019年6月10日。
-但很明显,页面上最好的东西,让它发光的东西,是一个人提供的部分。
因为无论GPT-2及其分支变得多么有能力,使它们的输出值得我们关注的是。