如何让ChatGPT更靠谱
1. 预训练大模型概述
- 关于预训练
预训练(Pre-training)是深度学习中一种常见的技术,特别是在自然语言处理(NLP)和计算机视觉(CV)等领域中。它通常指在一个大型的、通常是通用的数据集上训练模型,以学习数据的一般特征和表示。这个过程产生的模型称为预训练模型。
**预训练的目的是让模型在一个较大的数据集上学习到一些基本的、通用的特征,这些特征对于特定任务是有用的。**这样做的好处是,当我们将预训练模型应用到一个特定的任务(例如,文本分类、情感分析、图像识别等)时,我们只需要在相对较小的数据集上对模型进行微调(Fine-tuning),就可以快速地获得不错的性能。这种方法在数据稀缺的情况下尤其有用。
想象一下,你有一本包含各种菜品的食谱书(预训练大模型),这本书里的菜谱都是经典的,可以适用于很多不同的场合(通用任务)。现在,你想要为一个特定的晚宴准备一道菜(特定任务),比如一道意大利面。你不需要从头开始创造一个全新的食谱,你可以在书里找到一道基本的意大利面食谱,然后根据你手头的食材和宾客的口味(特定数据集),对这个食谱进行一些小的调整,比如加入一些特别的香料或者改变一下烹饪时间(微调)。
通过这种方式,你可以快速地准备出一道适合特定场合的美味意大利面,而不需要花费太多时间和精力去学习意大利菜的所有知识。同样地,在机器学习中,通过微调预训练好的模型,我们可以快速地适应并解决特定的任务,而不需要从零开始训练一个全新的模型。
如图所示,我们可以看到一个预训练的模型结构,它代表了人工智能的当前进展。**这些模型不再只是从零开始学习,而是在巨大的数据集上进行预训练,掌握了语言处理等一系列复杂任务的基础知识。**当我们谈论传递问题时,这些模型现在可以迅速适应新任务,无需重头开始学习,这正是因为它们已经通过各种各样的任务进行了训练和调优。
-
大模型架构
- word2vec架构
**Word2Vec是一种流行的自然语言处理(NLP)工具,它使用浅层的神经网络模型来学习词向量表示。**这个模型是由Google的研究团队在2013年开发的。Word2Vec的主要目的是将单词转换成高维空间中的向量,这些向量能够捕捉单词之间的语义和句法关系。
**想象一下你有一个巨大的柜子,里面有许多小抽屉,每个抽屉都代表了一个单词的意义。Word2Vec就像是帮助你把每个单词放进正确抽屉的魔法。它通过读很多书和文章,学习每个单词通常是怎么被使用的,比如哪些单词经常出现在一起,它们通常出现在什么样的环境中。**这样,Word2Vec就能了解单词的意义,并且能够找到相似意义的单词并把它们放在相近的抽屉里。
举个例子,Word2Vec知道“国王”和“皇后”这样的词经常在类似的情境中出现,并且与“王冠”、“宫殿”这样的词有关联,所以它会把这些词放得比较近。这样一来,当你想要表达关于皇室的概念时,这些词就很容易被找到,并且能够用来理解和生成关于这一主题的句子。
- Transformer架构
Transformer架构是一种在自然语言处理(NLP)任务中广泛使用的深度学习模型,最初由Vaswani等人在2017年的论文《Attention Is All You Need》中提出。它的核心创新是“自注意力机制”(self-attention),这个机制允许模型在处理输入的词语时考虑到所有其他词语的影响,这样做的好处是模型可以更好地理解词语间复杂的依赖关系,尤其是长距离依赖关系。
Transformer架构,可以想象成一座非常先进的电信中心。这座中心的工作是处理信息(在这里指的是语言),并且确保信息可以快速准确地从一个地方传到另一个地方。
在以前,我们处理语言的方法有点像接力赛,一个词把意思传给下一个词,依次类推,这样处理起来既慢又容易出错。但Transformer把这个过程变得更聪明了。它使用了一种特殊的“注意力机制”,能够同时关注到句子中的所有词,而不是一步步顺序地来。
这就像是在一个大型会议中,你不需要等别人一个个发言才能理解讨论的内容。而是通过“注意力机制”,你可以迅速捕捉到每个人的观点,并立即了解他们之间的关系。这样不仅速度快得多,而且信息的处理也更加全面和准确。
-
context-free
**在计算机科学中,特别是在编程语言的语法分析和自然语言处理领域,“context-free”指的是不依赖于周围使用环境或其他元素的语法规则。**更具体地说,它通常是指“上下文无关文法”(Context-Free Grammar, CFG),这是一种用于形式化描述符号串的语法结构,其中的生成规则允许从一个符号替换为一个符号序列,而这个替换过程不受其他符号的影响。
- Context-aware
**Context-aware 指的是系统或应用能够感知和理解其运行环境的上下文信息,并根据这些信息来调整其行为的能力。**上下文信息可以包括用户的位置、时间、周围的人和设备、用户的活动状态、环境条件等。这种能力使得系统能够提供更加个性化、适时和适地的服务和响应。
- 两者比较
首先,想象一下你在组装一套家具。你有很多螺丝钉(words),需要用螺丝刀(word2vec)把它们拧进木板(context)去。Word2Vec架构就像是一个特别聪明的螺丝刀,它知道每个螺丝钉应该拧进木板的哪个部分,让整套家具(语言理解)稳固而有条理。
接下来,如果你需要一个可以处理整个房间家具布置的工具,那么Transformer架构就像是一个高级机器人,它不仅能拧紧螺丝钉,还能考虑整个房间的布局(上下文),决定最佳家具位置,确保一切看起来既美观又实用。
现在,当我们说context-free时,就好比你的家具组装说明书上的步骤是独立的,每一步不需要知道之前或之后的步骤(上下文),它们总是一样的,不论你在哪里组装家具。
而Context-aware则是一个更智能的系统,好比它知道如果你在晚上组装家具,可能需要额外的灯光,或者如果你在小空间里,它会建议你先组装小件家具。这个系统能够理解和适应不同的环境和情况,给你最合适的建议。
Word2Vec和Transformer都是理解和处理语言的工具,前者更像是关注单个词语与其直接相关的环境,而后者能够考虑到更广泛的上下文环境。
2. 理解大模型的内在机理
-
BERT和GPT
- BERT
**BERT(Bidirectional Encoder Representations from Transformers)是一种基于Transformer架构的自然语言处理(NLP)预训练模型。**它由Google AI研究团队在2018年推出,并迅速成为了NLP领域的重大突破。
**BERT的核心特点在于它的双向训练策略。传统的语言模型可能只从左到右或从右到左处理文本,而BERT通过预训练步骤来同时考虑上下文中的左侧和右侧信息,这允许它更好地理解单词的含义。**这种双向理解是通过在训练过程中随机遮蔽掉一些单词然后预测这些单词来实现的,这个过程称为“遮蔽语言模型”(Masked Language Model,MLM)。
此外,**BERT还使用了一个名为“下一句预测”(Next Sentence Prediction,NSP)的任务,它会预测两个句子是否在原始文本中相邻。**这个特性让BERT在理解句子关系方面尤为有效,这对于问答回答、自然语言推理等任务至关重要。
BERT模型的另一个优势是其可转移性。一旦预训练完成,它可以被微调(fine-tuned)用于各种语言理解任务,如情感分析、问答系统、机器翻译等,通常只需很少的调整就能达到出色的性能。
- BERT训练
**BERT主要采用掩码语言模型(masked language model,对应图Mask LM)和下一句预测任务(next sentence prediction,对应图NSP)进行预训练,使得模型能够学习到上下文关系和词汇语义。**预训练好的BERT可以用于对输入文本进行编码,得到具有语义的向量表示。
预训练好的BERT也可以通过微调(fine-tuning)方式适配各类NLP任务:The Stanford Question Answering
Dataset问答(SQuAD)、命名实体识别(NER)、MNLI任务(大规模分类任务,目标是预测第二个句子相对于第一个句子是包含,矛盾还是中立)
- BERT表示能力
**这张图描绘的是BERT(Bidirectional Encoder Representations from Transformers)模型的核心概念,将自然语言文本从其原始的符号表示(Symbolic Space)转换为高维的向量空间表示(Latent Space)。**左侧显示的是原始文本数据,包含了字母和符号,它们构成了文本的最基本单位,即符号级别的表示。
图中心的脑形图案象征性地表示了BERT模型的网络架构,这强调了模型采用深度学习中的神经网络来处理文本数据。BERT利用了Transformer架构中的自注意力机制(self-attention mechanisms),以及位置编码(positional encoding),实现了对词语在不同上下文中含义的动态编码。
右侧的散点图是词嵌入(word embeddings)的可视化,显示了通过BERT模型转换得到的高维向量在降维后的分布。每个点代表一个词语在潜在空间中的位置,而相近的点表明词语在语义上或语法上具有相似性。不同颜色的聚类可能表示不同的词群或概念类别。
-
GPT
**GPT,全称为“Generative Pre-trained Transformer”,是一个由OpenAI开发的自然语言处理模型,旨在生成连贯和相关的文本。**GPT属于预训练语言模型的范畴,它首先在大量文本数据上进行预训练,学习语言的通用模式和结构,然后可以在具体的任务上进行微调,以优化对特定任务的性能。
GPT系列模型特别注重生成性能,也就是它不仅能理解输入的文本,还能基于这些理解自主生成新的文本段落。例如,它可以用于写故事、作诗、编写新闻文章、生成代码或者回答问题。
**GPT模型使用了Transformer的架构,但与BERT不同,GPT主要使用了解码器(Decoder)部分。它的工作原理是通过给定的文本片段来预测接下来的单词,实现自回归(autoregressive)语言生成。**GPT-3是该系列模型中最为人所熟知的版本,因其巨大的参数规模和广泛的应用能力,成为了业界的一个标杆。
GPT模型的关键在于其能够捕捉长距离的依赖关系,并且具有较强的泛化能力,这让它在未见过的文本上也能做出合理的预测。此外,GPT的生成能力使其在对话系统、文本摘要、语言翻译等各种NLP任务上表现出色。
-
区别
GPT像是一个喜欢写作的学生,它通过看很多书、文章来学习如何写故事。它先读一个句子,然后尝试猜测下一个单词会是什么。通过这样不断地练习,GPT变得很擅长继续故事,甚至能写出整篇文章。
BERT则更像是一个研究句子结构的学生。它不仅读书,还会仔细研究每个句子,尝试理解每个词在句子中的角色。BERT的练习方法是,有时它会在句子中遮住一些词,然后尝试猜出这些词是什么。这让BERT非常擅长理解每个词的意义,即使它们被放在了不同的句子中。
GPT是一个自回归语言模型,采用Transformer的解码器架构,它在预训练阶段通过语言模型目标来学习语言生成,即顺序地预测下一个单词。GPT在下游任务中可以生成连贯的文本,因此适用于文本生成类任务,如内容创作、对话生成等。
BERT则采用Transformer的编码器结构,通过遮蔽语言模型(Masked Language Model, MLM)和下一句预测(Next Sentence Prediction, NSP)来预训练。BERT通过同时考虑句子中所有词的上下文,能够更好地捕捉双向的上下文信息,这使得它在理解语言上下文方面表现更为出色,适用于文本分类、问答系统、命名实体识别等任务。
综上所述,**GPT的强项在于文本的连续生成,而BERT的强项在于对上下文的深度理解和处理。**两者都是基于大规模数据集预训练得到的模型,但它们的预训练目标和结构设计使它们各自适合于不同的NLP应用。
特征 | GPT | BERT |
---|---|---|
模型类型 | 生成预训练变换器(Generative Pre-trained Transformer) | 双向编码器表示变换器(Bidirectional Encoder Representations from Transformers) |
架构 | 仅解码器的变换器架构 | 仅编码器的变换器架构 |
预训练任务 | 自回归语言建模(预测序列中的下一个词) | 遮蔽语言模型(预测序列中的遮蔽词),下一句预测 |
上下文理解 | 单向(向前看)上下文 | 双向上下文 |
文本生成 | 优秀(为生成连贯且上下文相关的文本而设计) | 不专为文本生成设计,侧重于理解 |
典型应用 | 内容创作、对话系统、语言翻译 | 文本分类、问答系统、命名实体识别 |
3. 赋予模型精准性与可解释性
- 模型内部本质上是基于统计的文字生成器
通过对海量文本的学习,自动构建了一个含有1750 亿参数的大模型,建立了对这个世界基本的逻辑认知,由此产生了基于逻辑的推理能力。
实际上是根据对话中的最近 4095 个记号,算出紧接着最可能是哪个记号。但,ChatGPT ≠ 模型,模型负责把最近的对话内容翻译为一张概率表ChatGPT 负责根据这张表选出下一个记号,再让模型算再下一个记号的概率表。
- 可以理解为高阶的马尔可夫链
马尔可夫链(Markov Chain)是一个数学系统,它经历从一个状态到另一个状态的转换,这些转换是随机的。这个系统中的特点是,下一个状态的选择只依赖于当前状态,而与如何到达当前状态的过程无关。
想象一下你在玩一个跳格子的游戏,每次你只能跳到下一个格子或者停在原地,并且每一步你跳到哪个格子是随机的。但这个游戏有个规则,你下一步跳哪个格子只取决于你现在站的格子,和你之前是怎么跳过来的没有关系。这就是马尔可夫链的基本思想——未来的状态只依赖于当前的状态。
ChatGPT根据前 4095 个记号猜下一个记号,所以是一个 4095 阶的马尔可夫链
- 概念:嵌入向量(embedding vector)
**在GPT里面,把一个记号作为一个 N 维浮点数向量来表示。**这种用一个向量来表示一个单词或记号的方法按神经网络的术语就叫做嵌入。
一个单词对应的向量叫这个单词的嵌入向量,把每个单词或记号(token)在 GPT 内部都会通过一层简单的神经网络映射层对应到一个嵌入向量,这个向量代表了记号的语言特征。
GPT-3 是 1600 维,GPT-3.5 2048 维。
- 位置信息的引入
使用Transformer摆脱了人工标注数据集的缺陷,模型在质量上更优、更易于并行化,所需训练时间明显更少。
• 第一步:将离散的顺序号转换成一个与嵌入向量长度相同的向量,称为位置编码(positional encoding)
• 第二步:将位置编码与嵌入向量相加(即对应的元素相加),结果作为后续处理的输入向量
• 第三步:输入向量会被送到多层Transformer进行后续处理,每层Transformer的参数不同,但都会让输入先经过一个线性投影层
• 第四步:线性投影层将输入向量投影到另一个维度空间,剔除不重要的维度,将高维向量简化为低维向量
-
相加以后两者编码为何不混淆?
-
位置编码
位置编码在Transformer模型中是至关重要的,因为Transformer自身并不具有捕捉序列中位置关系的能力。通过位置编码,模型能够理解单词在句子中的顺序,这对于理解语言非常重要。
当位置编码被加到嵌入向量上时,它并不会让原有的嵌入向量信息消失,而是为嵌入向量增加了顺序的信息。这就像是给每个单词装上了一个带有位置感应器的背包,即便所有单词被放在一起,模型仍然可以通过这个背包感知到每个单词原来的位置。
**在处理过程中,尽管位置信息和嵌入向量混合在一起了,但因为位置编码是以一种系统的方式添加的(通常是基于正弦和余弦函数的固定模式),模型可以通过学习这个系统的模式来辨别出哪些信息是来源于原始嵌入向量的,哪些是位置信息。**这就好比即使背包被涂上了相同的颜色,你仍然可以通过背包的型号和大小来识别它。
在多层Transformer的处理过程中,模型会使用自注意力机制来计算输入向量之间的关系,其中就考虑到了位置编码的信息。而当模型经过足够的训练后,它就能够准确地基于混合后的向量进行预测或生成文本,因为它已经学会了如何解读包含位置信息的嵌入向量。
在Transformer模型中,位置编码是一种计算机科学的策略,用于在没有循环和卷积结构的情况下,向模型提供序列数据中各个元素的位置信息。由于Transformer的自注意力机制并不自然地编码位置信息,因此需要显式地将位置信息融入模型以确保序列顺序的保留。
位置编码通常采用正弦和余弦函数的固定模式来生成。对于每个位置i,生成一系列的正弦和余弦值,其中每个维度d的位置编码可以通过以下公式计算:
这里,pos代表词语在序列中的位置,i代表嵌入向量中的维度索引,而dmodel是嵌入向量的维度。
这种基于正弦和余弦函数的编码方式有几个好处:
- 它可以支持模型处理比训练期间观察到的序列更长的序列,因为正弦和余弦函数是周期性的,模型可以推断出未见过位置的编码。
- 对于任意固定的偏移量k,PEpos+k可以表示为PEpos的线性函数,这使得模型能够很容易地通过学习这些线性关系来理解位置之间的相对关系。
当这些位置编码被加到词嵌入向量上后,模型在执行自注意力机制时,能够结合使用来自词嵌入的语义信息和来自位置编码的顺序信息,以便在输出中维持词汇的顺序依赖关系。
想象一下,你有一排房子(代表文字中的单词),每个房子都有一个门牌号(代表单词的位置)。在Transformer的世界里,门牌号很特别,它们不仅告诉你每个房子的顺序,还能告诉你房子之间的距离。但问题是,Transformer本身不能看到这些门牌号,它只能感觉到房子(单词)。
为了解决这个问题,我们给每个房子的门口都装上一个特别的灯(位置编码),这个灯会根据门牌号的不同,发出不同颜色和亮度的光。而这些灯的亮度和颜色是按照一个特别的模式变化的,比如隔一个就换一种颜色,亮度每隔几个就会加强。这样,即使Transformer不能直接看到门牌号,它也能通过这些灯光的模式来理解每个房子的位置。
现在,**每当有人(模型)从这排房子走过,他们就能通过观察灯光的变化来记住每个房子的顺序。即使有些房子的灯坏了,他们也能通过周围房子灯光的模式来猜出这个房子应该是哪个门牌号。**在Transformer模型里,这就是位置编码的作用——它帮助模型记住单词在句子中的位置,让整个句子的意思更准确。
-
区分
Transformer在训练过程中,通过大量的数据迭代,逐渐学会如何区分这两种类型的信息,并且能够使用它们进行有效的语言处理任务。
在Transformer模型的训练过程中,模型确实是通过大量数据的迭代学习来逐渐区分单词的嵌入向量和位置编码的信息。
这个学习过程可以这样理解:
- 初始化:一开始,模型对如何处理这两种信息并不了解,所以它的表现可能并不理想。
- 迭代训练:随着训练的进行,模型会不断地接触到各种不同的句子和单词排列。通过自注意力机制和其他网络层的计算,模型开始学习到哪些信息是单词本身的含义,哪些信息是单词在句子中的位置。
- 优化和调整:通过损失函数的反向传播,模型会不断调整自身的参数,以更好地区分和处理这两种信息。例如,模型可能会学习到如何根据位置编码的模式来调整自己的注意力权重,从而更准确地捕捉单词间的关系。
- 掌握和应用:经过足够多次的迭代后,模型会变得越来越擅长区分嵌入向量和位置编码,并能够有效地利用这两种信息来完成语言处理任务,比如翻译句子、回答问题等。
-
ChatGPT待优化的部分
- 可信性无法保证,还不能提供合理的证据进行可信性验证
- 成本高、部署困难、每次调用花费不菲,对工程能力有很高的要求,GPT-3 模型的训练成本在875万 -1093.75万美元之间
- 因为数据的偏见性,很可能生成有害内容
- 时效性差,无法实时地融入新知识,知识范围局限于基础大规模语言模型使用的预训练数据时间之前
- 在特定的专业领域上表现欠佳,训练数据是通用数据,没有领域专业数据
- 反映的是标注人员的偏好,在标注人员分布不均的情况下,可能会引入新的偏见问题
-
如何让ChatGPT更靠谱
- temperature参数
在机器学习和深度学习领域,特别是在生成模型(如循环神经网络RNN、长短期记忆网络LSTM、Transformer等)的应用中,"temperature"参数是一个调节生成样本多样性的技术,它影响着概率分布的熵(entropy)。
当我们谈论"temperature"时,我们通常是在讨论一个调整采样策略的参数,这个参数用于控制生成过程中的随机性程度。具体来说,"temperature"参数影响着模型输出的概率分布,进而影响从这些概率分布中采样生成的决策。
在数学上,"temperature"参数通过调整模型输出的概率分布来进行工作。如果我们有一个原始概率分布 P,其中 P 是模型对于所有可能输出的原始概率评分,那么在应用了"temperature"参数 T 之后,新的概率分布 P′P′ 可以通过以下公式计算得出:
在这个公式中,P(x)1/T 表示对原始概率 P(x) 进行 1/T 次幂的转换,而分母则是对所有可能输出的转换后概率求和,用于归一化新的概率分布。
-
当 T=1 时,P′(x) 与 P(x) 相同,这意味着没有对原始概率分布进行调整。
-
当 T>1 时,较低的概率值会被放大,使得低概率事件更有可能发生,这增加了生成结果的多样性和随机性。
-
当 T<1 时,较高的概率值会被放大,使得高概率事件更有可能发生,这降低了生成结果的多样性,使得输出更加确定和一致。
-
Temperature值 影响描述 生成结果特点 T > 1 增加随机性 生成的内容更加多样化和不可预测,可能会产生一些新颖的想法,但也可能出现不相关或不合逻辑的输出。 T = 1 标准采样 生成的内容遵循模型的原始概率分布,结果较为稳定和可预测,平衡了创造性和连贯性。 0 < T < 1 降低随机性 生成的内容倾向于选择更高概率的输出,从而提高了结果的连贯性和一致性,但可能会牺牲一些多样性和创造性。 T = 0 最小随机性 生成的内容完全确定性,只选择最高概率的输出,结果高度一致和可预测,但缺乏创造性和多样性。 -
top_p参数
在机器学习领域,特别是在文本生成等生成模型的应用中,
top_p
参数是一种采样策略,用于在生成过程中控制输出的多样性和连贯性。top_p
采样,也被称为nucleus采样(Nucleus Sampling),是一种介于贪婪解码(Greedy Decoding)和随机采样(Random Sampling)之间的方法。top_p
采样的工作机制如下:- 计算累积概率:对于模型在每一步生成的词汇表中所有可能的下一个词,计算它们的概率,并累加这些概率直到累积概率达到预设的阈值
p
。这里的p
是top_p
参数的值,通常是一个介于0到1之间的数。 - 选择候选词汇:在累积概率达到阈值
p
的范围内,选择所有词汇作为候选词汇。这意味着,如果top_p
的值设置为0.9,那么所有累积概率排在前90%的词汇都会被考虑作为下一步的候选词。 - 从候选集中随机选择:在这些候选词汇中,根据它们的相对概率进行随机选择,以生成最终的输出词。这意味着更高概率的词被选中的机会更大,但低概率的词也有一定的机会被选中。
top_p值范围 模型生成内容的创新性描述 0.0 - 0.3 输出将非常确定,很可能重复历史模式,创新性和多样性较低。 0.3 - 0.6 创新性和多样性有所提高,但仍然在一定范围内有保守性。 0.6 - 0.9 创新性和多样性进一步增大,输出可能具有更多未见过的组合及表达方式。 0.9 - 1.0 最大化了创新性和多样性,但准确性可能会有所降低。 -
大模型精确性提升思路:知识嵌入
大模型语言本身具有很强的语言理解或生成能力,然而为了提高其叙述内容的真实性和严谨性,需要采用特定的技术路线,例如将知识图谱中的事实描述融入大模型的训练过程中。
知识嵌入:Zhang等人通过将知识图谱的表示向量加入到BERT中对应的tokens编码内,从而使得模型学习到与知识相关的事实信息,增强了模型在相应知识领域的准确性。
**机器学习中的知识嵌入(Knowledge Embedding)是一种技术,旨在将知识以高效、可计算的形式表示,通常是通过将实体和关系映射到低维的、连续的向量空间中。**这种表示方式让机器可以更容易地处理、推理和预测知识图谱(Knowledge Graphs)或其他形式的结构化知识库中的信息。知识嵌入的目的是捕捉实体之间的语义关系,并以数学上便于操作的形式表达这些关系,从而支持各种机器学习和人工智能应用,如问答系统、推荐系统和自然语言处理等。
**张等人提出的方法通过将知识图谱的表示向量整合到BERT模型的token编码中,实现了一种有效的知识增强型语言模型。**这种方法的核心思想是利用知识图谱中丰富的结构化知识来提升模型对特定领域知识的理解和准确性。下面是这种方法的具体介绍和实现思路:
图中的 (a) 部分:模型架构
- T-Encoder(文本编码器):
- 这部分负责处理输入的文本(例如句子或文档),它使用了多层的Transformer结构(这是BERT和许多其他现代NLP模型使用的核心技术)。Transformer可以捕捉文本中单词之间的关系,如它们的顺序和语义联系。
- 每层Transformer包含两个主要部分:Multi-Head Attention(多头注意力机制)和Feed Forward(前馈网络)。Multi-Head Attention帮助模型理解每个单词与句子中其他单词的关系,而Feed Forward则处理每个单词的具体信息。
- K-Encoder(知识编码器):
- 这部分处理知识图谱中的实体信息,可能是关于人、地点、事物等的结构化数据。K-Encoder也使用Multi-Head Attention来处理实体间的关系和实体自身的特性。
- Aggregator(聚合器):
- Aggregator的作用是结合文本编码器和知识编码器的输出。它通过一个复杂的过程,叫做Information Fusion(信息融合),将两种类型的信息融合在一起。这使得最终的输出不仅包含了文本的语义信息,还有来自知识图谱的结构化数据。
图中的 (b) 部分:聚合器详细工作流程
-
输入阶段
-
Token Input:这里是模型接收的原始文本数据,例如句子“bob dylan wrote blowin’ in the wind 1962”。每个词(token)都会被模型转换为一个向量,这个向量包含了该词的语义信息。
-
Entity Input:与token输入并行,这里是模型接收的来自知识图谱的实体数据。在这个例子中,“Bob Dylan”和“Blowin’ in the Wind”被识别为实体,并且每个实体都有一个对应的向量表示。
-
-
多头注意力
-
**这部分是模型的核心,它使用了一种叫做“多头注意力机制”的技术。**这项技术允许模型在处理输入信息时考虑到不同的上下文关系。
-
在聚合器中,模型分别对文本中的tokens和知识图谱中的实体进行多头注意力处理。这意味着模型不仅在注意每个单词,还在注意每个实体以及实体与单词之间的相互作用。
-
-
信息融合
-
这是聚合器内部的一个重要步骤。信息融合指的是结合两种类型的输入(Token Input和Entity Input)并处理它们,以便输出更加丰富和综合的信息。
-
步骤
-
多头自注意力(Multi-Head Attention,MH-ATT):
- 这是一种机制,让模型能够同时从多个“角度”关注输入的数据。在这里,它被用于两个方面:一个是处理token(句子中的单词)的向量序列,另一个是处理entity(知识图谱中的实体)的向量序列。
- 每个“头”在注意力机制中关注不同部分的信息,这就像你有多个眼睛,每个眼睛看向不同方向,但所有眼睛获得的信息最后会结合在一起,给你一个全面的视角。
-
结合Token和Entity信息:
- 经过多头自注意力处理后,我们得到了对tokens和entities加强后的向量序列。
- 接着,我们使用特定的权重矩阵 Wt 和 We 来进一步结合这些信息。权重矩阵就像是过滤器,它决定了我们从token和entity向量中提取哪部分信息,以及这些信息的重要性。
-
加权和激活:
- 通过这些权重矩阵,我们对token和entity的向量进行加权,这样就把它们结合在了一起。加权后的向量通过一个激活函数(比如sigmoid或ReLU),这个函数会帮助我们捕捉非线性关系,并生成新的特征向量。
- 每个token和每个entity都会经过这样的处理,得到新的向量表示,这些新的向量包含了原始文本数据和知识数据的综合信息。
-
输出:
- 经过上述处理后,我们得到了新的token向量序列和entity向量序列,它们已经结合了文本信息和知识信息,这对于模型来说是非常宝贵的。
- 最后,这些结合了知识信息的token向量可以被用于各种NLP任务,比如问答系统、文本分类、实体识别等,因为它们现在已经融入了更深层次的知识。
-
-
具体算法
-
- 第一个公式 :
这个公式是在计算一个“隐藏”向量
h_j
。它首先取文本的向量\tilde{w}_j^{(i)}
和知识图谱实体的向量\tilde{e}_k^{(i)}
,分别与它们的权重矩阵\tilde{W}_t
和\tilde{W}_e
相乘,这些权重矩阵定义了如何将输入向量映射到新的空间。然后,它将这两个乘积相加,并加上偏置向量
\tilde{b}^{(i)}
。最后,结果通过一个激活函数\sigma
(比如ReLU或sigmoid),这个激活函数的作用是引入非线性,使得神经网络可以捕捉更复杂的模式。 -
- 第二个公式 :
这个公式是在更新文本的向量
\tilde{w}_j^{(i)}
。它使用新计算出的隐藏向量h_j
,通过另一个权重矩阵W_t^{(i)}
进行变换,再加上对应的偏置向量b_t^{(i)}
。结果同样通过激活函数
\sigma
,产生更新后的文本特征向量。 -
- 第三个公式 :
类似地,这个公式是在更新知识图谱实体的向量
\tilde{e}_k^{(i)}
。它也是使用隐藏向量h_j
,通过知识嵌入通过降维和向量化的方法,使得机器更容易处理复杂的知识结构,并能够用于各种机器学习任务中,如知识发现、语义搜索和关系预测等。 -
权重是通过长期的训练得到的
-
- T-Encoder(文本编码器):
-
大模型精确性提升思路:知识预测
-
知识图谱应用于大模型训练后阶段:Liu等人提出了知识生成式大模型提示方法,让模型进行知识预测,通过将知识图谱的三元组形式转化成Question and answer的形式,让模型生成一些知识,然后将这些知识进行聚合,从而得到最终的更为精确靠谱的结果。模型在数值常识(NumerSense)、一般常识(CommonsenseQA 2.0)和科学常识(QASC)基准测试中进行实验,得出了将外部知识融入到大模型中能够提升其常识推理任务的精度的结论。
-
步骤
- 知识图谱转换:首先,他们将知识图谱中的三元组(实体-关系-实体)转换为问答(Q&A)的形式。比如,三元组“(阿姆斯特丹, 是, 荷兰的首都)”可以转换为问题“阿姆斯特丹是什么国家的首都?”以及答案“荷兰”。
- 知识生成:接着,使用大模型的提示(prompting)能力,根据这些转换后的问答形式提示模型生成新的知识。模型的生成任务是根据问题来生成答案,这个过程中模型可以在预先训练好的知识基础上进行推理,生成答案。
- 知识聚合:然后,将模型生成的知识进行聚合,这可能涉及多个答案的合成、筛选最可靠的答案或整合答案中的信息,从而得到更精确、靠谱的结果。
- 模型训练和微调:将这些生成和聚合的知识反馈到模型的训练过程中,通过微调来使模型更好地整合和利用这些知识。
- 基准测试:最后,为了评估知识融合对常识推理的影响,模型在一系列的基准测试中进行评估,这些测试涵盖不同类型的常识,包括数值常识(NumerSense)、一般常识(CommonsenseQA 2.0)和科学常识(QASC)。通过在这些基准测试上比较融合了知识与未融合知识的模型性能,可以量化外部知识融合对常识推理任务的影响。
-
大模型精确性提升思路:少样本提示
-
ChatGPT作为一种生成模型,存在一些问题。其中最主要的问题是不确定性和预训练语料库中存在的某些局限性,这可能导致ChatGPT在回答一些问题时存在时效性、事实性以及内容不合规等情况。[1]
少样本提示:尽管大型语言模型展现出惊人的零样本能力(泛化能力),但在复杂的任务中使用零样本设置时仍然表现不佳。为了提高模型的性能,我们可以采用少样本提示技术来启发上下文学习。这种技术可以通过给模型提供示例演示来引导其生成更好的响应。演示作为后续示例的条件,可以有效地提高模型的准确性和可靠性。
-
步骤
- 任务定义:首先,定义模型需要完成的具体任务。这可以是分类、生成文本、回答问题等。
- 样本选择:然后,选择一小部分高质量的样本,这些样本代表了你希望模型学习的任务。对于ChatGPT,这些样本通常以对话或文本片段的形式出现。
- 提示构建:接着,创建一个“提示”或“引导”,这是一个上下文框架,里面嵌入了你选择的样本。这个提示向模型展示了如何处理这些样本,从而使其能够更好地理解接下来的输入。
- 模型生成:模型会接受这个带有样本的提示,然后尝试生成或预测与提供的样本类似的输出。因为这些样本是相关任务的具体例子,它们帮助模型理解预期的输出格式和内容类型。
- 迭代优化:可能需要多次迭代,通过调整样本和提示来改进模型的性能。评估模型的输出,并根据需要调整提示。
-
-
大模型精确性提升思路:自我一致性
-
由于ChatGPT的训练机制主要专注于“单字接龙”,其在涉及算术和常识推理的任务中的精确性仍有待提升。
自我一致性:由Wang等人提出,其核心思想是在链式思考的prompt[1]基础上,通过采样适量的多个不同推理路径,根据这些方案的一致性情况得出最合理的结果,从而提高模型的准确性和可靠性。
-
具体原理
- 步骤
- 链式思考的提示(Chain-of-thought prompting):
- 这个步骤包括创造一个提示,它不仅仅是要求模型提供答案,而是要求模型展示它的“思考过程”或推理链。例如,如果问一个数学问题,模型不仅给出答案,而是详细解释解决问题的步骤。
- 多路径采样(Sampling multiple reasoning paths):
- 模型被要求多次解决相同的问题,每次可能会采用略微不同的推理路径。这些不同的解释可能会因为模型的随机性而在每次运行时产生变化。
- 通过这种方式,模型生成了多种可能的答案和推理路径,而不是依赖单一的输出。
- 一致性评估(Consistency evaluation):
- 然后,从所有的推理路径中评估哪些答案是一致的。一致性可以根据答案是否重复、推理路径是否逻辑一致来判断。
- 模型可能给出多个答案,但只有那些在多次推理中都出现的答案才被认为是自我一致的。
- 结果选择(Choosing the most consistent result):
- 在多个答案中选择最一致的答案作为最终答案。如果一个答案在多个推理路径中都出现了,那么它可能是最可靠的答案。
- 这种方法增加了模型回答复杂问题时的准确性,因为它减少了随机猜测的影响。
-
-
大模型精确性提升思路:提示语工程
-
通过适当的Prompt engineering,可以提升ChatGPT在相应任务上的精确性。
ImpressionGPT:使用“动态prompt” 来构建具有相似诊断报告的“动态上下文” 环境;对生成的报告进行评估,利用评估结果来指导ChatGPT 生成增强的响应,让ChatGPT能够从好样本和坏样本中学习到相关内容。[1]
-
步骤
- 动态Prompt:
- 这种方法使用了动态的prompt来构建一个模拟医生根据患者信息撰写诊断报告的上下文环境。这意味着prompt是根据特定的患者数据和历史信息在生成过程中实时更新的。
- 评估生成报告:
- 生成的报告会被评估,看它们是否准确地反映了患者的情况和医生的诊断意见。
- 增强响应生成:
- 根据这些评估,ChatGPT会被指导去生成更高质量的响应。这可能包括从评估中了解到哪些答案是好的样本(即准确的诊断报告),哪些是坏的样本(即不准确的),并据此调整。
- 动态Prompt:
-
-
大模型精确性提升思路:RAG
- 检索增强生成技术(Retrieval-Augmented Generation,RAG)就是为了解决 LLM 与人类交互中存在的这两个问题提出来的一种解决方案。
- **RAG 技术将和 LLM 交互的过程划分成两个阶段,这两个阶段分别是检索上下文信息、LLM 利用上下文知识进行回答。**简单来说,就是首先使用检索技术,查找与用户问题最相关的文档,然后把文档和问题组合成提示词输入到模型中,由模型推理生成最终结果。
- 步骤
- 在众多关于 RAG 的研究中,尽管研究方法各有差异,但其基本流程大致相同。如下图所示,我们可以将 RAG 的流程划分为如下几个模块:
- 数据处理模块,将文本数据进行切分,生成不同的文本片段,作为候选的知识库。
- 向量存储模块,将知识库进行向量化并存储到向量数据库中,
- 向量检索模块,将用户的 query 进行向量化,并从数据库中检索 top k 相似向量,然后获取对应的文本片段。
- 大模型生成模块,根据文本片段和用户 query 拼装成提示词,输入到 LLM 中生成最终答案。
-