构建生产环境中的大型语言模型(LLMs)
探讨生产环境中大型语言模型(LLMs)的关键实践。首先分析幻觉与偏见的成因及缓解策略,如检索增强生成(RAG)和宪法 AI。其次介绍性能评估方法,包括困惑度指标及 GLUE、SuperGLUE 等基准测试。接着讲解解码技术与生成参数调整,如温度、Top-K 采样。最后阐述预训练与微调流程,涵盖指令微调、LoRA 及 RLHF 等技术,旨在帮助开发者构建准确、安全且高效的 LLM 应用系统。

探讨生产环境中大型语言模型(LLMs)的关键实践。首先分析幻觉与偏见的成因及缓解策略,如检索增强生成(RAG)和宪法 AI。其次介绍性能评估方法,包括困惑度指标及 GLUE、SuperGLUE 等基准测试。接着讲解解码技术与生成参数调整,如温度、Top-K 采样。最后阐述预训练与微调流程,涵盖指令微调、LoRA 及 RLHF 等技术,旨在帮助开发者构建准确、安全且高效的 LLM 应用系统。

在过去几年里,我们在人工智能领域取得了令人瞩目的成就,但现成的基础模型仍然存在限制,这些限制限制了它们在生产环境中的直接使用,即使是最简单的任务也是如此。LLM 的核心是从互联网上、书籍和文章中收集的大量数据中学习。虽然这些数据丰富而有信息量,但也充满了不准确性和社会偏见。在尝试理解这些数据时,LLM 有时会得出错误的结论,从而导致幻觉和偏见。解决、理解和解决这些问题将是人工智能广泛应用的关键步骤。
大型语言模型(LLM)中的幻觉是指模型生成的文本不正确且不符合现实。这种现象涉及模型自信地生成没有依据的响应。幻觉在 LLM 中的发生由几个因素导致:
以下是一个例子:Databricks 于 2023 年 4 月 12 日宣布了'Dolly 2.0',这是一个开源的 120 亿参数语言模型,使用一个创建的用于跟随人类指令的数据集进行微调。GPT-3.5 的训练数据截至 2022 年,因此对 Dolly 2 没有信息。当 GPT-3.5 被问到'Databricks 的 Dolly 对开源社区是否有价值?'时,它的回应可能是:GPT-3.5:Databricks Dolly 是 Databricks 的一项创作,旨在帮助用户在平台之间转移数据,特别是从本地数据中心到 AWS 或 Azure 等云平台。尽管 Databricks Dolly 不是开源的,但它可能在几个方面为开源社区提供了好处。除了正确识别'Databricks Dolly'是 Databricks 公司的产品外,这个回答还包含了几个不准确的地方。它错误地将 Dolly 呈现为数据迁移工具。然而,由于 GPT-3.5 知道 Databricks 是一家公司,它生成了一个听起来合理但不正确的 Dolly 2 描述,作为 Databricks 的典型产品。
这只是 OpenAI 的 GPT-3.5 中的一个幻觉示例,但这个问题并非仅限于该模型。所有类似的 LLM,如 Bard 或 LLaMA,也表现出这种行为。
大型语言模型(LLM)可能生成看似可信但在事实方面不准确的内容,原因在于它们有限的理解真相和验证事实的能力。这使得它们无意中容易传播错误信息。此外,有恶意意图的个人可能会故意利用 LLM 传播虚假信息,制造和放大虚假叙事。根据 Blackberry 的一项研究,大约 49% 的受访者认为 GPT-4 可能被用于传播错误信息。通过 LLM 不受控制地发布这种不准确的信息可能对社会、文化、经济和政治领域产生深远的影响。解决与 LLM 幻觉相关的这些挑战对于模型的伦理应用至关重要。
减少幻觉的一些策略包括调整指导文本生成的参数、改善训练数据的质量、精心编写提示和使用检索器架构。检索器架构帮助将响应锚定在特定文档中,为模型的输出提供现实基础。
参数如温度、频率惩罚、出现惩罚和 top-p 对 LLM 输出有显著影响。较低的温度值会导致更可预测和可复现的响应。频率惩罚使得模型在生成过程中更少重复使用相同的词汇。增加出现惩罚会促使模型生成新的、之前未出现过的词汇。参数'top-p'通过定义选择词汇的累积概率阈值来控制响应的多样性,从而定制模型的响应范围。所有这些因素都有助于降低幻觉的风险。
通过外部文档整合领域特定的知识,可以提高 LLM 的准确性。此过程更新了模型的知识库,使其能够基于新的知识库生成响应。当提交查询时,通过'检索器'模块检索相关文档,从而改进模型的回应。这种方法是检索器架构的核心部分,这些架构的工作原理如下:
检索增强生成(RAG)是一种通过添加来自外部来源的数据来增强语言模型能力的技术。这些信息与模型提示中已经包含的上下文相结合,使模型能够提供更准确和相关的响应。
在生成阶段访问外部数据源显著改善了模型的知识基础和基础。这种方法通过引导模型生成准确和上下文适当的响应,减少了模型产生幻觉的可能性。
大型语言模型(LLMs),包括 GPT-3.5 和 GPT-4,引发了显著的隐私和伦理问题。研究表明,这些模型可能存在内在偏见,从而生成带有偏见或冒犯性的语言。这加剧了与它们的应用和监管相关的问题。
LLM 的偏见源于多种因素,包括数据、标注过程、输入表示、模型以及研究方法。
训练数据缺乏语言多样性可能导致人口统计偏见。大型语言模型可能无意中从其训练数据中学习到刻板印象,从而产生基于种族、性别、宗教和民族的歧视性内容。例如,如果训练数据中包含偏见信息,LLM 可能会生成将女性描绘为从属角色或将某些民族描述为天生暴力或不可靠的内容。同样,基于仇恨言论或有毒内容的数据训练模型可能会产生有害输出,强化负面刻板印象和偏见。
宪法 AI 是由 Anthropic 研究人员开发的一个框架,旨在使 AI 系统符合人类价值观,重点在于使其有益、安全和可信。
最初,模型通过一组既定原则和有限的示例进行训练,以评估和调整其响应。随后进行强化学习训练,在此过程中,模型使用基于这些原则生成的 AI 反馈来选择最合适的回应,从而减少对人工反馈的依赖。
宪法 AI 采用自我监督训练等方法,使 AI 能够适应其指导原则,而无需直接的人类监督。
该策略还创建了约束优化技术,确保 AI 在其宪法设定的参数内追求有用性。为了行动、减少偏见和幻觉,并改善结果,我们首先需要评估模型的表现。这是通过统一的基准和评估过程来完成的。
大型语言模型的进步依赖于准确评估其在基准测试中的表现。准确评估 LLM 性能需要采用多方面的方法,结合各种基准和指标来衡量其在不同任务和领域中的能力。
目标函数和评估指标是机器学习模型的关键组成部分。
目标函数或损失函数是模型训练阶段应用的关键数学公式。它根据模型参数分配一个损失分数。在训练过程中,学习算法计算损失函数的梯度,并调整模型参数以最小化该分数。因此,损失函数应具有可微性,并具备光滑的形式以便于有效学习。
交叉熵损失是大型语言模型(LLMs)常用的目标函数。在因果语言建模中,模型从预定列表中预测下一个标记,这实质上转化为分类问题。
评估指标是用来以人类易于理解的方式衡量模型性能的工具。这些指标在训练过程中并未直接应用,因此不一定需要可微性,因为其梯度并不要求。常见的评估指标包括准确率、精确率、召回率、F1 分数和均方误差。对于大型语言模型(LLMs),评估指标可以分为:
困惑度指标用于评估大型语言模型(LLMs)的性能。它评估语言模型预测特定样本或词序列(如句子)的有效性。困惑度值越低,表示语言模型的能力越强。
LLMs 旨在模拟句子中词汇的概率分布,使其能够生成类似人类的句子。困惑度衡量模型在确定词序列的概率时遇到的'不确定性'或'困惑'。
测量困惑度的第一步是计算句子的概率。这是通过将分配给每个词的概率相乘来完成的。由于较长的句子通常会导致较低的概率(由于多个小于 1 的因素相乘),困惑度引入了归一化。归一化通过将概率除以句子的词数并计算几何平均数,使得不同长度句子之间的比较更有意义。
考虑以下示例:一个语言模型被训练来预测句子中的下一个词:'一只红狐狸'。一个合格的 LLM 对这个句子的预测词概率可能如下:
P('a red fox.') = P('a') * P('red' | 'a') * P('fox' | 'a red') * P('.' | 'a red fox') P('a red fox.') = 0.4 * 0.27 * 0.55 * 0.79 P('a red fox.') = 0.0469
为了有效比较不同句子的概率,考虑句子长度对这些概率的影响。通常,由于多个因素相乘,每个因素小于 1,句子的概率会降低。这可以通过一种测量句子概率而不依赖于句子长度的方法来解决。
将句子概率按词数归一化也可以缓解句子长度变化的影响。这种技术对构成句子概率的多个因素进行平均,从而提供更平衡的比较。有关更多信息,请参阅维基百科上的'几何平均数'页面。
我们称 Pnorm(W) 为句子 W 的归一化概率。让 n 为 W 中的词数。那么,应用几何平均数:Pnorm(W) = P(W) ^ (1 / n)
对于我们特定的句子,'一只红狐狸':Pnorm('a red fox.') = P('a red fox') ^ (1 / 4) = 0.465
这个值现在可以用来比较不同长度句子的可能性。语言模型越好,这个值越高。
这与困惑度有什么关系?困惑度只是这个值的倒数。我们称 PP(W) 为句子 W 的困惑度。那么:PP(W) = 1 / Pnorm(W) PP(W) = 1 / (P(W) ^ (1 / n)) PP(W) = (1 / P(W)) ^ (1 / n)
用 numpy 计算:
import numpy as np
probabilities = np.array([0.4, 0.27, 0.55, 0.79])
sentence_probability = probabilities.prod()
sentence_probability_normalized = sentence_probability ** (1 / len(probabilities))
perplexity = 1 / sentence_probability_normalized
print(perplexity) # 2.1485556947850033
如果我们进一步训练 LLM,下一个最佳词的概率会变得更高。最终的困惑度会更高还是更低?
probabilities = np.array([0.7, 0.5, 0.6, 0.9])
sentence_probability = probabilities.prod()
sentence_probability_normalized = sentence_probability ** (1 / len(probabilities))
perplexity = 1 / sentence_probability_normalized
print(perplexity) # 1.516647134682679 -> 更低
通用语言理解评估(GLUE)基准包含九个不同的英语句子理解任务,分为三类:
GLUE 的整体得分通过平均所有九个任务的结果计算得出。GLUE 是评估和理解不同 NLP 模型的优缺点的综合平台。
SuperGLUE 基准是对 GLUE 基准的升级,引入了更复杂的任务来挑战当前的 NLP 方法。SuperGLUE 的显著特点包括:
BIG-Bench 基准是一个综合而多样的评估平台,用于评估 LLM 的能力。它包含 204 多个语言任务,涵盖不同主题和语言,提出了当前模型无法完全解决的挑战。
BIG-Bench 提供两类任务:JSON 任务和编程任务。JSON 任务通过比较输出和目标对来评估,而编程任务则使用 Python 评估文本生成和条件对数概率。这些任务包括代码编写、常识推理、游戏玩法、语言学等。
研究表明,更大的模型通常表现出更好的综合性能,但仍未达到人类能力水平。此外,随着规模的增加和稀疏性的引入,模型预测的准确性会提高。
BIG-Bench 被视为'活跃基准',持续接受新的任务提交以进行同行评审。该基准的代码是开源的,并可在 GitHub 上访问。
语言模型的整体评估(HELM)基准旨在解决比较语言模型的全面标准需求。HELM 基于三个主要组件构建:
FLASK(基于对齐技能集的细粒度语言模型评估)基准是针对大型语言模型(LLMs)的详细评估协议。它将评估过程划分为 12 个不同的实例技能集,每个技能集代表模型能力的一个重要维度。
这些技能集包括逻辑正确性、逻辑效率、事实性、常识理解、理解力、洞察力、完整性、元认知、可读性、简洁性和无害性。
通过将评估划分为特定的技能集,FLASK 有助于对模型在各种任务、领域和难度水平上的表现进行精确和深入的评估。这种方法提供了对语言模型的优缺点的详细和细致的洞察,并帮助研究人员/开发人员以集中方式改进模型,解决 NLP 中的特定挑战。
解码方法是大型语言模型(LLM)用于文本生成的核心技术。在解码过程中,LLM 会给每个词汇标记分配一个分数,分数越高,表示该标记作为下一个选择的可能性越大。模型在训练过程中学习的模式决定了这些分数。
然而,最高概率的标记并不总是最适合的下一个标记。选择第一个步骤中的最高概率标记可能会导致后续标记的概率较低,从而导致整体联合概率较低。相反,选择一个略低概率的标记可能会在接下来的步骤中导致更高概率的标记,从而整体实现更高的联合概率。虽然理想,但计算所有词汇标记在多个步骤上的概率由于计算需求过高而不切实际。
以下解码方法旨在在以下两者之间找到平衡:
贪婪搜索是最基本的解码方法,模型总是选择下一个输出中最高概率的标记。贪婪搜索在计算上高效,但往往会产生重复或次优的响应。这是因为它优先考虑立即出现的最可能标记,而忽略了从长远来看输出的整体质量。
采样在文本生成中引入了随机性。在这里,模型根据标记的概率分布随机选择下一个词。这种方法可以产生更为多样化的输出。然而,由于选择并不仅仅基于最高概率,这可能会导致生成的文本有时缺乏连贯性或逻辑性。
束搜索是一种更高级的解码策略。它在每一步选择前 N 个最有可能的候选标记(N 是预定义的参数),但仅限于有限的步骤。最终,模型生成具有最高整体联合概率的序列(即束)。
这种方法缩小了搜索空间,通常导致更连贯的结果。束搜索可能较慢,并且不总是能产生最佳输出。它可能会错过高概率的词汇,特别是当它们前面是低概率词汇时。
Top-K 采样是一种技术,其中模型将选择池限制在 K 个最可能的词汇(K 是参数)。这种方法在文本中创造了多样性,通过减少选择范围确保相关性,并提供对输出的更好控制。
Top-p 或 Nucleus 采样从组合概率超过指定阈值 P(P 是参数)的最小标记组中选择词汇。这种技术通过排除稀有或不太可能的标记来实现精确的输出控制。这种方法的一个挑战是短名单的大小变化的不确定性。
除了解码方法,还有几个参数可以调整以影响文本生成。关键参数包括温度、停止序列、频率和存在惩罚,这些参数可以通过最受欢迎的 LLM API 和 Hugging Face 模型进行调整。
温度参数在平衡文本生成的不可预测性和确定性中至关重要。较低的温度设置生成的输出更具确定性和集中性,而较高的温度设置引入随机性,生成多样化的输出。这个参数通过在文本生成过程中调整 logits 来实现平衡,从而确保输出的多样性和质量之间的平衡。
Logits:语言模型预测过程的核心是生成 logit 向量。每个潜在的下一个标记都有一个对应的 logit,反映了它的初始未调整预测分数。
Softmax:这个函数将 logits 转化为概率。softmax 函数的一个关键特性是确保这些概率的总和为 1。
温度:这个参数决定了输出的随机性。在 softmax 阶段之前,logits 会被温度值除以。
总而言之,温度参数是一个控制多样性(高温度)和正确性(低温度)之间权衡的调节钮。
停止序列是指定的字符序列,一旦出现在输出中,便会终止文本生成过程。这些序列使得控制生成文本的长度和结构成为可能,确保输出符合规格要求。
频率和存在惩罚是管理生成文本中单词重复的机制。频率惩罚减少模型重复出现的标记的概率。存在惩罚则旨在防止模型重复任何在文本中出现过的标记,无论其频率如何。
预训练 LLMs 通过吸收大量的文本数据来获取知识,使它们能够执行各种语言相关任务。预训练的 LLMs 在互联网上收集的大规模文本数据集上进行训练,通过预测句子中的下一个词汇来磨练其语言技能。这种在数十亿句子上的广泛训练使它们能够发展对语法、上下文和语义的全面理解,从而有效地把握语言的细微差别。
预训练的 LLMs 在文本生成之外显示出多种任务的多功能性。这在 2020 年 GPT-3 论文《语言模型是少样本学习者》中尤为明显。研究揭示了足够大的 LLMs 是'少样本学习者'——能够仅使用少量的任务特定示例来理解用户需求的潜在逻辑,从而执行超越文本生成的任务。这一突破代表了自然语言处理(NLP)领域的重要进展,之前的 NLP 依赖于为每个任务分别训练的模型。
微调是提高预训练模型在特定任务上能力的必要技术。虽然预训练的大型语言模型(LLMs)对语言有深刻的理解,但通过微调可以充分发挥它们的潜力。
微调通过将 LLMs 暴露于特定任务的数据集,将其转化为专家。这使得预训练的模型能够调整其内部参数和表示,以更好地适应特定任务。这种量身定制的适应显著提高了它们在领域特定任务上的表现。例如,针对医学问答对数据集进行微调的模型将能高效地回答与医学相关的问题。
微调的需求源于预训练模型的通用性。虽然它们对语言有广泛的理解,但它们并不固有地具备特定任务的上下文。例如,在处理金融新闻的情感分析时,微调就显得尤为重要。
指令微调是一种不同的微调形式,通过对模型行为的控制,将其转化为通用助手。它旨在创建一个将提示理解为指令而非文本的 LLM。例如,考虑以下提示:
一个经过指令微调的 LLM 可能会将这个提示解释为指令,并给出以下回答:
然而,一个普通的 LLM 可能会认为我们是在为地理学生编写练习题,并继续生成最可能的标记,可能会产生一个新问题:
指令微调扩展了模型的能力。这个过程引导模型产生符合您愿景的结果。例如,当您提示模型'分析这段文本的情感并确定它是否积极'时,您通过明确的命令指导模型。通过指令微调,提供了明确的指示,雕刻了模型的行为,使其反映我们的目标。
指令微调通过使用指令训练模型在多个任务上。这使得 LLMs 能够通过附加的指令学习执行新任务。这种方法不需要大量任务特定的数据,而是依靠文本指令来指导学习过程。
传统的微调使模型熟悉与任务相关的特定数据集。指令微调则通过将明确的指令融入训练过程来进一步推进。这种方法赋予了开发人员更大的控制权,使他们能够塑造结果、鼓励特定行为,并指导模型的响应。
多种方法专注于用于微调的学习算法,例如:
虽然 LLMs 在某些任务上表现出色,但了解它们的局限性是广泛采用人工智能的关键步骤。当模型生成的文本不准确且与现实无关时,会发生'幻觉'。这种现象涉及模型在没有训练数据基础的情况下,自信地产生响应。制定有效的策略来应对这些挑战至关重要。这些策略应包括输入的预处理和控制措施、模型配置的调整、增强机制,以及增强上下文和知识的技术。融入伦理指南对于确保模型生成公平可信的输出至关重要。这是负责任使用这些先进技术的关键步骤。
在实践中,提高 LLM 效率需要准确评估其性能。目标函数和评估指标是机器学习模型的关键组件。目标或损失函数通过调整模型参数来引导算法减少损失分数。对于 LLMs,交叉熵损失是常用的目标函数。评估指标提供了对模型能力的可理解评估。困惑度(Perplexity)是一种内在指标,用于衡量 LLM 预测样本或词序列的能力。
LLM 评估涵盖了广泛的挑战,从了解模型理解和生成类似人类的文本的能力,到评估其执行特定任务(如语言翻译、摘要生成或问答)的能力。基准测试作为对模型进行测试的标准化任务或数据集,提供了比较不同架构和版本的基础。流行的评估基准包括 GLUE、SuperGLUE、BIG-bench、HELM 和 FLASK。同时,指标提供了可量化的性能测量,允许研究人员和开发人员评估模型行为的各个方面,如准确性、流利性、连贯性和效率。
评估策略测量输出的相关性,而解码方法、温度等参数、停止序列、频率和存在惩罚等参数,以及零样本和少样本提示等技术,在生成过程前/中提高模型的有效性。
解码方法是 LLMs 用于文本生成的基本技术。在解码过程中,LLM 为每个词汇标记分配一个分数,较高的分数表示该标记作为下一个选择的可能性更大。然而,最高概率的标记并不总是下一个标记的最佳选择。解码方法如贪婪搜索、采样、束搜索、Top-K 采样和 Top-p(核)采样旨在在立即选择概率最高的标记和允许一定的探索之间找到平衡。
参数如温度、停止序列、频率和存在惩罚以及参数对于精细化文本生成控制至关重要。调整这些参数可以使模型生成符合特定要求的输出,从确定性和集中性到多样性和创造性。
预训练为 LLMs 奠定了基础,通过暴露于大量文本数据。微调填补了通用理解和专业知识之间的差距,使 LLMs 能够在特定领域表现出色。指令微调将 LLMs 转化为可适应的助手,通过明确的指令对其行为进行精细控制。微调策略如完全微调和资源节约的低秩适配(LoRA),以及学习方法如监督微调(SFT)和来自人类反馈的强化学习(RLHF),各自提供了特定的优势。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online