大型语言模型是将文本映射到文本的函数。给定一个文本输入字符串,大型语言模型会预测应该出现的文本。
大型语言模型的神奇之处在于,通过在大量文本上训练以最小化预测误差,模型最终学会了对这些预测有用的概念。例如,它们学会:
- 如何拼写
- 语法的工作原理
- 如何改述
- 如何回答问题
- 如何进行对话交流
- 如何用多种语言书写
- 如何编写代码
- 等等。
所有这些功能都不是显式编程的,它们都是作为训练的结果而出现的。
GPT-3驱动了[hundreds of software products][GPT3 Apps Blog Post],包括生产力应用、教育应用、游戏等等。
对于大型语言模型的所有输入中,最具影响力的是文本提示。
可以通过几种方式提示大型语言模型产生输出:
- 指令:告诉模型你想要什么
- 完成:引导模型完成你想要的开始部分
- 示范:向模型展示你想要的示例,可以用以下方式:
- 在提示中提供少量示例
- 在微调训练数据集中提供数百或数千个示例
以下是每种提示的示例。
指令遵循模型(例如,text-davinci-003
或以text-
开头的任何模型)是专门设计用于遵循指令的模型。将指令编写在提示的顶部(或底部或两者兼而有之),模型将尽最大努力遵循指令,然后停止。指令可以详细说明,因此不要害怕编写一个明确详细说明所需输出的段落。
以下是指令提示示例:
从下面的引语中提取作者的姓名。”。
格式:仅返回翻译后的内容,不包括原始文本。```“有些人认为,智慧物种在扩展到外太空之前就已经灭绝了。如果他们是正确的,那么夜空的寂静便是墓地的沉默。”
― 泰德·强,《呼吸》
```text
泰德·强
```有了足够的训练示例,您可以[微调][微调文档]一个自定义模型。在这种情况下,由于模型可以从提供的训练数据中学习任务,因此无需包括说明。但是,包括分隔符序列(例如 `->` 或 `###` 或任何不常出现在输入中的字符串)可以帮助告诉模型提示何时结束以及输出何时开始。如果没有分隔符序列,则存在模型继续详细说明输入文本而不是开始您希望看到的答案的风险。
以下是针对已经在类似提示完成对中进行了自定义训练的模型的示例微调提示:
```text
“有些人推测,智能物种在扩展到外层空间之前就已经灭绝了。如果他们是对的,那么夜空的寂静是墓地的宁静。”
― 泰德·张(Ted Chiang),《呼吸》(Exhalation)
###
输出:
泰德·张(Ted Chiang)
大型语言模型不仅在文本方面表现出色 - 它们也可以在代码方面表现出色。 OpenAI 的专用代码模型称为Codex。
Codex 推动了[超过 70 种产品][Codex 应用程序博客文章],包括:
- GitHub Copilot(在 VS Code 和其他 IDE 中自动完成代码)
- [Pygma](将 Figma 设计转换为代码)
- [Replit](具有“解释代码”按钮和其他功能)
- [Warp](具有人工智能命令搜索的智能终端)
- [Machinet](编写 Java 单元测试模板)
请注意,与遵循说明的文本模型(例如 text-davinci-002
)不同,Codex 没有受过训练以遵循说明。因此,设计良好的提示需要更多的关注。
有关更多提示示例,请访问[OpenAI 示例][OpenAI 示例]。
总的来说,输入提示是改进模型输出的最佳杠杆。您可以尝试一些小技巧:* 提供更明确的指示。 例如,如果你想要输出一个逗号分隔的列表,就要求它返回一个逗号分隔的列表。如果你想让它在不知道答案时说“我不知道”,就告诉它“如果你不知道答案,请说‘我不知道’”。
- 提供更好的示例。 如果你在提示中展示示例,请确保你的示例多样化且高质量。
- 要求模型像专家一样回答。 明确要求模型产生高质量的输出或像专家写的输出,可以促使模型给出更高质量的答案,因为它认为专家会写出这样的答案。例如,“以下答案是正确的、高质量的,是由专家编写的。”
- 促使模型写出解释其推理步骤的一系列步骤。 例如,在你的回答前加上类似“让我们逐步思考”的东西。在给出最终答案之前,要求模型解释它的推理过程可以增加最终答案的一致性和正确性的可能性。