什么是大语言模型(LLM)?
大语言模型 (LLM) 是一种基于Transformer的深度学习模型,可以处理大量的自然语言文本,并从中学习知识和语言规律,从而提高对自然语言的理解和生成能力。LLM可以用于各种自然语言处理 (NLP)任务,如文本生成、阅读理解、常识推理等,这些任务在传统的方法下很难实现。LLM还可以帮助开发人员构建更强大和更智能的应用程序,如聊天机器人、智能搜索引擎等。随着ChatGPT的火爆,LLM得到了很多关注。LLM的规模和性能在近年来不断提高,但也面临着训练和部署的挑战。本文将介绍OpenAI中的一些基本概念和 Prmpt的最佳实践,以及如何使用OpenAI来帮助开发人员构建更强大和更智能的应用程序。
基本概念
再开始之前,我们先来了解一下OpenAI的一些基本概念。
提示(Prompt)
Prompt是一种指令,它告诉人工智能模型要执行什么任务或生成什么样的输出。在机器学习和自然语言处理中,Prompt通常是一些文本或语言,被输入到训练好的模型中,用于指示模型生成一个相应的输出。Prompt可以是一个问题、一个句子或一段话,其作用是引导人工智能模型生成我们想要的文本类型和内容。
例如,在一个智能语音助手应用程序中,当用户说“今天天气如何?”时,应用程序将“今天天气如何?”作为Prompt输入到自然语言处理模型中,该模型将生成一个回答,比如“今天是晴天,最高气温将达到25度”。在这个例子中,Prompt是“今天天气如何?”
补全(Completion)
Completion是指机器学习模型在接收到一个Prompt后,根据训练数据和模型的权重参数生成的一段自动完成的文本。这个文本是基于Prompt的上下文和语义,由模型自动预测出来的。
例如,在之前的例子中,“今天天气如何?”做为Prompt输入到语言处理模型中。它可能会自动完成这句话,生成一个完整的回答,如“今天天气晴朗,最高气温将达到25度。” 这里的回答就是Completion。
标记(Token)
在自然语言处理中,Token是指一个具有独立语义的最小文本单位,可以是单词、短语、标点符号或其他任何单独的符号。在自然语言处理任务中,将文本分解成Token是非常重要的预处理步骤,这有助于将原始文本转换成模型可以处理的形式。
例如,考虑一句话“我正在学习自然语言处理。”,如果将其分解成Token,可能得到以下结果:
"我" "正在" "学习" "自然语言" "处理" "。" 每个Token都代表一个独立的单元,具有一定的语义含义,并且可以被模型处理。在很多自然语言处理任务中,包括文本分类、命名实体识别、机器翻译等等,Token都是非常重要的组成部分。
在OpenAI的API使用中,对于Token是有限制的,更具模型的不同,Token的长度也不同。因此,在使用OpenAI的API时,需要注意Token的长度限制。可以通过这个Token工具来查看一段文本的Token长度。 OpenAI官方给出了一个初略估算的方式:对于英文,一个Token差不多为3/4的一个单词。也就是说,100个Token大约等于75个单词。
模型(Model)
Model是指一种数学模型或算法,它被设计用来解决特定的任务或问题。模型通常由输入、输出和学习参数组成,其中输入是模型需要处理的数据,输出是模型产生的结果,学习参数是模型根据数据进行学习和优化的参数。在OpenAI的API中,提供了多种不同的模型,可以用来解决不同的任务。主要有以下几种:达芬奇(Davinci),巴贝奇(Babage),埃达(Ada),居里(Curie)。每种模型都有自己的特点,可以根据具体的任务和应用场景来选择合适的模型。
如何设计一个好的Prompt
在使用OpenAI的API时,Prompt是非常重要的,因为它决定了模型的输出。因此,设计一个好的Prompt是非常重要的。下面我们来看一下关于Prompt的一些设计原则。
明确指令
Prompt的设计应该与任务目标相关,并明确要求模型生成的内容。例如,在进行文本生成时,Prompt应该指导模型生成与主题相关的文本内容。一个好的Prompt应该是一个明确的指令,而不是一个问题。例如,如果要求模型生成一段关于“猫”的文本,那么一个好的Prompt应该是“猫是什么?”,而不是“猫是什么动物?”。因为前者是一个明确的指令,而后者是一个问题,模型可能会回答“猫是一种动物”,而不是“猫是一种宠物”。
下面是一个好的Prompt示例。上半部分用"""
包起来的,是输入到模型(text-davinci-003)的Prompt。下半部分用绿色高亮起来的,是模型给出的competion。模型自动帮我们把电话和邮件按照我们要求的指令隐藏起来了。这是因为我们的Prompt明确给出了指令:
- 阅读一下销售邮件
- 删除识别个人身份的信息
- 给了例子,用"[姓名]"替换"老王"。
角色提示(Role Prompting)
角色提示是另外一种Prompt技巧,通过为AI分配角色的方式引导AI给出更准确的输出。通过为 AI 分配一个角色,我们给它提供了一些上下文。这个上下文有助于 AI 更好地理解问题,因此 AI 往往可以给出更好的答案。例如,可以在开始的时候,提示AI"你是一名医生"或"你是一名律师",然后要求AI回答一些相关的医学或法律问题,以此来增强其专业性和准确性。举个例子:
下面给出了两个示例,第一个例子问AI "1000 * 100 / 400 * 56 是多少?",它给出了错误的答案 1400。第二个例子中,我们在Prompt中加入了角色提示,提示AI"你是一个能解决世界上任何问题的杰出数学家。试着解决下面的问题:",然后再问AI "1000 * 100 / 400 * 56 是多少?",它给出了正确的答案 14000。
错误的例子:
正确的例子:
上下文学习(In-Context Learning)
语言模型对上下文进行学习,以获得更好的理解和执行能力。它利用上下文信息来提高模型在执行任务时的准确性。在这种学习方法中,模型不仅考虑当前任务所提供的信息,还会考虑上下文环境中的其他信息。例如先前的句子或文本段落。在这种情况下,模型可以更好地理解任务的背景和目的,从而输出更准确的信息。
上下文学习有助于模型更好地理解任务的背景和目的,从而输出更准确的信息。例如,如果要求模型生成一段关于“猫”的文本,那么在Prompt中加入一些关于“猫”的上下文信息,例如“猫是一种宠物,它们很可爱”,可以帮助模型更好地理解任务的背景和目的,从而输出更准确的信息。
上下文学习可以根据Prompt中样本的数量,简单分为三种类型:
零样本(Zero-shot) 学习:没有样本或者说上下文信息。单样本(One-Shot)学习与少样本学习类似,但不允许使用大量演示数据,而只能通过少量的样本来进行任务描述。即使对于人类来说,理解任务格式也可能很困难,尤其是在没有先前的示例的情况下,这使得该设置在某些情况下显得“不公平的难度”。例如,如果要求某人“制作一张200米短跑世界纪录表”,这个请求可能是含混不清的,因为可能不清楚表格的格式应该是什么,应该包含什么内容(即使进行了仔细的澄清,确切理解所需的内容也可能很困难)。尽管如此,在至少一些情况下,零样本是最接近人类执行任务的方法。
少样本(Few-shot) 学习:在Prompt中有少量样本。在少样本学习中,通过提供K个上下文和补全(completion)示例,然后期望模型输出最后一个上下文的completion。 这是一个简单的少样本学习的例子:假设我们有一个任务,要求我们训练一个语言模型,能够根据一个问题生成一个答案。我们有一个包含问题和对应答案的数据集,但是数据集中只有很少的样本,我们需要使用少样本学习来完成任务。我们可以提供给模型K个上下文和补全示例,比如:
回答提出的问题。
上下文1: "谁是世界上最富有的人?"
补全1: "比尔盖茨。"
上下文2: "什么是Python编程语言的创始人?"
补全2: "Guido van Rossum。"
上下文3: "巴黎是哪个国家的首都?"
补全3: "法国。"
然后,我们给出一个最后一个上下文,比如:
上下文4: "哪个公司是全球最大的互联网搜索引擎?"
补全3:
此时,我们期望模型能够输出相应的补全,即 "谷歌。"。使用这些样本,我们可以训练模型以在少样本学习的条件下快速适应新的问题并给出正确的答案。
单样本(One-shot) 学习:在Prompt只有一个样本。单样本学习与少样本学习类似,只允许一个演示数据,并附带任务的自然语言描述。将单样本学习与少样本学习和零样本学习(下文)区分开来的原因是,它最接近某些任务与人类交流的方式。例如,在要求人类在上生成数据集时,通常会给出一个任务演示。相比之下,如果没有示例,则有时很难传达任务的内容或格式。
思维链(Chainn of Thought)
思维链(Chainn of Thought)是一种使用少量示例来指导人工智能模型完成任务的技巧。思维链的目的是让模型能够理解任务的逻辑和步骤,而不仅仅是复制示例。例如,如果您想让模型回答一个问题,您可以在输入中提供一些相关的信息和推理过程,而不只是一个简单的问题。我们可以看一下下面两个例子,一个是不使用思维链,一个是使用思维链。在这两个例子中,我们都要求模型回答“哪种方法是更快的上班方式”。在第二个例子中,我们使用思维链,即在输入中提供了一些相关的信息和推理过程,而不只是一个简单的问题。我们可以看到,使用思维链的模型能够更好地理解任务的逻辑和步骤,从而输出更准确的信息。
错误的例子:
正确的例子:
零样本思维链(Zero-shot Chainn of Thought)
零样本思维链(Zero-shot Chainn of Thought)是思维链的另外一种实现,通过在问题的结尾附加让我们一步步思考。 这句话,大语言模型能够生成一个回答问题的思维链。从这个思维链中,他们能够提取更准确的答案。零样本思维链有效地改善一些基本的推理任务。然而,它通常不如思维链提示有效。但是当无法构建思维链示例的时候,零样本思维链可以派上用场。
如果您对OpenAI和Prompt Engineer有兴趣,那么请关注我的账号,我会分享更多有趣的技巧和经验,还会附赠一些冷笑话和梗,让您的学习过程更加轻松愉快!