> 提示词通俗讲就是输入给大语言模型的文字,是驱动大语言模型运行的命令。
传统的编程程序,只有预期的输入才会给出输出,必要时候还会给出报错,我们能根据报错信息进行调整。
大语言模型不同,它就像一个人,输入的提示词如何,都会给出相应的回复。所以,提示词的选择对大语言模型的回复质量有显著影响。下面两个提示词例子:
1.“怎样找到一份好工作?”
2.“我是一名新进的生物技术研究生,我应该如何找到与我的专业相关的工作?可以提供一些求职网站和技巧吗?”
第一个提示词,模型能得到的信息很少,因此回答的质量肯定不如第二个。我们在选择提示词时,需要反复尝试和优化,给出具体、清晰的指令,才能引导模型生成想要的结果。在后续的课程中,我们会专门介绍一些常用的提示技巧,帮助大家更好地了解和学习如何写出高质量的提示词。
在 AI 应用开发中,提示词更多地用于限制和规范模型的输出结果,比如限制模型只能回答编程相关的问题、限制模型的结果以 markdown 形式返回,等等。
令牌(Token):大语言模型基本的计量单位
在 GPT 中,以 token 为基本计量单位,GPT 的基本工作原理是:输入 n 个 token,GPT 模型计算输出 1 个 token。如下图所示:
Token 也是大语言模型的计费单位,输入 Token 和输出 Token 的计费价格不同,同系列模型不同版本之间的价格也不相同,比如 OpenAI 的 GPT-3.5,每输入 1000 个 Token,需要花费 0.0015 美元,每输出 1000 个 Token,需要 0.002 美元;GPT-4,由于性能更好,价格更贵,大概是 GPT-3.5 的 30 倍。
一个 token 不一定是一个完整的单词,可以是短单词,也可以是单词的一部分。GPT 会将文本按一定的算法拆成多个 token,以 Open AI GPT 模型举例,常见单词和短单词通常单独拆成一个 token,而一些不常见或者长度较长的单词会被拆成多个 token。
OpenAI 提供了一个 Tokenizer 页面,可以用来可视化显示文本的 token 拆分情况,如下图所示:
此外,还提供了一个 token 分词的 python 库:https://github.com/openai/tiktoken。
扩展输出
上面我们提到,GPT 的基本原理是输入 n 个 token,输出 1 个 token。但玩过 ChatGPT 的同学都知道,输入一个问题后,ChatGPT 是会输出一串文本的,也就是说并不是输出一个 token。这个实现的基本思路是:输入 n 个 input tokens,生成 1 个 output token,然后将该 output token 合并到 input tokens 中,作为下一次输入的一部分,迭代计算,以此类推,直到输出完整的文本。
如下图所示:
输出随机性
使用 ChatGPT 时,我们还会发现,ChatGPT 的回答具有不确定性。输入两个完全一样的问题,得到的答案可能不一样。这是因为 GPT 每次迭代计算时,先生成一组带有不同概率的 token 列表,如下示意图,GPT 从其中选择一个 token 作为 output token。
选用哪个 token 呢?正常理解肯定选择概率最大的 token。但经过多次实验发现,如果我们总是选择排名最高的 token,最后得到的文本会很“平淡”,不够“拟人化”。但如果有时选择一个排名比较低的 token,会有意想不到的效果。
所以,我们在选择 output token 的时候,添加了一个 temperature的参数因子。该参数取值 0~1,决定了使用低排名 token 的频率。实践表明,temperature = 0.8 效果较好。
由于 temperature 的引入,导致 GPT 的输出具有一定的随机性,所以相同的输入会得到不同的回答。
token 数量限制
大语言模型会限制单次的 token 数量,主要有以下几个原因:
- 模型的参数规模与 token 数量呈线性关系,处理 token 数量越多,计算开销越大。
模型的输入和生成的临时结果需要暂存在内存中,过长的文本会占用太多的内存。
随着输入文本的增长,模型推理的效率和准确性不断降低,甚至会报错。
因此,出于资源和效率的考虑,限制 token 数量是十分有必要的,能够确保模型在可接受的时间和资源范围内进行训练和推理。
不同 GPT 模型限制大小不同,GPT-3 限制 4096 个 token,GPT-4 限制 8192、32768 或 128000 个 token(GPT-4 本身也分了好几个版本)。
需要注意的是,该限制是“输入+输出”的总数量。比如使用 GPT3 时,如果输入 4090 个 token,那 GPT 只能输出 6 个 token 作为响应。所以,我们在输入的时候,需要格外考虑输出的剩余可用 token 数。
微调(Fine-tuning):训练自己专属的大语言模型
此前我们说过,GPT 经过了大量语料的预训练,能够适应各类任务场景。但对于一些特定的场景,GPT 可能无法达到用户预期,比如某个细分领域甚至私域的提问,GPT 只能给出一些“正确的废话”。为了解决这个问题,我们可以用我们自己的训练数据对大语言模型进行微调,提高模型回答的质量和效果。
这就好比一个基础知识扎实的程序员,新入职了一家公司,对公司的开发流程、开发项目都不了解,你是他的导师,带他尽快熟悉整个工作流程。之后他结合自己的专业和技术,快速上手,甚至上位,升职加薪,而你,慢慢被淘汰了。。。
这种对新员工的入职培训,就是大语言模型中的微调。
GPT 的微调,不需要很高的门槛,直接通过调用 API 就可以完成。我们只需要准备好所需的训练数据,发送给微调的 API,就可以获得一个专属的、强化后的 GPT 模型。
其实,ChatGPT 时刻也在进行着微调,大家在使用时,有时候可能会遇到模型同时有两种不同的输出,让我们自己选择更喜欢哪个。ChatGPT 会将该选择反馈到模型中,不断优化,使输出更符合人类预期。这种微调技术称为人类反馈强化学习(RLHF)。