简介
语言模型
在人工智能(AI)领域,语言模型是一种可以预测文本序列的概率的统计模型。简单来说,它们的目标是理解和生成人类语言。给定一些词语,语言模型可以预测下一个词语可能是什么,或者给定的一些词语是多么可能出现在一起。
基本的语言模型原理可以分为以下三种类型:
统计语言模型(Statistical Language Models):这种模型使用传统的统计技术来确定文本序列的概率。最简单的例子是N-gram模型,它使用一种基于词频的方法来预测下一个词语。
基于神经网络的语言模型(Neural Network-Based Language Models):这种模型使用深度学习技术,例如循环神经网络(RNN)或长短期记忆网络(LSTM)来学习文本序列的概率。它们在处理长期依赖问题和理解上下文信息方面比统计模型有优势。
Transformer模型:Transformer模型是最近在NLP领域的重要进展。它引入了注意力机制(Attention Mechanism),能够更有效地理解文本序列中的长距离依赖关系。GPT(Generative Pretrained Transformer)系列和BERT(Bidirectional Encoder Representations from Transformers)等是基于此模型的知名应用。
LLMs(Large Language Models )
Large Language Models(LLMs),也称为大型语言模型,是一种基于机器学习和自然语言处理技术的模型,它通过对大量的文本数据进行训练,来学习服务人类语言理解和生成的能力。
LLM的核心思想是通过大规模的无监督训练来学习自然语言的模式和语言结构,这在一定程度上能够模拟人类的语言认知和生成过程。与传统的NLP模型相比,LLM能够更好地理解和生成自然文本,同时还能够表现出一定的逻辑思维和推理能力。
prompt
prompt在人工智能场景下指给模型的一个初始输入或提示,用于引导模型生成特定的输出。如果把大模型比如为代码解释器,那prompt就类似于我们编写的代码。
可以是一个问题、一段文字描述,甚至可以是带有一堆参数的文字描述。AI 模型会基于 prompt 所提供的信息,生成对应的文本,亦或者图片。比如,我们在chatGPT中输入:中国的首都是什么?这个问题就是prompt。
而 Prompt Engineering (中文意思为提示工程,缩写为 PE)则是:
Prompt Engineering 是一种人工智能(AI)技术,它通过设计和改进 AI 的 prompt 来提高 AI 的表现。Prompt Engineering 的目标是创建高度有效和可控的 AI 系统,使其能够准确、可靠地执行特定任务。
为什么需要PE?
因为人类的语言从根本上说是不精确的,目前机器还没法很好地理解人类说的话,所以才会出现 PE 这个技术。
是否需要学习PE?
有人认为这个就像当年搜索工具刚出来的时候,出现了不少所谓的「搜索专家」,熟练使用各种搜索相关的奇技淫巧。但现在这些专家都不存在了。因为产品会不断迭代,变得更加易用,无需再使用这些技巧。一个比较统一的看法是:
现在 AI 的发展还比较早期,了解和学习 PE 价值相对比较大,但长远来看可能会被淘汰。这个「长远」可能是 3 年,亦或者 1 年。
如果你看过 Sam Altman
去年的访谈
,他在去年 9 月的时候就提过,5年内我们很可能就不再需要 PE。
prompt结构
A prompt contains any of the following elements:
Instruction - a specific task or instruction you want the model to perform
Context - external information or additional context that can steer the model to better responses
Input Data - the input or question that we are interested to find a response for
Output Indicator - the type or format of the output.
例如:
Zero-Shot Prompting
"Zero-Shot Prompting" 是一种在自然语言处理(NLP)中常见的机器学习技术,尤其在处理大型语言模型(如 GPT-3 或 GPT-4)时。"Zero-Shot" 的含义是指模型在没有见过特定任务的训练样本的情况下,试图解决该任务。
例如:
GPT并没有针对这种类型的任务进行训练,但是由于它在大量的语料上进行训练,依然可以很好的结局这类任务。需要注意的是,虽然 "Zero-Shot Prompting" 可以在许多情况下表现得很好,但它并不总是能够生成完全正确或一致的输出,尤其是在处理复杂或未知任务时。
Few-Shot Prompting
"Few-Shot Prompting" 是一种自然语言处理中的机器学习技术,用于在处理任务时,通过仅提供少量样本来引导模型的学习和推理过程。
通过提供少量的样本,模型可以从中学习任务的模式、关系和特征,并推断出适当的输出。这种方法使得模型能够在遇到类似但未见过的情况时,快速适应和表现出良好的泛化能力。
"Few-Shot Prompting" 的目标是通过最少的样本和信息来实现高效的学习和推理,使模型能够在新任务或领域中快速适应和表现出良好的性能。这对于处理具有限数据或频繁面临新任务的情况下尤为有用。
例如:
不过这并不代表,Few-Shot 就没有缺陷,我们试试下面这个例子:
Chain-of-Thought Prompting
根据 Wei 他们团队在
2022 年的研究
表明:
通过向大语言模型展示一些少量的样例,并在样例中解释推理过程,大语言模型在回答提示时也会显示推理过程。这种推理的解释往往会引导出更准确的结果。
例如:
在传统的语言模型中,只给出单个的提示或问题,模型的输出可能会在不同的方向上迅速转变,缺乏一致性和连贯性。而 "Chain-of-Thought Prompting" 的目标是通过给模型提供多个相关的提示,使模型能够在生成文本时沿着逻辑思维链条进行连贯的推理。
这种方法可以在生成对话、故事、论述等文本时非常有用。通过给模型提供一系列连续的提示,每个提示都与前一个提示相关,模型可以建立上下文和逻辑关系,从而生成更加连贯和有条理的文本。
例如,假设我们要让模型生成一个完整的故事,我们可以使用 "Chain-of-Thought Prompting",依次提供故事的不同部分作为连续的提示。模型可以通过理解前一个部分的内容,并在此基础上继续发展故事情节,以确保整个故事具有逻辑和连贯性。
通过使用 "Chain-of-Thought Prompting" 技术,我们可以引导语言模型生成更具结构和连贯性的文本,使其能够按照逻辑顺序展开思维,并生成更加自然和可理解的输出。
根据
Sewon Min
等人在
2022 年的研究
表明,思维链有以下特点:
"the label space and the distribution of the input text specified by the demonstrations are both key (regardless of whether the labels are correct for individual inputs)" 标签空间和输入文本的分布都是关键因素(无论这些标签是否正确)。
the format you use also plays a key role in performance, even if you just use random labels, this is much better than no labels at all. 即使只是使用随机标签,使用适当的格式也能提高性能。
例如:
在上述的案例里,每一行,我都写了一句话和一个情感词,并用 // 分开,但我给这些句子都标记了错误的答案,比如第一句其实应该是 Positive 才对。但:
即使我给内容打的标签是错误的(比如第一句话,其实应该是 Positive),对于模型来说,它仍然会知道需要输出什么东西。 换句话说,模型知道 // 划线后要输出一个衡量该句子表达何种感情的词(Positive or Negative)。这就是前面论文里 #1 提到的,即使我给的标签是错误的,或者换句话说,是否基于事实,并不重要。标签和输入的文本,以及格式才是关键因素。
只要给了示例,即使随机的标签,对于模型生成结果来说,都是有帮助的。这就是前面论文里 #2 提到的内容。
最后,需要记住,思维链仅在使用大于等于 100B 参数的模型时,才会生效。
技巧
技巧1:将指令放在开头,并用###或"""分隔上下文
Less effective ❌:
Summarize the text below as a bullet point list of the most important points.
{text input here}
Better ✅:
Summarize the text below as a bullet point list of the most important points.
Text: """
{text input here}
"""
技巧2: 对所需的背景、结果、长度、格式、风格等尽可能具体、描述性和详细
Less effective ❌:
Write a poem about OpenAI.
Better ✅:
Write a short inspiring poem about OpenAI, focusing on the recent DALL-E product launch (DALL-E is a text to image ML model) in the style of a {famous poet}
技巧3: 通过例子说明输出格式
Less effective ❌:
Extract the entities mentioned in the text below. Extract the following 4 entity types: company names, people names, specific topics and themes.
Text: {text}
Better ✅:
Extract the important entities mentioned in the text below. First extract all company names, then extract all people names, then extract specific topics which fit the content and finally extract general overarching themes
Desired format:
Company names: <comma_separated_list_of_company_names>
People names: -||-
Specific topics: -||-
General themes: -||-
Text: {text}
技巧4: 优先使用zero-shot, 其次 few-shot,当两者都不能得到满意结果时尝试fine-tune (模型微调)
✅ Zero-shot
Extract keywords from the below text.
Text: {text}
Keywords:
✅ Few-shot - provide a couple of examples
Extract keywords from the corresponding texts below.
Text 1: Stripe provides APIs that web developers can use to integrate payment processing into their websites and mobile applications.
Keywords 1: Stripe, payment processing, APIs, web developers, websites, mobile applications
##
Text 2: OpenAI has trained cutting-edge language models that are very good at understanding and generating text. Our API provides access to these models and can be used to solve virtually any task that involves processing language.
Keywords 2: OpenAI, language models, text processing, API.
##
Text 3: {text}
Keywords 3:
✅Fine-tune: see fine-tune best practices
here
.
技巧5: 使用引用减少虚假知识
如果模型在训练过程中接触了大量的知识,它并没有完全记住所见的信息,因此它并不很清楚自己知识的边界。这意味着它可能会尝试回答有关晦涩主题的问题,并编造听起来合理但实际上并不正确的答案。
一种减少幻觉的策略是先要求模型找到文本中的任何相关引用,然后要求它使用这些引用来回答问题,这种追溯源文档的方法通常对减少幻觉非常有帮助。
技巧6: 设定角色或人物
在 prompt 里增加一些 role(角色)相关的内容,可以让 AI 生成的内容更符合需求。例如:
Prompt engineering techniques
Best practices for prompt engineering with OpenAI API
Prompt Engineering Best Practices
吴恩达:面向开发者的Prompt Engineering
https://github.com/Fafa-DL/Lhy_Machine_Learning