关于智能格式化和代码生成的OpenAI API入门读物

2020-07-16 06:03:07

几年前,我开发了一款听写应用程序,旨在解决我对其他听写应用程序最大的不满之一:它们不能处理标点符号。作为一名作家,我梦想着大声说出我的故事,但冷酷的现实是,直到最近,每一个听写应用程序都要求你在所有句子的末尾说“句号”、“问号”或“结束引用”。这就像每次你想要添加标点符号时,从键盘上站起来做一个跳跃千斤顶一样自然。

这导致我创建了一款应用程序,通过使用你在每句话末尾释放的一键输入和一些自然语言处理来简化添加标点符号的过程,以确定它是问题、声明还是对话。这只是一种权宜之计,直到语音听写变得足够智能,可以添加标点符号--谷歌的Live Transcribe和Otter.ai等应用程序最终实现了这一点。然而,他们两人都不知道什么时候用引号加东西。当我决定尝试用听写在24小时内完成NaNoWriMo挑战(在一个月内写出一本5万字的小说)时,我不得不拼凑出自己的小脚本来添加引号和格式化对话框。它很乏味,而且工作得很好,但一点也不优雅。当时我希望有一种更好的方式通过人工智能来做到这一点(我甚至试图制作一个小的ML模型来做到这一点)。进入OpenAI的API。

我尝试使用OpenAI的API做的第一件事是编写一个脚本来简化我用来检测对话框和添加适当标点符号的数百行代码和导入的NLP库。第一个结果让我大吃一惊。

我向API提供了一些如何格式化文本的示例,其中一些文本应该编写为对话框:

输入:正在发生的事情。输出:正在发生什么?输入:钥匙在桌子上,她说。输出:钥匙在桌子上,她说。";";";输入:这很有趣。输出:这很有趣。";";";输入:你要去哪里问阿曼达。输出:这很有趣。";";";";输入:你要去哪里问阿曼达。输出:这很有趣。";";";输入:你要去哪里问阿曼达。输出:这很有趣。";";";";输入:你要去哪里问阿曼达。输出阿曼达问道。";";

输入:孩子们去万圣节派对了,玛妮回答。输出:孩子们去了万圣节派对,玛尼回答。

它了解每个演讲者是谁,在哪里放引号,甚至在什么时候是一个声明或问题。这是我还没有看到任何语音到文本应用程序所做的事情。

从文本中解析对话和问题是您可以使用大量代码和语法规则来完成的事情。但是一些更主观的东西呢?

段落极具挑战性,仅凭语法规则不能告诉你如何将文本拆分成不同的表达方式。但是,如果我给API几个我自己的文本不带和带分段符的例子,它就能很好地计算出何时将文本拆分成单独的想法。

我们从几个例子开始,说明我是如何将文本分成几个段落的:

输入:这不是一条严格的规则,但它有一些有用的解释力。这是否只是一个符合现有数据的理论还有待观察。朱利安在读完这篇文章后打电话给我,鼓励我沿着这些思路做更多的研究。我不愿称我们为朋友。他的生活只有5分钟,你会强烈地意识到,一旦谈话结束,他就会转到一长串谈话对象名单上的下一个名字。我接电话时声音有点沙哑。“嘿,朱利安。”输出:这不是一条苛刻的规则,但它有一些有用的解释力。朱利安在读完这篇文章后打电话给我,鼓励我沿着这条线做更多的研究。我不愿称我们为朋友,这还有待观察。他的生活只有5分钟,你会强烈地意识到,一旦谈话结束,他就会转到一长串谈话对象名单上的下一个名字。我接电话时声音有点沙哑。“嗨,朱利安。”";";";";(我再提供三个与前面的例子类似的例子。)。

这只是API试图弄清楚如何将文本拆分成段落的“第一枪”示例。有了更多的示例,它甚至会变得更好,但实际上,这是一个非常令人印象深刻的示例,说明了API如何甚至可以获得某种程度上的任意规则:

输入:我在树林中赛跑,绕过生锈的垃圾堆,试图找到离开这里的缝隙的路。我的脚碰到了一块半埋着的金属片,我被绊倒了。当我的肘部撞到一辆丰田西里卡的侧视镜上时,有一种冰冷的疼痛。当我把胳膊拉出来的时候,我的皮肤上有玻璃碎片,门上有血迹。该死的。我试着用袖子擦去血迹,但我所做的就是把它涂抹在面板上。我看到楼上的一盏灯穿过树丛亮着。不太好。她一定听到了。输出:我在树林里赛跑,绕过生锈的垃圾堆,试图找到离开这里的缝隙的路。我的脚碰到了一块半埋着的金属片,我被绊倒了。当我的肘部撞到一辆丰田塞利卡的侧视镜上时,有一种冰冷的疼痛,当我把胳膊拉出来的时候,我的皮肤上有玻璃碎片,车门上有血迹。该死的,我试着用袖子擦去血迹,但我所做的就是把它涂在嵌板上。我看到楼上的灯从树丛里亮了起来。不太好。她肯定听到我说的话了。

从听起来多余的角度来看,这是巨大的。段落结构是因作者而异的东西,以及人们如何定义段落-完整的思想、单个动作、瞬间等等。API的美妙之处在于,我只需向它提供几个如何定义段落的示例,它就可以快速地从这些示例中学习。

使用OpenAI的API让我想起了拥有智能手机的头几年。我花了很长时间才意识到,我口袋里有一台相机、一台录音机、一个电视演播室和世界上所有的电子信息。我会看到一些东西,然后忘记我有相机,或者有一个问题,然后忘记答案是一秒钟的方式。人们花了很长时间才真正理解了那个神奇设备的用途。

当我使用OpenAI的API时,这个想法经常出现在我脑海中。例如,如果我需要知道段落中的主要字符,我只需编写几行代码就可以向API显示我想要的内容。

输入:我妹妹采访了我们镇长。主要人物:姐妹行动:采访市长。输入:道格开始将板条箱装到汤姆的卡车后座上。主要人物:道格行动:装载板条箱。输入:黑兹尔,约翰和艾米用生日派对给贝丝带来了惊喜。

输入:Kelly通过对讲机打电话给Bill,告诉他她正在点燃火箭。主要角色:KellyAction:点燃火箭。

如果我想让API在文本段落中给我一个演员和导演的列表,它可以使用这样的脚本来做到这一点。

输入:有一部由道格·利曼(Doug Liman)执导、汤姆·克鲁斯(Tom Cruise)主演的新电影以太空为背景。演员:汤姆·克鲁斯导演:道格·利曼(Doug Liman);输入:昆汀·塔伦蒂诺(Quentin Tarantino)、布拉德·皮特(Brad Pitt)和莱昂纳多·迪卡普里奥(Leonardo DiCaprio)已经拍摄了几部电影。演员:布拉德·皮特(Brad Pitt)、莱昂纳多·迪卡普里奥(Leonardo DiCaprio)导演:昆汀·塔伦蒂诺(Quentin Tarantino)。

如果我想让API格式化地址,这相当简单,它只需要一个示例:

输入:比尔·凯恩,德克萨斯州奥斯汀韦奇街23334号输出:比尔·凯恩,德克萨斯州奥斯汀,韦奇街23334,邮编:78652;#34;";输入:吉尔·汤普森2121好莱坞道伯班克加州91505输出:吉尔·汤普森2121好莱坞道伯班克,CA 91505。

如果API能够提取内容并从几个示例中学习,这意味着它可以接受所有类型的文本,并将其重新格式化为其他内容。如果我想编写一个网站的代码,我可以制作自己的速记,然后将我想要格式化为HTML的文本提供给API。

输入:文本输入表单2占位符电子邮件输出:<;Input id=";Form2";Type=";Text";placeholder=";Email";>;";";";Input:Title Interest Things输出:<;Title>;Interest Things<;/Title>;";";";";输入:段落这些是您可以做的一些有趣的事情。段落,比如通过说话来创建代码。输出:<;p>;这些是您可以做的一些有趣的事情。<;/p>;<;p>;喜欢通过说话来创建代码。<;/p>;";";";

只需上面的几个示例,就能理解我想要在这样的请求中得到什么:

我只用了两分钟就用API创建了一个简单的HTML解释器的自然语言。

让我们让API做一些我们没有训练它去做的事情:

只需几个示例,API就会意识到我们是在使用HTML制作东西。它掌握上下文的能力使API能够在我说“div”和“content”时理解我想要的div元素,并且应该在里面放一个段落和我给它的文本。这太疯狂了。

每当我想要将文本从一种形式更改为另一种形式时,我都会尝试考虑OpenAI API。这甚至可能是将一个想法的文本变成一个更详细的段落,或者把一个无结构的序列变成有意义的东西。它识别模式和理解上下文的能力继续让我感到惊讶。