1.GPT简介
1.1 GPT是什么
- 官方定义 :
(以上回答来自ChatGPT)
- 个人理解 :基于概率模型的猜词器:根据输入的内容预测出下一个词是什么。
1.2 GPT的工作原理
1.2.1 Generative Pre-trained Transformer的含义
- Generative:这个模型能够 生成 一段内容,还能让你看懂。比如给它几个关键词,能够通过这些关键词自动生成一段话或者一篇文章。
- Pre-trained: 预先训练好的 ,事先将大量的文本数据输入到模型中训练,让模型在一定程度上掌握了 语言的规律和表达方式 。
Transformer:GPT的 基本结构 ,在论文《Attension Is All You Need》中被提出。
可以将Transformer简单理解为“转换器”,包含编码(Encoder)和解码(Decoder)。通俗来讲就是,将输入的人类自然语言转换为计算机能够理解的内容,再生成相应的回复,最后转换为人类的语言。
1.2.2 GPT是如何生成内容的(为什么说其是猜词器)
GPT生成文本时的特点: 一个字一个字 、 有序地 输出,就像人类打字一样。
那么这是否意味着GPT在按照人类的思维说话呢?
非也!
人类说话时的逻辑 :按照一定语法将具有特定含义的词语组装成句,在说出这句话之前已经对这句话要表达的含义以及组织结构有个大致的轮廓了。
GPT说话时的逻辑 :根据前文内容预测下一个语素(token),类似于单词接龙。当GPT话说到一半时,其根本不知道后面要说的内容是什么,每次都是根据已有的内容去推理下一个字该说什么。这容易让我们想起输入法的联想功能,二者也确实存在相似之处,但其区别在于:
在输入法中输入一个词,然后一直点击第一个联想词,最后得到一个局部连接通顺但整体却狗屁不通的句子。 |
而GPT是根据前面所有的内容来推理下一个字该说什么。 |
其生成过程为:
- 将初始文本输入预先训练好的模型;
- 模型预测出下一个可能的单次列表及其概率,然后通过某种算法(不一定挑概率最大的)从中选一个作为下一个单词;
- 将新单次追加到文本结尾,然后将整个文本再次输入模型,再进行第2步;
- 以上第2、3步不断重复,从而得到越来越长的句子。
因此,当我们问GPT:“你是谁”,GPT在回答问题时的逻辑如下:
提问:你是谁 input_1:你是谁 output_1:我 input_2:你是谁;我 output_2:我是 input_3:你是谁;我是 output_3:我是ChatGPT ...... input_n:...... output_n:...... |
最终得到以下回复:
1.3 提问的艺术——提示词工程(Prompt Engineering)
现在我们经常会使用GPT来代替搜索引擎去寻找答案,但是在使用搜索引擎时,我们常常会因为没有输入正确的关键字而导致找不到我们想要的信息,在使用GPT时也会存在相同的问题:我们会因为没有准确描述自己的意图而导致GPT没有生成我们想要的回复,这也是提示词工程出现的意义。
1.3.1 提示词工程定义及结构
- 什么是提示词工程:通过结构化文本等方式来完善提示词,引导大模型输出我们期望的结果( 提问的艺术 )。
- 提示词的结构(不一): 任务、格式、角色、范例 。其中任务为最核心的部分,指的是我们要让GPT做的事情,这也是必选项。格式、角色和范例是可选项,没有这三者GPT也能完成我们指定的“任务”,只不过输出效果可能没有那么精确。
1.3.2 提示词——任务
任务即为我们想让GPT做的事情,如果我们的提问过于模糊笼统,让GPT难以判断我们想问什么,就会导致GPT生成了一个很宽泛的回答:
当我们换一种更加简明扼要、具体清晰的提问方式时,得到的回答也会更加精确且实用:
这样就能减少GPT误解的可能性,生成一个更加明确且高度相关的回答。
1.3.3 提示词——格式
当GPT收到任务之后,我们可以进一步指定输出的格式,也就是GPT回答的呈现方式。
除了表格之外,常见的格式还有:段落、要点等,可以根据需要进行指定。
1.3.4 提示词——角色
当提示词有了明确的任务和格式时,另一个策略为给GPT指定一个特定的角色。指定角色的主要功能是影响GPT回答时的措辞用语、回答风格及内容深度。
1.3.5 提示词——范例
范例指的是在编写prompt时,加入少量相关的任务例子,使得GPT能够更加充分地理解任务的目标和输出要求,提高输出的准确性。
2 RAG
2.1 GPT的问题
- 时效性问题 :模型生成的内容会受到其训练数据时效性的限制。例如,如果模型的训练数据是截止至2022年的,那么在此之后的事情就不知道了。
时效性问题可通过联网的方式解决,GPT可以从网络上获取相关问题的信息,并作为输入的一部分,传递给GPT,据此生成相应的回复,不过光靠GPT本身是无法完成这个任务的。
- 幻觉 (Hallucination):生成的回复与事实不符,换句话说就是“ 一本正经的胡说八道 ”。
当使用搜索引擎搜索一些它不知道的问题时,搜索引擎就会展示空结果或者显示一些相关联的结果。
但GPT不一样,由于它的本质是一个基于概率模型的猜词器,当我们问一些它不知道的问题时,它不会直接回复“不知道”,而是去猜,生成一些看似相关的内容,让不明就里的人产生误导。
其实归根结底,以上两种问题本质上都是 跟训练模型时所使用的数据有关 。当训练数据中不存在与提问相关的内容时,GPT自然也就无法给出可靠的回答。
解决方法有两种:
- 微调 (Fine-tuning):通过特定领域数据对预训练模型进行针对性训练,以提升其在特定任务上的性能。简单来说就是让预训练模型学习某个领域的新知识。需要数据+算力。
- RAG (Retrieve Augmented Generation):检索增强生成的简称,它为LLM提供了从私有或专有数据源检索信息的能力,并以此为基础生成回答。简单来说就是外挂了一个知识库。
2.2 RAG的原理
RAG在生产环境下的工作流程如下:首先根据用户的输入从知识库中检索出与用户输入相关的内容,然后将其与用户输入一起发送给大模型,生成相应的回答。
上图流程看起来比较简单,但实际上完整的pipeline如下:
2.2.1 Indexing
- 加载 :从通常存储知识库(网页、PDF、Doc等)中获取其内容;
- 分割 :将知识分割成适合嵌入搜索的片段大小;
- 嵌入 :将人类语言翻译成计算机能够理解的语言,再存入向量数据库中。
2.2.2 Retrieval
- 获取用户输入的嵌入(Embedding)
- 从向量数据库中获取相似的片段
2.2.3 Angmented Answer Generation
将用户的输入和从知识库中检索到的信息一起发送给模型生成回复。
openai_response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{
"role": "system",
"content": get_system_prompt(), # the system prompt as per above
},
{
"role": "system",
"content": get_sources_prompt(), # the formatted documents as per above
},
{
"role": "user",
"content": user_question, # the question we want to answer
},
],
) |
3. AI + BI
以百度的Suger Bot为例,见下面链接:


发布评论