这是本系列的第3篇文章,在这个系列中,我将尝试尽量用大白话的方式,来解释一些AI领域的基本概念,让更多像我一样的数学白痴也能理解AI。我相信不论AI背后的数学有多复杂,其基本思路一定是清晰的,可以用数学无关的方式讲清楚的。
当下,全球有超过1亿用户在使用chatGPT进行交流和咨询,但在类似的问题上,一些用户却能够从chatGPT得到准确和令人满意的答案,而另一些用户则不能。这种现象究竟是为何呢?是因为chatGPT并非所有用户都能够正确使用,还是其他原因影响了它的表现?让我们深入探究这个问题的本质,找到一个更好的方法,让所有用户都能够获得他们所需的答案。
在什么情况下chatGPT会表现不太好
如果我们归纳一下,在下面这些情况下,chatGPT的表现往往不是那么好:
1. 数据稀疏性的情况:在某些任务中,训练数据可能比较稀疏,导致chatGPT难以准确地预测出正确的文本
2. 零样本学的情况:在一些任务中,chatGPT可能需要生成之前没有出现过的文本,也就是所谓的“零样本学习”问题
3. 控制生成输出的情况:在一些任务中,需要chatGPT生成符合某些限制的文本,例如特定的主题、风格、语气等
4. 生成多样性的情况:在一些任务中,chatGPT生成的文本可能会缺乏多样性,导致生成的文本过于单调和枯燥
什么是Prompt
在NLP(自然语言处理)中,Prompt指的是用于触发和引导文本生成的初始文本或提示文本。Prompt可以是一个问题、一个描述性的语句、一个主题、一个关键词列表等等。
例如,如果我们想要使用chatGPT来生成一个描述夏天的段落,我们可以使用“夏天是一个季节,它通常伴随着温暖的天气、日照和户外活动。 ”这样的Prompt来启发模型生成与夏天相关的文本。
Prompt的选择对于文本生成任务的成功非常重要。一个好的Prompt应该包含足够的信息来引导模型生成有意义的文本,同时又不能过于限制模型的生成。在实践中,研究人员和从业者通常会对Prompt进行多次实验和优化,以找到最适合他们的任务和数据集的Prompt。
人工生成Prompt有什么局限性?
从上面的介绍可以了解,要用好chatGPT,关键就是要找到好的Prompt,但是通过人工的方式来完成这一工作会有什么问题呢?
1. 主观性:Prompt的选择可能受到人的主观因素的影响,不同的人可能会有不同的看法和想法,导致选择的Prompt并不一定是最优的
2. 局限性:人的知识和经验有限,不能涵盖所有的情况和场景,因此选择的Prompt也可能存在局限性
3. 复杂性:NLP任务通常涉及大量的语言知识和语法规则,选择合适的Prompt需要考虑多种因素,因此会非常复杂
4. 耗时:选择合适的Prompt需要耗费大量的时间和精力,可能会需要专业的领域知识和经验,这对于一般用户来说是比较困难的
因此,在实践中,我们往往通过Prompt Tuning技术来自动化地学习和选择最优的Prompt,从而有效地克服这些局限性,提高NLP任务的性能和效率。
什么是Prompt Tuning
Prompt Tuning是一种在自然语言处理(NLP)中使用的技术,旨在让机器能够更好地理解和回答人类的问题。
它的基本原理就是通过对Prompt进行微调,来改善机器学习模型的性能,以便更好地完成各种NLP任务,例如文本分类、语言生成、问答系统等。Prompt Tuning已经在各个领域得到了广泛应用,比如搜索引擎、聊天机器人、语音识别、语言翻译等,并取得了良好的效果。
Prompt Tuning的工作过程是怎样的?
简单说,Prompt Tuning通常是在模型训练完成后,在已有大语言模型的基础上,保持大模型不动,通过无监督训练,自动学习到能够提高特定任务性能的Prompt的方法。举个业界的例子:
以下文字和图片是来自Google的一篇很有影响力的论文:
To create a soft prompt for a given task, we first initialize the prompt as a fixed-length sequence of vectors (e.g., 20 tokens long). We attach these vectors to the beginning of each embedded input and feed the combined sequence into the model.
为了为给定的任务创建一个软Prompt,我们首先将Prompt初始化为一个固定长度的向量序列(例如,长度为20个token)。我们将这些向量附加到每个嵌入式输入(Embedding)的开头,然后将组合的序列送到模型中。
The model’s prediction is compared to the target to calculate a loss, and the error is back propagated to calculate gradients, however we only apply these gradient updates to our new learnable vectors — keeping the core model frozen.
将模型的预测结果与目标值进行比较以计算损失,损失通过反向传播以计算梯度,但是我们只将这些梯度更新应用于新的可学习向量,同时保持核心模型不变。
While soft prompts learned in this way are not immediately interpretable, at an intuitive level, the soft prompt is extracting evidence about how to perform a task from the labeled dataset, performing the same role as a manually written text prompt
通过这种方式学习到的软提示直观上不太好理解,但用大白话说就是,软提示从标注数据集中提取了有关如何执行任务的特征,扮演着手写文本提示相同的角色。
如何应用Prompt Tuning的结果
如果已经有一个训练好的Prompt集合,需要为一个新的具体任务选择合适的Prompt时,一般会考虑以下几个步骤:
1. 确定任务类型和输入输出格式:首先需要确定具体任务类型和输入输出格式。例如,对于文本生成任务,输入可能是一些描述性的句子,输出可能是一个标题或摘要。这将有助于缩小搜索范围并找到合适的Prompt。
2. 筛选候选Prompt:从训练好的Prompt集合中筛选出与任务类型和输入输出格式相匹配的候选Prompt,可以根据Prompt的长度、内容、格式等特征进行筛选。
3. 优化和调整:如果没有找到合适的Prompt,可以根据评估结果进行优化和调整,例如,可以尝试增加或减少Prompt的长度、调整Prompt中的关键词和短语等。
4. 多样性和控制:对于一些需要多样性和控制的任务,例如生成多样化的回复或者满足不同偏好的文本,可以使用多个Prompt组合,或者通过参数控制生成的文本多样性和质量。
5. 将Prompt与输入文本合并:将选择的Prompt与输入文本按照一定的规则进行拼接,形成模型的输入,以便让模型能够理解提示和条件信息,并生成符合要求的文本。
如何筛选候选Prompt
在上述过程中,可以看到第二步,筛选候选Prompt这一步很关键,具体而言,一般会涉及如下工作:
提取特征:对于每个Prompt,需要提取一些特征来描述其长度、内容和格式等,例如,可以提取Prompt中包含的关键词和短语,以及Prompt的语法结构和风格等。
实际上,在Prompt Tuning训练过程中已经计算过了每个Prompt的特征,所以在应用Prompt时,也可以直接使用之前计算好的Prompt特征,而不是重新计算一遍,在Prompt Tuning中,每个Prompt通常都会被编码成一个特定长度的向量(如512维),即Embedding,这些Embedding会被保存下来,作为下一步筛选候选Prompt时使用的特征。
计算相似度:对于每个候选Prompt,计算其与输入文本之间的相似度,可以使用各种相似度度量方法,如余弦相似度、Jaccard相似度、编辑距离等。
组合多个Prompt:对于一些需要多样性和控制的任务,可以组合多个Prompt生成更加多样化和符合要求的文本。
总结时刻
用不好chatGPT是因为Prompt选的不好,而想手工生成好的Prompt有很多局限,所以我们通过Prompt Tuning的方式让机器帮我们自动发现好的Prompt,然后在执行具体任务的时候,我们从这些机器找到的Prompt中找到合适的Prompt,拼接到我们的问题上一并发给chatGPT,从而得到更好的结果。