|
|
@@ -106,7 +106,7 @@ N-gram 模型虽然简单有效,但有两个致命缺陷:
|
|
|
|
|
|
**(2)神经网络语言模型与词嵌入**
|
|
|
|
|
|
-N-gram 模型的根本缺陷在于它将词视为孤立、离散的符号。为了克服这个问题,研究者们转向了神经网络,并提出了一种思想:用连续的向量来表示词。2003年,Bengio 等人提出的**前馈神经网络语言模型 (Feedforward Neural Network Language Model)** 是这一领域的里程碑[1]。
|
|
|
+N-gram 模型的根本缺陷在于它将词视为孤立、离散的符号。为了克服这个问题,研究者们转向了神经网络,并提出了一种思想:用连续的向量来表示词。2003年,Bengio 等人提出的**前馈神经网络语言模型 (Feedforward Neural Network Language Model)** 是这一领域的里程碑^[1]^。
|
|
|
|
|
|
其核心思想可以分为两步:
|
|
|
|
|
|
@@ -166,7 +166,7 @@ king - man + woman 的结果向量: [0.9 0.2]
|
|
|
|
|
|
**(3)循环神经网络 (RNN) 与长短时记忆网络 (LSTM)**
|
|
|
|
|
|
-前一节的神经网络语言模型虽然引入了词嵌入解决了泛化问题,但它和 N-gram 模型一样,上下文窗口是固定大小的。为了预测下一个词,它只能看到前 n−1 个词,再早的历史信息就被丢弃了。这显然不符合我们人类理解语言的方式。为了打破固定窗口的限制,**循环神经网络 (Recurrent Neural Network, RNN)** 应运而生,其核心思想非常直观:为网络增加“记忆”能力[2]。
|
|
|
+前一节的神经网络语言模型虽然引入了词嵌入解决了泛化问题,但它和 N-gram 模型一样,上下文窗口是固定大小的。为了预测下一个词,它只能看到前 n−1 个词,再早的历史信息就被丢弃了。这显然不符合我们人类理解语言的方式。为了打破固定窗口的限制,**循环神经网络 (Recurrent Neural Network, RNN)** 应运而生,其核心思想非常直观:为网络增加“记忆”能力^[2]^。
|
|
|
|
|
|
如图3.3所示,RNN 的设计引入了一个**隐藏状态 (hidden state)** 向量,我们可以将其理解为网络的短期记忆。在处理序列的每一步,网络都会读取当前的输入词,并结合它上一刻的记忆(即上一个时间步的隐藏状态),然后生成一个新的记忆(即当前时间步的隐藏状态)传递给下一刻。这个循环往复的过程,使得信息可以在序列中不断向后传递。
|
|
|
|
|
|
@@ -177,7 +177,7 @@ king - man + woman 的结果向量: [0.9 0.2]
|
|
|
|
|
|
然而,标准的 RNN 在实践中存在一个严重的问题:**长期依赖问题 (Long-term Dependency Problem)**。在训练过程中,模型需要通过反向传播算法根据输出端的误差来调整网络深处的权重。对于 RNN 而言,序列的长度就是网络的深度。当序列很长时,梯度在从后向前传播的过程中会经过多次连乘,这会导致梯度值快速趋向于零(**梯度消失**)或变得极大(**梯度爆炸**)。梯度消失使得模型无法有效学习到序列早期信息对后期输出的影响,即难以捕捉长距离的依赖关系。
|
|
|
|
|
|
-为了解决长期依赖问题,**长短时记忆网络 (Long Short-Term Memory, LSTM)** 被设计出来[3]。LSTM 是一种特殊的 RNN,其核心创新在于引入了**细胞状态 (Cell State)** 和一套精密的**门控机制 (Gating Mechanism)**。细胞状态可以看作是一条独立于隐藏状态的信息通路,允许信息在时间步之间更顺畅地传递。门控机制则是由几个小型神经网络构成,它们可以学习如何有选择地让信息通过,从而控制细胞状态中信息的增加与移除。这些门包括:
|
|
|
+为了解决长期依赖问题,**长短时记忆网络 (Long Short-Term Memory, LSTM)** 被设计出来^[3]^。LSTM 是一种特殊的 RNN,其核心创新在于引入了**细胞状态 (Cell State)** 和一套精密的**门控机制 (Gating Mechanism)**。细胞状态可以看作是一条独立于隐藏状态的信息通路,允许信息在时间步之间更顺畅地传递。门控机制则是由几个小型神经网络构成,它们可以学习如何有选择地让信息通过,从而控制细胞状态中信息的增加与移除。这些门包括:
|
|
|
|
|
|
- **遗忘门 (Forget Gate)**: 决定从上一时刻的细胞状态中丢弃哪些信息。
|
|
|
- **输入门 (Input Gate)**: 决定将当前输入中的哪些新信息存入细胞状态。
|
|
|
@@ -185,17 +185,18 @@ king - man + woman 的结果向量: [0.9 0.2]
|
|
|
|
|
|
### 3.1.2 Transformer 架构解析
|
|
|
|
|
|
-在上一节中,我们看到RNN及LSTM通过引入循环结构来处理序列数据,这在一定程度上解决了捕捉长距离依赖的问题。然而,这种循环的计算方式也带来了新的瓶颈:它必须按顺序处理数据。第 t 个时间步的计算,必须等待第 t−1 个时间步完成后才能开始。这意味着 RNN 无法进行大规模的并行计算,在处理长序列时效率低下,这极大地限制了模型规模和训练速度的提升。Transformer在2017 年由谷歌团队提出[4]。它完全抛弃了循环结构,转而完全依赖一种名为**注意力 (Attention)** 的机制来捕捉序列内的依赖关系,从而实现了真正意义上的并行计算。
|
|
|
+在上一节中,我们看到RNN及LSTM通过引入循环结构来处理序列数据,这在一定程度上解决了捕捉长距离依赖的问题。然而,这种循环的计算方式也带来了新的瓶颈:它必须按顺序处理数据。第 t 个时间步的计算,必须等待第 t−1 个时间步完成后才能开始。这意味着 RNN 无法进行大规模的并行计算,在处理长序列时效率低下,这极大地限制了模型规模和训练速度的提升。Transformer在2017 年由谷歌团队提出^[4]^。它完全抛弃了循环结构,转而完全依赖一种名为**注意力 (Attention)** 的机制来捕捉序列内的依赖关系,从而实现了真正意义上的并行计算。
|
|
|
|
|
|
**(1)Encoder-Decoder 整体结构**
|
|
|
|
|
|
最初的 Transformer 模型是为端到端任务机器翻译而设计的。如图3.4所示,它在宏观上遵循了一个经典的**编码器-解码器 (Encoder-Decoder)** 架构。
|
|
|
|
|
|
<div align="center">
|
|
|
- <img src="https://raw.githubusercontent.com/datawhalechina/Hello-Agents/main/docs/images/3-figures/1757249275674-3.png" alt="图片描述" width="90%"/>
|
|
|
+ <img src="https://raw.githubusercontent.com/datawhalechina/Hello-Agents/main/docs/images/3-figures/1757249275674-3.png" alt="图片描述" width="50%"/>
|
|
|
<p>图 3.4 Transformer 整体架构图</p>
|
|
|
</div>
|
|
|
|
|
|
+
|
|
|
我们可以将这个结构理解为一个分工明确的团队:
|
|
|
|
|
|
1. **编码器 (Encoder)**:任务是“**理解**”输入的整个句子。它会读取所有输入词元(这个概念会在3.2.2节介绍),最终为每个词元生成一个富含上下文信息的向量表示。
|
|
|
@@ -287,7 +288,7 @@ class DecoderLayer(nn.Module):
|
|
|
|
|
|
现在,我们来填充骨架中最关键的模块,注意力机制。
|
|
|
|
|
|
-想象一下我们阅读这个句子:“The agent learns because **it** is intelligent.”。当我们读到加粗的 "it" 时,为了理解它的指代,我们的大脑会不自觉地将更多的注意力放在前面的 "agent" 这个词上。**自注意力 (Self-Attention)** 机制就是对这种现象的数学建模。它允许模型在处理序列中的每一个词时,都能兼顾句子中的所有其他词,并为这些词分配不同的“注意力权重”。权重越高的词,代表其与当前词的关联性越强,其信息也应该在当前词的表示中占据更大的比重。
|
|
|
+想象一下我们阅读这个句子:“The agent learns because **it** is intelligent.”。当我们读到加粗的 "**it**" 时,为了理解它的指代,我们的大脑会不自觉地将更多的注意力放在前面的 "agent" 这个词上。**自注意力 (Self-Attention)** 机制就是对这种现象的数学建模。它允许模型在处理序列中的每一个词时,都能兼顾句子中的所有其他词,并为这些词分配不同的“注意力权重”。权重越高的词,代表其与当前词的关联性越强,其信息也应该在当前词的表示中占据更大的比重。
|
|
|
|
|
|
为了实现上述过程,自注意力机制为每个输入的词元向量引入了三个可学习的角色:
|
|
|
|
|
|
@@ -311,10 +312,11 @@ $$\text{Attention}(Q,K,V)=\text{softmax}\left(\frac{QK^{T}}{\sqrt{d_{k}}}\right)
|
|
|
它将原始的 Q, K, V 向量在维度上切分成 h 份(h 就是“头”数),每一份都独立地进行一次单头注意力的计算。这就好比让 h 个不同的“专家”从不同的角度去审视句子,每个专家都能捕捉到一种不同的特征关系。最后,将这 h 个专家的“意见”(即输出向量)拼接起来,再通过一个线性变换进行整合,就得到了最终的输出。
|
|
|
|
|
|
<div align="center">
|
|
|
- <img src="https://raw.githubusercontent.com/datawhalechina/Hello-Agents/main/docs/images/3-figures/1757249275674-4.png" alt="图片描述" width="90%"/>
|
|
|
+ <img src="https://raw.githubusercontent.com/datawhalechina/Hello-Agents/main/docs/images/3-figures/1757249275674-4.png" alt="图片描述" width="50%"/>
|
|
|
<p>图 3.5 多头注意力机制</p>
|
|
|
</div>
|
|
|
|
|
|
+
|
|
|
如图3.5所示,这种设计让模型能够共同关注来自不同位置、不同表示子空间的信息,极大地增强了模型的表达能力。以下是多头注意力的简单实现可供参考。
|
|
|
|
|
|
```Python
|
|
|
@@ -427,12 +429,14 @@ class PositionWiseFeedForward(nn.Module):
|
|
|
|
|
|
位置编码的核心思想是,为输入序列中的每一个词元嵌入向量,都额外加上一个能代表其绝对位置和相对位置信息的“位置向量”。这个位置向量不是通过学习得到的,而是通过一个固定的数学公式直接计算得出。这样一来,即使两个词元(例如,两个都叫 `agent` 的词元)自身的嵌入是相同的,但由于它们在句子中的位置不同,它们最终输入到 Transformer 模型中的向量就会因为加上了不同的位置编码而变得独一无二。原论文中提出的位置编码使用正弦和余弦函数来生成,其公式如下:
|
|
|
|
|
|
-$$ PE_{(pos,2i)}=\sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) $$,$$PE_{(pos,2i+1)}=\cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)$$
|
|
|
+$$ PE_{(pos,2i)}=\sin\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right) $$,
|
|
|
+
|
|
|
+$$PE_{(pos,2i+1)}=\cos\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)$$,
|
|
|
|
|
|
其中:
|
|
|
|
|
|
-- pos是词元在序列中的位置(例如,0,1,2,...)
|
|
|
-- i是位置向量中的维度索引(从0到$d_{\text{model}}/2$)
|
|
|
+- $pos$ 是词元在序列中的位置(例如,$0$,$1$,$2$,...)
|
|
|
+- $i$ 是位置向量中的维度索引(从 $0$ 到 $d_{\text{model}}/2$)
|
|
|
- $d_{\text{model}}$是词嵌入向量的维度(与我们模型中定义的一致)
|
|
|
|
|
|
现在,我们来实现 `PositionalEncoding` 模块,并完成我们 Transformer 骨架代码的最后一部分。
|
|
|
@@ -473,7 +477,7 @@ class PositionalEncoding(nn.Module):
|
|
|
|
|
|
前面一节中,我们动手构建了一个完整的Transformer 模型,它能在很多端到端的场景表现出色。但是当任务转换为构建一个与人对话、创作、作为智能体大脑的通用模型时,或许我们并不需要那么复杂的结构。
|
|
|
|
|
|
-Transformer的设计哲学是“先理解,再生成”。编码器负责深入理解输入的整个句子,形成一个包含全局信息的上下文记忆,然后解码器基于这份记忆来生成翻译。但 OpenAI 在开发 **GPT (Generative Pre-trained Transformer)** 时,提出了一个更简单的思想[5]:**语言的核心任务,不就是预测下一个最有可能出现的词吗?**
|
|
|
+Transformer的设计哲学是“先理解,再生成”。编码器负责深入理解输入的整个句子,形成一个包含全局信息的上下文记忆,然后解码器基于这份记忆来生成翻译。但 OpenAI 在开发 **GPT (Generative Pre-trained Transformer)** 时,提出了一个更简单的思想^[5]^:**语言的核心任务,不就是预测下一个最有可能出现的词吗?**
|
|
|
|
|
|
无论是回答问题、写故事还是生成代码,本质上都是在一个已有的文本序列后面,一个词一个词地添加最合理的内容。基于这个思想,GPT 做了一个大胆的简化:**它完全抛弃了编码器,只保留了解码器部分。** 这就是 **Decoder-Only** 架构的由来。
|
|
|
|
|
|
@@ -559,9 +563,9 @@ Decoder-Only 架构的工作模式被称为**自回归 (Autoregressive)**。这
|
|
|
|
|
|
早期的 GPT 模型(如 GPT-3)主要是“文本补全”模型,它们擅长根据前面的文本续写,但不一定能很好地理解并执行人类的指令。
|
|
|
|
|
|
-**指令调优 (Instruction Tuning)** 是一种微调技术,它使用大量“指令-回答”格式的数据对预训练模型进行进一步的训练。经过指令调优后,模型能更好地理解并遵循用户的指令。我们今天使用的大多数主流模型(如 ChatGPT, Llama 3-Instruct)都是指令调优过的模型。
|
|
|
+**指令调优 (Instruction Tuning)** 是一种微调技术,它使用大量“指令-回答”格式的数据对预训练模型进行进一步的训练。经过指令调优后,模型能更好地理解并遵循用户的指令。我们今天日常工作学习中使用的所有模型(如 `ChatGPT`, `DeepSeek`, `Qwen`)都是其模型家族中经过指令调优过的模型。
|
|
|
|
|
|
-- **对“文本补全”模型的提示***(你需要用少样本提示“教会”模型做什么)***:**
|
|
|
+- **对“文本补全”模型的提示(你需要用少样本提示“教会”模型做什么):**
|
|
|
|
|
|
```Plain
|
|
|
这是一段将英文翻译成中文的程序。
|
|
|
@@ -571,7 +575,7 @@ Decoder-Only 架构的工作模式被称为**自回归 (Autoregressive)**。这
|
|
|
中文:
|
|
|
```
|
|
|
|
|
|
-- **对“指令调优”模型的提示***(你可以直接下达指令)***:**
|
|
|
+- **对“指令调优”模型的提示(你可以直接下达指令):**
|
|
|
|
|
|
```Plain
|
|
|
请将下面的英文翻译成中文:
|
|
|
@@ -589,7 +593,7 @@ How are you?
|
|
|
你现在是一位资深的Python编程专家。请解释一下Python中的GIL(全局解释器锁)是什么,要让一个初学者也能听懂。
|
|
|
```
|
|
|
|
|
|
-**提供示例 (In-context Example)** 这与少样本提示的思想一致,通过在提示中提供清晰的输入输出示例,来“教会”模型如何处理我们的请求,尤其是在处理复杂格式或特定风格的任务时非常有效。
|
|
|
+**上下文示例 (In-context Example)** 这与少样本提示的思想一致,通过在提示中提供清晰的输入输出示例,来“教会”模型如何处理我们的请求,尤其是在处理复杂格式或特定风格的任务时非常有效。
|
|
|
|
|
|
```Plain
|
|
|
# 案例
|
|
|
@@ -643,7 +647,7 @@ How are you?
|
|
|
|
|
|
**3.2.2.2 字节对编码算法解析**
|
|
|
|
|
|
-字节对编码 (Byte-Pair Encoding, BPE) 是最主流的子词分词算法之一[6],GPT系列模型就采用了这种算法。其核心思想非常简洁,可以理解为一个“贪心”的合并过程:
|
|
|
+字节对编码 (Byte-Pair Encoding, BPE) 是最主流的子词分词算法之一^[6]^,GPT系列模型就采用了这种算法。其核心思想非常简洁,可以理解为一个“贪心”的合并过程:
|
|
|
|
|
|
1. **初始化**:将词表初始化为所有在语料库中出现过的基本字符。
|
|
|
2. **迭代合并**:在语料库上,统计所有相邻词元对的出现频率,找到频率最高的一对,将它们合并成一个新的词元,并加入词表。
|
|
|
@@ -715,8 +719,8 @@ for i in range(num_merges):
|
|
|
|
|
|
后续的许多算法都是在BPE的基础上进行优化的。其中,Google 开发的 WordPiece 和 SentencePiece 是影响力最大的两种。
|
|
|
|
|
|
-- **WordPiece**: Google BERT 模型采用的算法[7]。它与 BPE 非常相似,但合并词元的标准不是“最高频率”,而是“能最大化提升语料库的语言模型概率”。简单来说,它会优先合并那些能让整个语料库的“通顺度”提升最大的词元对。
|
|
|
-- **SentencePiece**: Google 开源的一款分词工具[8],Llama 系列模型采用了此算法。它最大的特点是,将空格也视作一个普通字符(通常用下划线 `_` 表示)。这使得分词和解码过程完全可逆,且不依赖于特定的语言(例如,它不需要知道中文不使用空格分词)。
|
|
|
+- **WordPiece**: Google BERT 模型采用的算法^[7]^。它与 BPE 非常相似,但合并词元的标准不是“最高频率”,而是“能最大化提升语料库的语言模型概率”。简单来说,它会优先合并那些能让整个语料库的“通顺度”提升最大的词元对。
|
|
|
+- **SentencePiece**: Google 开源的一款分词工具^[8]^,Llama 系列模型采用了此算法。它最大的特点是,将空格也视作一个普通字符(通常用下划线 `_` 表示)。这使得分词和解码过程完全可逆,且不依赖于特定的语言(例如,它不需要知道中文不使用空格分词)。
|
|
|
|
|
|
**3.2.2.3 分词器对开发者的意义**
|
|
|
|
|
|
@@ -868,15 +872,15 @@ print(response)
|
|
|
|
|
|
**缩放法则(Scaling Laws)**是近年来大语言模型领域最重要的发现之一。它揭示了模型性能与模型参数量、训练数据量以及计算资源之间存在着可预测的幂律关系。这一发现为大语言模型的持续发展提供了理论指导,阐明了增加资源投入能够系统性提升模型性能的底层逻辑。
|
|
|
|
|
|
-研究发现,在对数-对数坐标系下,模型的性能(通常用损失 Loss 来衡量)与参数量、数据量和计算量这三个因素都呈现出平滑的幂律关系[9]。简单来说,只要我们持续、按比例地增加这三个要素,模型的性能就会可预测地、平滑地提升,而不会出现明显的瓶颈。这一发现为大模型的设计和训练提供了清晰的指导:在资源允许的范围内,尽可能地扩大模型规模和训练数据量。
|
|
|
+研究发现,在对数-对数坐标系下,模型的性能(通常用损失 Loss 来衡量)与参数量、数据量和计算量这三个因素都呈现出平滑的幂律关系^[9]^。简单来说,只要我们持续、按比例地增加这三个要素,模型的性能就会可预测地、平滑地提升,而不会出现明显的瓶颈。这一发现为大模型的设计和训练提供了清晰的指导:在资源允许的范围内,尽可能地扩大模型规模和训练数据量。
|
|
|
|
|
|
-早期的研究更侧重于增加模型参数量,但 DeepMind 在 2022 年提出的“Chinchilla 定律”对此进行了重要修正[10]。该定律指出,在给定的计算预算下,为了达到最优性能,**模型参数量和训练数据量之间存在一个最优配比**。具体来说,最优的模型应该比之前普遍认为的要小,但需要用多得多的数据进行训练。例如,一个 700 亿参数的 Chinchilla 模型,由于使用了比 GPT-3(1750 亿参数)多 4 倍的数据进行训练,其性能反而超越了后者。这一发现纠正了“越大越好”的片面认知,强调了数据效率的重要性,并指导了后续许多高效大模型(如 Llama 系列)的设计。
|
|
|
+早期的研究更侧重于增加模型参数量,但 DeepMind 在 2022 年提出的“Chinchilla 定律”对此进行了重要修正^[10]^。该定律指出,在给定的计算预算下,为了达到最优性能,**模型参数量和训练数据量之间存在一个最优配比**。具体来说,最优的模型应该比之前普遍认为的要小,但需要用多得多的数据进行训练。例如,一个 700 亿参数的 Chinchilla 模型,由于使用了比 GPT-3(1750 亿参数)多 4 倍的数据进行训练,其性能反而超越了后者。这一发现纠正了“越大越好”的片面认知,强调了数据效率的重要性,并指导了后续许多高效大模型(如 Llama 系列)的设计。
|
|
|
|
|
|
缩放法则最令人惊奇的产物是“能力的涌现”。所谓能力涌现,是指当模型规模达到一定阈值后,会突然展现出在小规模模型中完全不存在或表现不佳的全新能力。例如,**链式思考 (Chain-of-Thought)**、**指令遵循 (Instruction Following)**、多步推理、代码生成等能力,都是在模型参数量达到数百亿甚至千亿级别后才显著出现的。这种现象表明,大语言模型不仅仅是简单地记忆和复述,它们在学习过程中可能形成了某种更深层次的抽象和推理能力。对于智能体开发者而言,能力的涌现意味着选择一个足够大规模的模型,是实现复杂自主决策和规划能力的前提。
|
|
|
|
|
|
### 3.3.2 模型幻觉
|
|
|
|
|
|
-**模型幻觉(Hallucination)**通常指的是大语言模型生成的内容与客观事实、用户输入或上下文信息相矛盾,或者生成了不存在的事实、实体或事件。幻觉的本质是模型在生成过程中,过度自信地“编造”了信息,而非准确地检索或推理。根据其表现形式,幻觉可以被分为多种类型[11],例如:
|
|
|
+**模型幻觉(Hallucination)**通常指的是大语言模型生成的内容与客观事实、用户输入或上下文信息相矛盾,或者生成了不存在的事实、实体或事件。幻觉的本质是模型在生成过程中,过度自信地“编造”了信息,而非准确地检索或推理。根据其表现形式,幻觉可以被分为多种类型^[11]^,例如:
|
|
|
|
|
|
- **事实性幻觉 (Factual Hallucinations)**: 模型生成与现实世界事实不符的信息。
|
|
|
- **忠实性幻觉 (Faithfulness Hallucinations)**: 在文本摘要、翻译等任务中,生成的内容未能忠实地反映源文本的含义。
|
|
|
@@ -884,14 +888,14 @@ print(response)
|
|
|
|
|
|
幻觉的产生是多方面因素共同作用的结果。首先,训练数据中可能包含错误或矛盾的信息。其次,模型的自回归生成机制决定了它只是在预测下一个最可能的词元,而没有内置的事实核查模块。最后,在面对需要复杂推理的任务时,模型可能会在逻辑链条中出错,从而“编造”出错误的结论。例如:一个旅游规划 Agent,可能会为你推荐一个现实中不存在的景点,或者预订一个航班号错误的机票。
|
|
|
|
|
|
-此外,大语言模型还面临着知识时效性不足和训练数据中存在的偏见等挑战。大语言模型的能力来源于其训练数据。这意味着模型所掌握的知识是其训练数据收集时的最新材料。对于在此日期之后发生的事件、新出现的概念或最新的事实,模型将无法感知或正确回答。与此同时训练数据往往包含了人类社会的各种偏见和刻板印象。当模型在这些数据上学习时,它不可避免地会吸收并反映出这些偏见 [12]。
|
|
|
+此外,大语言模型还面临着知识时效性不足和训练数据中存在的偏见等挑战。大语言模型的能力来源于其训练数据。这意味着模型所掌握的知识是其训练数据收集时的最新材料。对于在此日期之后发生的事件、新出现的概念或最新的事实,模型将无法感知或正确回答。与此同时训练数据往往包含了人类社会的各种偏见和刻板印象。当模型在这些数据上学习时,它不可避免地会吸收并反映出这些偏见^[12]^。
|
|
|
|
|
|
为了提高大语言模型的可靠性,研究人员和开发者正在积极探索多种检测和缓解幻觉的方法:
|
|
|
|
|
|
-1. **数据层面**: 通过高质量数据清洗、引入事实性知识以及强化学习与人类反馈 (RLHF) 等方式[13],从源头减少幻觉。
|
|
|
+1. **数据层面**: 通过高质量数据清洗、引入事实性知识以及强化学习与人类反馈 (RLHF) 等方式^[13]^,从源头减少幻觉。
|
|
|
2. **模型层面**: 探索新的模型架构,或让模型能够表达其对生成内容的不确定性。
|
|
|
3. **推理与生成层面**:
|
|
|
- 1. **检索增强生成 (Retrieval-Augmented Generation, RAG)**[14]: 这是目前缓解幻觉的有效方法之一。RAG 系统通过在生成之前从外部知识库(如文档数据库、网页)中检索相关信息,然后将检索到的信息作为上下文,引导模型生成基于事实的回答。
|
|
|
+ 1. **检索增强生成 (Retrieval-Augmented Generation, RAG)**^[14]^: 这是目前缓解幻觉的有效方法之一。RAG 系统通过在生成之前从外部知识库(如文档数据库、网页)中检索相关信息,然后将检索到的信息作为上下文,引导模型生成基于事实的回答。
|
|
|
2. **多步推理与验证**: 引导模型进行多步推理,并在每一步进行自我检查或外部验证。
|
|
|
3. **引入外部工具**: 允许模型调用外部工具(如搜索引擎、计算器、代码解释器)来获取实时信息或进行精确计算。
|
|
|
|
|
|
@@ -940,4 +944,4 @@ print(response)
|
|
|
|
|
|
[13] Christiano, P., Leike, J., Brown, T. B., Martic, M., Legg, S., & Amodei, D. (2017). Deep reinforcement learning from human preferences. *arXiv preprint arXiv:1706.03741*.
|
|
|
|
|
|
-[14] Lewis, P., Perez, E., Piktus, A., Petroni, F., Karpukhin, V., Goswami, N., ... & Kiela, D. (2020). Retrieval-augmented generation for knowledge-intensive NLP tasks. In *Advances in neural information processing systems* (pp. 9459-9474).
|
|
|
+[14] Lewis, P., Perez, E., Piktus, A., Petroni, F., Karpukhin, V., Goswami, N., ... & Kiela, D. (2020). Retrieval-augmented generation for knowledge-intensive NLP tasks. In *Advances in neural information processing systems* (pp. 9459-9474).
|