在黑客新闻上发帖就像一盒巧克力-你永远不知道你会得到什么。我从2017年开始提交,从来没有超过一分。所以我停止了尝试。
一个月前,我访问了OpenAI API。修修补补十分钟后,我有了一个想法:如果我能让它为我的博客帖子写出好的黑客新闻标题会怎么样?我很快查找了最喜欢的帖子,用通俗易懂的英语设计了提示符,并生成了我的第一个标题。看起来很奇怪。我甚至有几分钟怀疑它是否值得分享。但我很好奇,所以我闭上眼睛,点击“提交”。
这条帖子在一天内获得了229分和126条评论,登上了月球。着迷了,我继续生成标题(你会怎么做?)。在三周的时间里,我五次登上头版,获得1054个好评,有37000人访问我的网站。
以下是我所学到的所有知识:使用OpenAI API构建黑客新闻帖子标题生成器,设计GPT-3提示,以及如何将GPT-3应用于从销售电子邮件到SEO优化的博客帖子等各种问题。在这篇文章的最后,我介绍了GPT-3的更广泛的影响,这些影响在使用该工具一个月后才变得明显。如果你是一名企业家或投资者,想要了解这项技术将带来的变化,你可以在那里阅读我的猜测。
如果你不知道我在说什么,请先在Gwern的帖子中阅读更多关于GPT-3的信息,或者查看OpenAI的网站上的演示视频。在我的工作中,我假设您已经对API有了一些基本的了解。
10月28日更新:在我发布草案后,23人询问如何应用GPT-3来解决他们的问题。为了帮助他们开始使用OpenAI API,我开始构建第一个GPT-3课程,该课程涵盖了我学到的所有内容-从用例到提示设计。如果你感兴趣,请在这里给我发电子邮件。
在我有了HN书目应用程序的想法后,我需要了解如何使用GPT-3来做到这一点。因为没有解决这个问题的教程,所以我去操场开始实验。
首先,我想看看我是否能让GPT-3生成引人入胜的帖子标题。要做到这一点,我需要两样东西:
我继续搜索有史以来最受欢迎的HN帖子。几分钟后,我就会看到一个包含链接列表的Algolia页面。但在浏览了一下之后,我发现提高票数是行不通的。它们大多是新闻,不能很好地反映社区所看重的内容。
失望的是,我放弃了向上的票数作为衡量标准。我需要一些能描述人们从帖子中获得的价值的东西。就像是..。书签?
我很快就查到了最受欢迎的HN帖子。这个想法很简单:人们不会给新闻加书签。他们喜欢以后想要探索的东西。
下一步是从列表中抓取数据,插入操场,写出清晰简洁的提示。
我实际上是从党人的评论中获取数据,而不是从最初的帖子中获取数据;他的列表是一个全球性的列表。
编写API的最佳方法是编写一个直接而直接的任务描述,就像您将此问题委托给人工助理时所做的那样。
为黑客新闻生成病毒式标题(https://news.ycombinator.com/)帖子。这些标题必须具有挑衅性,并激励用户点击它们。
在数据方面,我需要稍微清理一下列表,去掉ID之类的无关紧要的东西,并选择最多五个标题作为样本-OpenAI团队建议选择三到五个标题最适合文本生成。如果您向API提供更多的示例,它会拾取错误的意图并生成不相关的完成。
在Google Sheet工作的几分钟内,清理工作就完成了,我有了有史以来最受欢迎的HN帖子标题的数据集。我整理好我的第一个提示符,然后单击“生成”。
第一次完成的情况并不令人乐观。书目列表有太多的问答HN,GPT-3按照模式挑选问题:
为了解决这个问题,我从数据集中删除了一半的Ask HN,并开始修补。
如果有一件关于GPT-3的事情我可以告诉别人的话,那就是从第一次尝试就能得到完美的完成是一个梦想。最好的东西是在几十次实验之后出现的,有时是在用Best of Parameters多次生成具有相同参数的补全,然后编写另一个GPT-3分类器来发现一个好的分类器之后。此外,您需要单独测试提示符的质量、数据样本和温度(响应的“创造性”),以了解需要改进的地方。
如果您正在寻找即时的设计技巧,请阅读该帖子的第2章。
多次编辑提示,在任务描述中包括和排除形容词。我尝试了“朗朗上口”、“挑衅性”、“发人深省”和许多其他的方式。我得到的最佳配置是“为黑客新闻(https://news.ycombinator.com/)提交)写一个简短、发人深省、引人注目的帖子标题。”
将提示拆分成两句话,将任务及其描述分开。我发现一句话长的提示语最适合简单的任务。
使用数据样本进行播放。我添加和删除了Ask HNs,从最受欢迎的帖子列表中随机抽样,并尝试选择更主观的深思熟虑的标题。
改变了温度。最好的结果出现在0.9,而任何低于0.7的结果都是重复的,与样本非常相似。用温度1生成的标题太随机,看起来一点也不像好的HN标题。
为了判断完成的质量,我提出了一个问题:“如果我在HN上看到这个,我会点击它吗?”这帮助我快速通过实验,因为我知道糟糕的结果是什么样子。
就在那时我意识到我发现了一些事情。从上面生成的标题列表中,出于好奇,我至少会点击三个链接。特别是在“A Developer‘s Guide to Going Form”一文中。
更有趣的是,上面的完成是API微调的结果。标题8,“你所爱的不是你一生的工作”,原本是另一部差劲作品的一部分。因此,我去掉了不好的内容,将Title8添加到我的数据样本中,并从那里继续生成。
下一步是看看我是否可以让GPT-3为我的博客帖子创建一个自定义标题。
要使GPT-3生成自定义标题,我需要改变我的方法。我不再探索新的、可能很有趣的标题,而是想办法为已经写好的帖子做一个好标题。要做到这一点,我不能简单地告诉API,“嘿,给我生成一个好的。”我需要展示一下这个帖子到底有多好,并让GPT-3了解一下这个帖子是关于什么的。
我更改的第一件事是提示符。这相对容易,因为我再次应用了相同的思考模式--“如果我必须委派这个问题,我会告诉一个人类助手什么呢?”
为黑客新闻写一个简短、发人深省、吸引眼球的帖子标题(根据博客帖子提供的描述提交https://news.ycombinator.com/))。
修改提示符的一个意想不到的好处是思路清晰。当你处理GPT-3时,如果你不知道自己在做什么,就没有办法让它工作。你需要清楚地表达你的想法。这是一个出色的自然约束,也是GPT-3最被低估的好处之一:当您必须清楚地说明您想要做什么时,您就开始更好地理解问题了。
在我设计了一个新的提示符之后,我必须更新我的数据集。我回到了我之前的实验,从有史以来最受欢迎的帖子列表中选择了五个标题,并为每个标题写了一个清晰而简洁的描述。最后,我为自己的作品写了一个描述,希望为其生成标题。我将标题字段留空,然后点击“生成”。
这一次,完成得令人震惊地好。因为我已经学习了如何设计提示符并获得正确的数据,所以我不必花费太多时间调优参数。我唯一改变的是温度--最好的结果是0.92。
以下是我为我的一篇关于在中国学习功夫的帖子生成的标题列表:
我上了一个月的功夫学校,学到了三课,我永远不会忘记。
我去少林寺学习了6个月的功夫:一个真实的故事。
我去少林寺学习功夫,得到的只是这篇糟糕的博文。
但是最好的标题不是来自完成。最有趣的标题是那些在我看到GPT-3生成的完成后想到的标题。感觉我们好像在一起工作-GPT-3是作家,我是编辑。稍后将在帖子中详细介绍这一点。
为了一次看到更多的完成,我构建了一个简单的Reaction应用程序,它将批处理查询发送到OpenAI API,并显示返回的标题。下面是它的外观:
经过20分钟的修修补补,我得到了我的会议笔记工作的前三名书目:
名单看起来不错。我去了黑客新闻,选择了我最喜欢的标题,然后点击了提交。
我的第一个标题是“我如何训练自己记住95%的2小时会议”,它在头版停留了11个小时,收到了229个赞,129条评论,给我带来了10K的网站访问量和353个电子邮件订阅。
两周后,我在如何学习的工作中也做了同样的事情。这件事超出了我的想象:超过一天的头版头条,556条评论,125条评论,HN时事通讯和30K的网站访问量。一百多人给我发了电子邮件,向我请教如何学习编程的技巧。
更令人惊讶的是,来我网站的人发现了我的旧作品,并帮我把它们提交给了HN。有一段时间,我在头版同时发布了两个帖子,在4号和7号,发电机在工作。
有三个参数有助于生成良好的完成图:即时设计、样本数据和温度。这三个因素都会对模型的输出产生重大影响,需要仔细设计和测试。
如果您在生成完成时遇到困难,我强烈建议您写下组合并逐个尝试。当您做错了事情时,很容易落入认为API很糟糕的陷阱。
编写GPT-3最困难的部分是设计提示符。要使其正确,您需要对问题有扎实的理解、良好的语法技能和多次迭代。
要设计出色的提示符,您需要了解您希望API做什么。编程GPT-3非常类似于编写代码,但是有更大的出错空间,因为自然语言规则要灵活得多。与编码一样,最常见的错误是不知道程序要做什么,而是盲目地敲击键盘。
这里一个很好的心理模型是将API视为人类助手。要想出一个提示,问问自己:“我该如何向以前没有做过这项任务的助理描述这个问题?”
例如,您希望根据文本提示生成销售跟踪电子邮件。要做到这一点,您需要a)在最上面对任务进行清晰而简明的描述;以及b)向API提供示例电子邮件。
为了设计很棒的提示,我想出了一个简单的窍门--我起草了一封电子邮件给我的朋友。我描述了我希望API在电子邮件正文中做什么,并提供了几个成功结果的示例。我不发送这封电子邮件,但写作的过程改变了我的想法:我设法客观地陈述问题,而不是像我自己那样写一条模糊的捷径。
假设:我假设电子邮件技巧是有效的,因为我已经在这个环境中思考了一段时间,并且我的大脑选择了熟悉的UI。
语法是GPT-3的编程语言。如果你犯了语法错误,或者你的文章有微妙的意思,你就不会有好的完成。
首先,写得简明扼要。不要将复句与谓语连用。避免微妙的含义。
确保你的句子简短。例如,如果您希望对API进行编程以生成包含一些关键字的SEO优化文章,请不要这样写:“写一篇高质量的SEO优化文章,描述如何在商业中使用心理学,并包含两个关键字,”心理学“和”商业“。”取而代之的是下面的提示:“写一篇高质量的文章,描述如何在商业中使用心理学。这篇文章应该针对两个关键词进行SEO优化:“心理学”和“商业”。
更一般的情况是,在提示的最后放入细节。如果您基于某些关键字生成补全,请在末尾添加这些单位,用引号引起来。与在句子中间插入关键字相比,此设计模式可以生成更好的补全结果。
玩弄形容词,想出不同的谈话风格。例如,如果您正在制作一个客户支持应用程序,并且希望机器人具有礼貌,您可以通过在提示中提及“礼貌”作为回复质量来指定这一点。改变发型和温度结合起来效果很好:如果你的体温高(0.8-.1),你更有可能得到“友好”的完成;如果你选择低温度(0-0.5),你更有可能得到“正式”的完成。
因为我不是以英语为母语的人,所以语法对我来说是个挑战。我用在线语法检查器Grammarly解决了这个问题。在设计提示符时,我首先在纸上起草想法,然后去语法分析,以确保语法正确。
如果你真的想提高你的语法和写作水平,这里是我读过的三个最好的材料:
“非虚构的艺术”,艾恩·兰德的一本书。“阿特拉斯耸耸肩”和“源泉”的作者写的最被低估的一本书。Ayn概述了我见过的最好的写作过程,交织了心理学、生物学和语言。我每天在工作中使用她的一种不同的方法。
雅克·巴尔赞的“简单与直接”一书。一本写得清清楚楚的畅销书。雅克解释了如何思考写作,以及你需要什么样的思维模式才能做到简明扼要。
小威廉·斯特伦克的“风格元素”一书。这是一本风格指南,重点介绍单词和如何使用它们。
无论您最初的提示有多周到,您都不可能在第一次尝试时就得到出色的完成。我建议测试所有三个组件的不同组合-提示、样本数据和温度,以获得更好的结果。要做到这一点,您需要保存一个临时工作文件,在其中记录您测试的组合,并添加有关其性能的注释。
我在这里找到的最简单的解决方案是为我用GPT-3解决的每个问题创建一个新的Google Doc,并记录其中的所有内容。我使用Google Docs是因为它很容易在浏览器中创建和共享(提示:cmd+t,然后是docs.new),支持图像,并跟踪历史更改。您可以随意使用任何适合您的工具-重点是记录您的实验,以了解提示符、数据和温度的哪种组合效果最好。
测试提示符时,请确保您首先获得了正确的语法。这是我发现自己在用GPT-3解决问题时犯的最常见的错误。我搞砸了提示符,没有明确指定我想让API做什么。要修复错误的完成,请重写提示并使用新提示生成5-10个完成。
确保您不会一次更改所有参数。如果是这样的话,很难理解是提示、数据还是温度影响了完成-一次测试一件事,并记录您学到的东西。
如果你搞砸了数据,一个出色的任务描述不会产生好的完成。您使用的样本取决于您要解决的问题。这就是为什么很难给出任何关于正确获取数据的一般性建议-您可以通过多种方式解决相同的问题。
例如,您希望API编写LinkedIn配置文件描述。至少有三种方法可以做到这一点:
向API提供一组作为关键字的人的素质的键值对,以及作为文本段落的他们的配置文件描述。然后将质量作为关键字编写,并生成概要描述作为完成。
编写一个提示符,告诉API生成配置文件描述,并为其提供前几句话,然后让API完成剩下的工作。
做几个键-值对,其中键是你喜欢的人的一句话描述,值是他们在LinkedIn上的“关于我”部分。要生成新的“关于我”,只需用一句话描述并在提示符顶部指定任务即可。
在第一种情况下,您需要向API提供与您想要的结果接近的示例。在第二个场景中,您只需要开始序列,并告诉API生成其余部分。在第三个提示中,您需要更多自定义的“关于我”示例。但在所有三种情况下,数据都会影响完成的音调和声音,就像指令一样。
要设计一个很好的示例,请确保它与您使用的提示符和温度设置一致。例如,如果你想制作一款根据项目符号生成友好电子邮件的应用程序,提示符和示例都应该指明这一点。不过,方式不同:提示符必须包括相关的形容词,如“友好”、“社交”、“随意”,并且示例必须在语义上接近说明,以显示API知道您想要什么。
如果你想做一些文本生成,比如写一篇故事,设计一面旗帜,或者起草一封电子邮件回复,温度肯定很高。在我的黑客新闻标题生成器应用程序中,我发现0.9-0.95的温度表现最好。然而,在温度为1的时候,这些反应变得“太疯狂”,而且往往是无关紧要的。在0.7-0.8的温度下,大多数生成的标题都是重复和乏味的。
操场的初始温度设置是0.7,许多人认为API不能为他们工作,只是因为他们没有更改默认值。一定要避免那个错误。
要获得正确的温度,请测试Prompt-data-Temp设置的不同变化。根据经验,0.9对于任何创造性的问题都很有效。4对于大多数FAQ应用程序来说已经足够了,0表示严格的事实响应。
这些学习可以分为两大类:对API本身的洞察和GPT-3技术的更广泛的影响,这些影响在一个月的工作后才变得明显。我建议先阅读API洞察力以获得一些背景知识,然后再跳到该技术更广泛、更系统的含义。
我的HN书目应用程序最初的想法是训练GPT-3理解什么是好书目,生成许多选项,然后提交最好的一个。但是,当我开始玩弄标题时,我发现最好的标题来自于稍微改变一下补全。当我看到完成时,它激发了我的想象力,我有了一个更好的想法,否则我不会发现的。换句话说,GPT-3标题生成器的真正价值来自建议,而不是完成。
GitHub首席执行官纳特·弗里德曼(Nat Friedman)在这里分享了对GPT-3编程伙伴的相同想法(1:25:30):
这意味着,大多数认为GPT-3将完全自动化创造性工作的人可能是错误的。API将增加创造性工作,并帮助工人迅速发现伟大想法的种子。但我相信,在很长一段时间内,掌舵的将是人类;就像人类正在用计算机训练国际象棋一样,而不是因为深蓝击败了卡斯帕罗夫而完全放弃了这盘棋。
“我们让自己被大数据迷住,只是因为我们将技术异国情调。我们对仅靠计算机完成的小壮举印象深刻,但我们忽视了互补带来的大成就,因为人类的贡献使它们不那么不可思议。沃森(Watson)、深蓝(Deep Blue)和越来越好的机器学习算法都很酷。但未来最有价值的公司不会问,光靠电脑能解决什么问题。相反,他们会问:计算机如何帮助人类解决难题?“。
在修补了六个星期的GPT-3之后,我。
.