NLP常见面试问题集合

本文最后更新于 2025年10月3日凌晨12点20分

NLP常见面试问题集合

tokenization

Q1. 解释一下什么是token, tokenizer, 和tokenization.

所谓的 token,就是模型在处理文本的时候看到的最小“片段”。它可以是一个词,也可以是一个字,甚至还可以是一个更小的子词。举个例子,比如中文的“自然语言处理”,它可能会被切成“自然”,“语言”,“处理”,这几个就是 token。模型本身并不是直接理解原始的文字,而是把这些 token 映射成数字 ID,然后在这些数字上做计算。

那 tokenizer 呢,其实就是干分词这件事的工具。它的工作就是把一整段原始文本拆开,变成一串 token,再把它们转成对应的 ID。不同的 tokenizer 可能切分方式不一样,有的按空格切,有的按字切,有的更复杂,比如用 BPE 或 WordPiece 去学统计规律来切。

而 tokenization 指的就是整个“分词”的过程。也就是说,它描述的不是某个具体的 token 或 tokenizer,而是这件事本身——把文本一步步切分成模型能够理解的 token 序列的过程。简单来说,就是从“自然语言”到“token 序列”的那道工序。


Q2. 在NLP模型中常见的分词方法有哪些,常见的分词算法有哪些?

我一般会把分词方法分三类:第一是 按词切(word-level)。英文里好用,因为空格天然分开词;它实现简单、速度快,但词形变化多时会把同源词分成很多个词,而且容易有 OOV。第二是 按字切(character-level)。像中文、日文常见;它几乎没有 OOV、跨语言也稳,但序列会更长、单个 token 的语义更弱。第三是 按子词切(subword-level),这是现在最主流的;它把常见词保留下来,把少见或新词拆成更小片段,从而平衡 OOV 和序列长度,而且这些片段是从语料里学出来的(比如 BPE、WordPiece、Unigram)。

再说常见算法。早期是规则或统计方法,比如 Moses tokenizer:用一组简单规则和正则把词、标点、缩写分开,必要时做些规范化(比如引号、连字符);它工程上稳定、可控。后来有机器学习方法,比如 CRF(条件随机场) 把分词当序列标注,预测每个位置是不是词边界,常见做法是用 B/M/E/S 或 BIO 标签,也可以配合 BiLSTM 提升上下文建模。到了大模型时代,最常见的是 子词算法:BPE(频繁相邻符号合并,贪心最长匹配)、WordPiece(挑能最大化语料似然的片段,最长匹配编码)、Unigram(先大词表再用 EM 估概率、逐步裁剪,解码用概率最高切分),实现工具 SentencePiece(直接在原始文本上训练/编码),以及 字节级 BPE(BBPE)(先转 UTF-8 字节再学合并,天然无 OOV)。


Q3. 请你介绍什么是BPE分词算法, 什么是BBPE分词算法, 二者有什么区别. 顺便介绍其中涉及到的Unicode和UTF-8.

我们先说 BPE(Byte Pair Encoding)。它的做法很直接:一开始词表里只有所有的单个字符,比如字母 a, b, c …。在大语料里数一数哪些相邻字符最常出现,把频率最高的一对合并成新的 token。然后更新语料,继续重复这个过程,直到词表大小达到设定值。训练完成后,分词时就会用这些合并规则,把一句话拆成最长可能的子词片段。这样常见词会被保留,新词会被拆开,比如 “unhappiness” 可能被切成 “un” + “happiness”,而 “happiness” 又可能被进一步切成 “happy” + “ness”。

BBPE(Byte-level BPE) 的思路和 BPE 一样,但最小单位不是字符,而是 UTF-8 字节。每段文本会先转成字节流,每个 Unicode 字符会被编码成 1 到 4 个字节。初始词表就是 256 个字节,因为一个字节有 8 个 bit,最多能表示 2的8次方就是256种取值。byte 是计算机处理数据的最小存储单元,所以这样设计很自然。BBPE 在训练时就以这些字节为基础进行频率统计和合并。它的最大优点是没有 OOV,因为任何字符最终都能拆成字节组合来表示。但缺点是结果可能不直观,比如 “apple” 可能被拆成 “ap” + “pl” + “e”,甚至更碎的字节片段,看起来不像真正的“词”。

BPE 和 BBPE 的区别在于:BPE 以字符为基础,更符合人类语言的直觉,但可能遇到没见过的字符;BBPE 以字节为基础,彻底没有 OOV,但切出来的 token 有时不那么可读。

要理解为什么 BBPE 用字节,就要说到 Unicode 和 UTF-8。Unicode 是一种字符集,它给世界上大多数文字和符号都分配了一个唯一编号,比如字母 “A” 是 U+0041。UTF-8 是一种把 Unicode 编码成字节的方式,每个字符用 1 到 4 个字节表示。这样无论英文、德文还是阿拉伯文,都能用统一的编码存储和处理。

这很重要,因为在小模型里,分词方式会根据语言不同而变化,比如英文按空格切,中文按字切。但在大模型里,我们需要一种统一的分词方式,才能同时处理多语言。Unicode 给了我们统一的字符集,而 UTF-8 提供了统一的存储方式。BBPE 以字节为单位,正是利用了这一点,让模型能在统一的字节层面处理世界上几乎所有语言。


Q4. 介绍什么是wordPiece算法, unigram算法,和sentencePiece算法.

先说 WordPiece。它最早是谷歌在 BERT 里提出的。它的训练思路其实和 BPE 有点像,但更讲究统计意义。开始的时候,词表里只有所有的单个字符。接着它会扫描整个语料,看看哪些相邻的子词最常一起出现,并且能让语料整体的概率提升最大。换句话说,它在每一步都会挑选一对最有“价值”的片段,把它们合并成一个新的子词,再更新到词表里。这个过程会不断重复,直到词表变大到目标规模。分词的时候,它采用的是最长匹配策略,就是从当前位置往后,尽量找到词表里最长的子词。如果有多个候选,优先选最长的那个。比如 playing 这个词,最终可能被切成 play 和 ##ing。这里的 “##” 读作“双井号”,意思是它不是一个新的词开头,而是延续前面的 token。

其实 WordPiece 和 BPE 看起来挺像的,它们都是从字符开始,不断合并常见的片段,最后得到子词表。不同的是,BPE 是纯粹根据频率合并,而 WordPiece 会根据概率模型,选择能让语料整体概率提升最大的那一对。所以可以说 WordPiece 是 BPE 的一个更“统计化”的版本。

Unigram 的思路就不太一样了。它不是像 WordPiece 那样从小往大合并,而是先准备一个很大的候选词表,里面包含了大量可能的子词。然后它会用概率模型去估计每个子词的概率,再慢慢删掉那些删了之后影响不大的子词,最后收敛到目标大小。这个过程和 EM 算法结合在一起,能够逐步优化子词的概率分布。分词的时候,它不会像 WordPiece 那样贪心地选最长,而是会去找整体概率最高的那条切分路径。常用的方法就是 Viterbi 算法,它本质上是一个动态规划,能在所有可能的分词方案里找到最优的那一个。这样切出来的结果更加灵活。

最后说 SentencePiece。它本身不是一个新的分词算法,而是一个工具框架。它最大的特点就是不需要人工预先切词,可以直接在原始文本上训练和分词。它把空格当成一个普通符号,并且用一个特殊符号“▁”来标记词的开头,这个符号可以读作“下划线”或者“空白”。SentencePiece 既可以用 BPE,也可以用 Unigram 算法,所以它更像是一个平台,把训练、编码、解码和规范化都打包在一起。正因为它不依赖人工规则,所以跨语言的时候非常方便,现在很多大模型,比如 T5、mBART,都会用 SentencePiece。


Token Embedding

Q5. 介绍token embedding, embedding matrix, lookup机制, 以及tokenization和embedding的关系.

所谓 词嵌入(token embedding),其实就是把文字转成数字的一种方式。计算机不能直接理解词语,但可以处理向量。于是我们把每个词或子词映射成一个向量,这个向量就是 词向量(word vector)。比如 “apple” 和 “banana” 的向量可能离得很近,而和 “car” 的向量差得远,这样模型就能学到语义关系。

嵌入矩阵(embedding matrix) 就是一张大表格,行数等于词表大小,列数等于向量维度。比如一个词表有五万个 token,每个 token 是 300 维的向量,那嵌入矩阵就是 50,000 × 300 的大小。这个矩阵在初始化时可能是随机的,也可能是用预训练好的向量(比如 Word2Vec、GloVe、FastText)来做起点。在后续的训练里,模型会通过反向传播来不断更新这些向量,让它们更符合任务的语义需求。

至于 lookup 机制,其实很简单。tokenization 会把文本先切成 token,然后映射成一个一个的 ID。embedding 层做的事就是“查表”——用这个 ID 去嵌入矩阵里找到对应的一行,把它作为这个 token 的词向量。这一步叫 embedding lookup,相当于高效地从矩阵里取出行向量。

所以总结来说,tokenization 负责把文本切开并编号,embedding 负责把编号转成向量。两步连起来,就把自然语言变成了神经网络可以计算的数字表示。


Q6. 介绍token embedding的常见方法, 什么是静态方法和动态方法.

先把概念说清楚:token embedding 就是把每个 token 的 ID 用一个“查表层(lookup)”换成一条向量,让模型能在向量空间里处理语言。这一步通常是模型的第一层:ID → 向量。

接着说方法,整体分两类:静态 和 动态(上下文)。静态的方法里,经典的有 Word2Vec、GloVe、FastText。Word2Vec 用“预测邻居或被邻居预测”的方式,从共现关系里学向量;GloVe 更像把大规模共现矩阵做分解;FastText 把一个词拆成多个子词 n-gram,再把这些小片段的向量加起来,所以对词缀、形态变化更友好,也更少 OOV。它们的共同点是:训练一旦结束,同一个 token 在任何句子里都是同一条向量,查表就能用,轻便高效,但像 bank 这种多义词在“河岸”和“银行”里分不太清。

动态的方法就是上下文化的 embedding,代表有 ELMo、GPT、BERT 这类语言模型。流程是先做一次 embedding 查表拿到初始向量,然后把它们送进模型(ELMo 的双向 LSTM,GPT 的单向 Transformer,BERT 的双向 Transformer 做 Masked LM),中间层或输出层的向量就是上下文化后的 embedding。这样同一个 bank 放到不同句子里会得到不同向量,能自动消歧;代价是模型更重、算力开销更大。现在的大模型基本都用子词分词(BPE、WordPiece、Unigram),所以更准确地说是 token 而不是“词”的 embedding。

最后说怎么选。算力紧、数据小、只做基础特征或传统模型时,先用静态向量,稳定省事;要做下游微调、需要更准的语义和消歧时,上动态 embedding(直接用或微调 BERT/GPT 系)通常效果更好。


Q7. 什么是word2vec. 什么是CBOW和Skip-gram模型.

先从 one-hot 说起。one-hot 就是用一个超长的向量来表示一个词:词表有多大,向量就有多长,只有对应这个词的位置是 1,其它全是 0。它的问题有三点。第一,维度巨大而且稀疏,存储和计算都不友好。第二,词与词之间没有相似度,两个不同词的向量几乎正交,点积总是 0,模型看不出 catdog 更像,而 cattable 也一样不像。第三,不能泛化,遇到新词就完全没有表示。

word2vec 的想法就是:别再用 one-hot 了,学一套稠密的、低维的分布式表示。怎么学?在海量语料上滑动一个上下文窗口。谁和谁经常一起出现,我们就把它们的向量往一起拉;很少一起出现的,就拉远一点。训练好之后,我们得到一张嵌入矩阵:行是词(或 token),列是向量维度。推理时做 lookup 就能把词变向量,既省计算,又能体现语义相似度。

word2vec 主要有两种训练架构。CBOW 的思路是“看邻居,猜中间”。举个例子:句子 There is an apple on the table,窗口大小设为 2,那目标词是 apple 时,上下文就是 is, an, on, the。做法是先把这四个词查表拿到向量,做一次求和或求平均,然后用这个合成的向量去预测中间的目标词。因为把上下文“打包”成一个表示,CBOW 训练很快,对高频词也更稳定。工程里常配合两个技巧:一是 高频词下采样,把 theof 这类词按概率丢掉一部分,减少噪声;二是用 负采样(negative sampling)分层 softmax(hierarchical softmax) 来加速输出层。负采样的直觉是:每次只更新少量“真上下文”与少量“假上下文”的打分,不去计算全词表;分层 softmax 则把词表放进一棵二叉树里,预测一条从根到叶子的路径,计算量从“跟所有词比一次”变成“只走几步路”。

Skip-gram 是反过来,“看中间,猜邻居”。还是以 apple 为中心,它会分别去预测 is, an, on, the 这些上下文词。这样每个中心词会产生多条训练样本,所以对长尾的稀有词学习更充分,语义质量更好,但训练步数也更多。在实现上,Skip-gram 同样会用负采样或分层 softmax 来控计算量,也会用下采样来处理高频词。训练结束后我们通常拿输入侧的嵌入作为词向量,输出侧的嵌入也能用,但大多数任务里输入侧更常见。

怎么选用这两种?经验法则是:数据不大、想更快,先用 CBOW数据很大、特别在意稀有词,多半 Skip-gram 效果更好。无论哪种,核心都是同一件事:用共现关系,把语义“压进”一个低维、可计算的向量空间里。


Q8. 什么是GloVe方法, 什么是FastText方法

先说 GloVe。它的全名是 Global Vectors,核心就是“用全局的共现统计来学一套静态的词向量”。具体怎么数共现?在整个语料里,用一个固定大小的窗口滑过去;两个词只要同时落在这个窗口里,就把它们的“共现”加一。像 applepie 常一起出现,计数就高;appleengine 很少一起出现,计数就低。接着我们训练一套向量,让两个词之间的匹配分数,能大致反映这些共现计数的强弱;同时用一个加权策略,避免被超高频或超低频的噪声带偏。训练完,你得到一张嵌入矩阵——同一个词在任何句子里都是同一条向量,所以它是静态的。优点是把全局信息一次性利用起来,训练稳定、效果常常很好;缺点是它不看具体上下文,分不清多义词在不同语境下的含义。

再说 FastText。在讲它之前,先把 n-gram 这个词说清楚:n-gram 就是连续 n 个单位组成的片段。单位可以是字符,也可以是单词。比如按字符看,play 的 2-gram(bigram)是 pllaay,3-gram(trigram)是 plalay;按单词看,natural language processing 的 2-gram 是 natural language,3-gram 是 natural language processing
有了这个概念,FastText 就好理解了。它本质还是 word2vec 的 CBOW/Skip-gram 框架,但把“词的表示”换了思路:一个词 = 多个“字符 n-gram”的向量之和。比如 playing,在词首尾加边界符号后,取 3~6 个字符片段(像 <plalayayiing> 这些),词向量就是这些片段向量加起来。这样前后缀信息被共享,playplayedplaying 会重用很多子片段,稀有词更稳;而没见过的新词也能用它的 n-gram 片段“拼”出一个向量。训练时依然用上下文窗口,也常配合 negative sampling 或 hierarchical softmax 这类加速技巧。直观地区分:GloVe 是“基于全局共现的回归式学习”,FastText 是“在 word2vec 上引入子词 n-gram 表示”,所以对形态丰富的语言和长尾词更友好。


Position Embedding

Q9. 解释NLP中的Position Embedding是什么, 作用是什么

先把概念讲清楚:位置编码(Position Embedding/Encoding) 就是把“顺序信息”塞进模型里的一种表示。自注意力本身不看先后,它只看一堆向量彼此怎么相关;如果没有位置信息,dog bites manman bites dog 在模型眼里几乎一样。位置编码做的事,就是让每个位置带上“我是第几个、我和别人隔了几步”这样的信号。

为什么需要它?因为语言强依赖顺序。主语、谓语、宾语的顺序变了,意思就变了。没有位置编码,模型就不会用词序,很多语法、语义关系就抓不住。位置编码能帮模型理解和利用顺序与距离。有了位置编码,注意力在计算相关性时,不只是看词本身,还能感知“谁在谁前面、相隔多远、是不是邻近”。这会提升依存关系、指代消解、长句理解等一系列能力。

方法大致分几类。我这里只给方向,不展开细节:一种是绝对位置,给每个序号一个向量,直接加到 token 向量上;一种是用三角函数的固定位置编码(你后面问到的“三角式位置编码”,常见是正弦/余弦那套),用一个固定图案来标位置;还有一类是相对位置,不关心“第几”,而是让注意力对“距离”敏感;此外,还有旋转位置编码(RoPE)ALiBi 这类变体,核心也是把“位置信息/距离信息”注入到注意力里。具体怎么做、有什么差异,我们放到你后面的专门问题再细讲。


Q10. 解释绝对位置编码,三角式位置编码, 相对位置编码

绝对位置编码就是:给“第 0 位、第 1 位、第 2 位……”各自准备一条可学习的向量。输入时,把“token 向量”和“它所在位置的向量”相加再送进 Transformer。直觉上,模型一开始就知道“我在第几位”。它的好处是简单、好训、效果稳;但最大长度要事先定好,超出训练过的长度就需要插值或扩表,外推会受限。适合长度比较固定或不太长的场景。

三角式位置编码指的就是正弦/余弦那种固定位置编码。做法不是学参数,而是用多组不同频率的正弦、余弦把“第几位”变成一条向量,然后同样加到 token 向量上。直觉上,不同频率像“标尺”,能同时刻出“粗的顺序”和“细的间隔”。它不需要训练能外推到更长序列;但可塑性不如可学习的方式,有时需要模型自己去适应这些固定花纹。

相对位置编码不直接说“我是第几位”,而是把两个词之间的距离放进注意力里。也就是在算注意力分数时,让它对“j 和 i 相隔几步、谁在前谁在后”变得敏感。直觉例子:the cat sat on the mat 里,catsat 距离近,应该更容易互相注意;换个位置,只要距离相似,注意力行为也相似。它的优点是位置不变性强长文本更稳可外推;代价是实现稍复杂(要在注意力里改打分或改向量表示)。


Q11. 什么是旋转位置编码, 用在哪些模型中

旋转位置编码的直觉是:先按正常流程算出每个位置的查询向量和键向量(Q、K),然后根据它在序列里的位置,给这两个向量做一小步“旋转”。早的位置转得少,晚的位置转得多。这样一来,两个 token 做点积时,结果天然带上“相对位移”的信息——隔几步、谁在前谁在后,都会反映在注意力分数里。你可以把它想成:把向量当作平面上的“指针”,位置不同就把指针转一转;两支指针夹角的变化,正好告诉模型它们在句子里的相对距离。它不需要一张固定的“位置表”,而是直接在注意力里注入距离感,所以对长上下文更稳,也更容易外推到更长的序列(很多实现还会做 RoPE 的“缩放/扩展”,把上下文再拉长一点)。

用在哪些模型里? RoPE 最早来自 RoFormer,一开始就服务于 Transformer。现在很多开源大模型都在用或用过它,比如 LLaMA 家族,以及 GPT-NeoX / GPT-JFalconQwen / ChatGLMBaichuan 等等。整体上讲,现代 LLM 大多选 RoPE 或其变体,因为它把“相对位置信息”直接放进注意力里,效果稳、工程也简洁。


Q12. NLP中除了词嵌入和位置嵌入, 还有其他嵌入吗

除了词嵌入和位置嵌入,我更常用的还有这三种。
Segment Embedding(句子对嵌入):当输入里有两个片段时(比如自然语言推理、阅读理解里的“问题 + 段落”),给第一个片段打上一种向量、第二个片段打上另一种向量,把它们加到 token embedding 上。这样模型一眼就知道哪部分是 A、哪部分是 B,不会把两段的语义混在一起。
Task Embedding(任务嵌入):做多任务或指令式训练时,很容易迷糊“现在到底在做哪个任务”。给每个任务配一个小向量或一个学到的“任务标记”,贴在输入上或加到 embedding 里,相当于给模型打个“模式开关”,共享主干但按任务走不同的解法。
Speaker Embedding(说话人嵌入):对话场景里尤其有用。给“谁在说话”一个向量(如 User、Assistant,或说话人 A/B),加到该说话人的 token 上。模型就能更稳地做轮次跟踪、指代消解,也更少把两个人的话混为一谈。
一句话怎么选:有句子对就上 Segment;多任务/多指令就上 Task;多轮对话就上 Speaker。


Attention

Q13. 解释什么是注意力机制, 有什么作用

注意力机制(Attention)就是让模型“有选择地看”的办法。人读句子会把注意力放在关键词上,模型也一样:它会根据当前要处理的词,去衡量输入里哪些位置更重要,然后多看重要的、少看不重要的
直觉流程很简单:为当前词做一个 查询向量 Q,把它和所有位置的 键向量 K 去对比,相似就打高分;分数过一遍 softmax 变成权重,再用这些权重对 值向量 V加权求和,得到一个“上下文向量”。这就是模型此刻真正“看进去”的信息。自注意力是在同一序列里互相看;交叉注意力是一个序列去看另一个序列(比如翻译里,解码器看编码器)。

它的作用主要有几条:第一,抓长距离依赖,隔很远也能互相影响;第二,动态选信息、抗噪,不相关的就少看;第三,多头注意力可以同时看不同关系(语法、语义、搭配等),表达更丰富;第四,并行友好,让 Transformer 训练推理都很快;第五,一定程度可解释,从权重能看出模型关注点。需要注意的是:注意力天生不带词序,所以要配合位置编码;另外它的计算量随序列长度大致是平方增长,长上下文时要做优化。


Q14. encoder-decoder框架是什么,介绍常见的几种llm使用的是encoder-decoder框架,还是单纯encoder框架,还是decoder框架.

encoder–decoder 框架就是把模型分成两段来做事。Encoder 先把输入句子一次性读完,做成一串“上下文化”的表示;Decoder 再在这些表示上,一步一步地生成输出,每次只看自己已经生成的内容(用掩码自注意力),同时跨注意力去读 encoder 的结果。这个结构最擅长做“把一段话变成另一段话”的任务,比如机器翻译、摘要、问答生成。

如果只有 encoder(也叫 encoder-only),模型只负责“读懂”,不负责“生成”。它把整句双向地编码好,后面接一个小头就能做分类、抽取、检索、打分这类理解型任务。典型例子:BERT、RoBERTa、DeBERTa、ALBERT、ELECTRA,还有很多检索/句向量模型(如 Sentence-BERT、E5)都走这一路。

如果只有 decoder(decoder-only),模型就是一个自回归生成器:给它一个提示,它就从左到右往下写。它靠掩码自注意力记住上下文,不需要单独的 encoder,所以推理链路更简单,非常适合对话、写作、代码补全。常见家族有:GPT-2/3 系LLaMA 系Mistral,以及谷歌的 PaLMGemma 等,大多数聊天型 LLM 都是这一路。

如果是encoder–decoder,两段配合完成“输入→输出”的映射,跨注意力把两边连起来。代表模型:T5 / FLAN-T5、mT5、BART、mBART、PEGASUS、NLLB、MarianMT 等,翻译和摘要里很常见。

一句话的使用建议:只读不写encoder-only要写要续写多半用 decoder-only明确要把 A 序列变成 B 序列(翻译/摘要/风格迁移),选 encoder–decoder 更顺手。


Q15. 解释self-attention, multi-head attention (MHA),和cross-attention.

Self-attention 是什么?
直观地说,就是“一个序列自己看自己”。每个位置先从上一层表示里,通过三次线性变换,得到 Q(我在找什么)K(我能提供什么)V(被选中时给什么)。然后用 Q 去和所有 K 做匹配,匹配高就多看对应的 V。编码器里的 self-attention 是双向看的解码器里的 self-attention 用因果 mask,只能看左边(已生成)的内容。

著名公式(Scaled Dot-Product Attention):

这里 $d_k$ 是 K 的维度。除以 $\sqrt{d_k}$ 是为了把分数的尺度压下来,更稳定;如果在解码器就会再加一个“下三角 mask”,确保不能偷看右边的词。

Multi-Head Attention(多头)是干嘛的?
同一套输入,不只算一遍上面的注意力,而是并行算很多头。每个头有自己的 $W_Q^i, W_K^i, W_V^i$,去关注不同的关系(比如短距离搭配、长距离依存、实体指代等),最后把各头的结果拼起来再过一层线性变换:

直觉上,多视角同时看,表达力更强。

Cross-attention 和 self 有什么不同?
Self 是“在同一个序列里互相看”。Cross 则是“这个序列去看另一个序列”。在 encoder-decoder 里,Q 来自解码器当前层,K/V 来自编码器的输出。这样解码器在生成每个词时,都能去读整句输入,典型用在翻译、摘要这类把 A 变成 B 的任务。


Q16. attention的改进,比如DeepSeek的MLA(multi-head Latent Attention) (解释从MHA,MQA,GQA到MLA的演变)

先从大家最熟的 MHA(Multi-Head Attention) 说起。它的做法是:每个头都有自己的一套 $W_Q, W_K, W_V$ 去算 Q/K/V,所以每个头都会产出一份 K、V。这样表达力强,但在自回归生成时要存 KV cache(把历史 token 的 K/V 都存起来复用),内存和带宽都会随着“头数 × 序列长”线性涨,服务起来很吃显存。

接着是 MQA(Multi-Query Attention)。思路很直接:所有头共享一份 K 和一份 V,只有 Q 还是每个头一套。这样每个新 token 只需要存 1 份 K/V,KV cache 直接从 “H 份”降到 “1 份”,带宽压力也大幅下降。代价是表达力会弱一点点(因为各头看到的是同一份 K/V)。

中间态是 GQA(Grouped-Query Attention)。它不走极端,而是把头分成几组:每组共享一份 K/V。比如 32 个头分成 8 组,那就只存 8 份 K/V。它在质量上更接近 MHA,但内存带宽又明显比 MHA 省,常被大模型用在推理侧。

最后是 MLA(Multi-Head Latent Attention,DeepSeek 提出)。可以把它理解成“先把 K/V 压到一个更小的共享潜在空间,再按头去‘展开’使用”。落地做法是:把每个 token 的表示先过一个共享的降维,得到一小段“latent K/V”,缓存时只存这份小向量;真正做注意力时,再用头内的小投影把这份 latent 按头还原成各自的 K/V。好处是:KV cache 更小(接近 MQA 的量级,甚至更小),但因为每个头在使用时有自己的“展开方式”,表达力更接近 MHA/GQA。代价是前向时多了一点点“从 latent 展开”的计算,不过相比省下的内存带宽,整体吞吐通常更好。直观打一组数字:假设 32 头、每头 128 维,MHA 每个 token 要存 $32×128×2$ 个数(K+V);MQA 只存 $1×128×2$;GQA(8 组)存 $8×128×2$;MLA 如果把 latent 设成 96 维,那就是 $1×96×2$,同时还能保留“按头展开”的灵活性。

一句话把演变串起来:MHA:每头独立 K/V → MQA:所有头共享 K/V → GQA:按组共享 K/V → MLA:共享一份更小的“latent K/V”,按头动态展开。它们都不改注意力公式本身,改的是K/V 的产生与缓存方式,目标就是在不明显掉质量的前提下,狠降 KV cache 的内存和带宽
怎么选?质量优先、显存够用,MHA/GQA;在线服务、显存吃紧,优先 MQA/GQA;想在省 cache 的同时尽量保留多头表达力,可以考虑 MLA(前提是框架/模型支持)。


FFN (Feed-Forward Network)

Q17. 解释什么是FFN, 其作用是什么

其实 FFN(Feed-Forward Network,前馈网络)就是 Transformer 里的一个关键小模块。它本质上是一个两层的全连接神经网络,中间加了一个非线性激活函数,比如 ReLU 或者 GELU。它的计算过程很直接:输入先经过一个线性变换(通常把维度扩展成原来的 4 倍),再通过激活函数,然后再缩回到原来的维度。

它的作用主要有三个:

  1. 非线性变换:通过激活函数,把输入里的复杂关系捕捉出来,不只是简单的线性组合。
  2. 增强模型表达能力:因为有了维度扩展,FFN 可以理解更复杂的特征模式。
  3. 补充注意力机制:注意力更像是看不同位置之间的关系,而 FFN 更专注在每个位置自身的特征表达。

所以简单说,FFN 就是给 Transformer 提供“额外的脑力”,让它不光会看不同词之间的关系,还能更好地理解每个词自己的特征。


Q18. 激活函数的作用是什么, 介绍Sigmoid,Softmax, Tanh, ReLU等激活函数

在神经网络里,激活函数的作用就是给模型“加非线性”。如果全是线性变换,最后还是线性的,学不到复杂模式。

这里的线性变换,其实就是把输入 $x$ 乘一个矩阵再加上偏置,比如:

它的特点是:输入和输出的关系是线性的,也就是说如果你把两个输入加在一起再乘个系数,结果还是一样的形式。这样的操作虽然能做缩放、旋转、平移,但本质上学不到“弯弯绕绕”的复杂关系。

常见的几种激活函数:

  • Sigmoid:公式是

    它把输入压缩到 0 到 1 之间,很像 S 形曲线。常用于二分类输出,比如概率。但问题是深层网络容易梯度消失。

  • Tanh:公式是

    它的范围是 -1 到 1,比 Sigmoid 更居中,所以通常效果好一些。但同样会有梯度消失。

  • ReLU:公式是

    大于 0 就原样输出,小于 0 就变成 0。它计算简单,收敛快,也缓解了梯度消失问题。但缺点是有“神经元死亡”的风险。

  • Softmax:公式是

    它把一组数转成 0 到 1 的概率分布,所有值加起来等于 1。常用于多分类的输出层。

所以总结一下:激活函数就是“非线性开关”。ReLU 在隐藏层用得最多,Sigmoid 和 Softmax 更适合在输出层。


Q19. 介绍Leaky ReLU, ELU, GELU, Swish, GLU, SwiGLU激活函数

在 ReLU 的基础上,其实很多人提出了改进版本,来解决它的一些问题(比如“神经元死亡”)。我给你讲几个常见的:

  • Leaky ReLU:公式是

    它在负数部分不直接变成 0,而是保留一个很小的斜率($\alpha$,通常是 0.01),这样可以避免神经元完全没梯度。

  • ELU (Exponential Linear Unit)

    它的负数部分是指数函数,可以让输出更平滑,还能让平均值更接近 0,这对训练收敛更稳定。

  • GELU (Gaussian Error Linear Unit)

    简单理解就是输入乘一个概率因子。相比 ReLU 更平滑,现在 Transformer 里基本都用 GELU。

  • Swish

    它是输入乘以 Sigmoid 的结果,整体曲线很平滑。Google 在一些任务里发现 Swish 比 ReLU 更好。

  • GLU (Gated Linear Unit)

    这里输入会分成两部分 $a$ 和 $b$,然后 $b$ 经过 Sigmoid 作为“门”,去控制 $a$ 的输出。这样可以动态调节信息流。

  • SwiGLU (Swish-Gated Linear Unit)

    它算是 GLU 的升级版,引入了 Swish,使 gating 更加灵活。现在很多大模型(像 GPT-4 系列)就用 SwiGLU。

所以总结一下:这些激活函数都是在 ReLU 基础上的改进,目标是更平滑、更稳定,或者更灵活。现代大模型里,GELU 和 SwiGLU 用得最广。


Add & Norm

Q20. 什么是残差链接, 残差链接的优势

残差链接(Residual Connection)其实就是 “跳跃连接”,最早是在 ResNet 提出来的。公式很简单:

这里 $F(x)$ 是中间几层网络的变换,$x$ 是原始输入。换句话说,模型不仅学 $F(x)$,还直接把输入加回去。

优势主要有几个:

  1. 缓解梯度消失:在很深的网络里,梯度容易消失。残差链接提供了一条“捷径”,让梯度能直接回传。
  2. 更容易训练深层网络:普通深层网络容易退化(越深反而效果更差),而有残差结构就能很轻松地训练几十层、上百层的模型。
  3. 信息保留:输入的信息直接传到后面,不会因为中间层过度变换而丢掉,这样模型能学到“差异”(residual)而不是从零开始学。
  4. 收敛更快:因为学习的目标变成了“学差值”,优化问题简单了很多,训练更稳定。

简单说,残差链接就是在深层网络里修了一条“高速通道”,让信息和梯度能顺畅流动。


Q21. 解释为什么残差链接可以缓解梯度消失,为什么可以加快收敛

1. 为什么能缓解梯度消失?
在普通的深层网络里,梯度需要一层层传回去,如果中间的权重矩阵或者激活函数让梯度变得很小,就会出现“梯度消失”。
而在残差结构里,反向传播的时候有一条“直通路径”:

对 $x$ 求导时:

这里的 “+1” 非常关键。哪怕 $\frac{\partial F(x)}{\partial x}$ 很小,梯度至少还能通过这条恒等映射直接传回去。所以梯度不会完全消失。

2. 为什么能加快收敛?
普通网络要学习一个复杂的映射 $H(x)$。而残差网络只需要学习一个残差函数:

换句话说,它学习的是“差值”,而不是整个函数。这个学习目标往往更简单、更接近 0,所以优化问题更容易,训练过程就更快、更稳定。


Q22. 什么是归一化, NLP中常见的归一化操作有哪些

归一化(Normalization) 在深度学习里,就是一种把输入数据“调平衡”的方法。简单说,就是让不同层的输入分布更稳定,这样训练会更快、更稳,也能缓解梯度消失或爆炸。

它的核心目标是解决所谓的 内部协变量偏移 (internal covariate shift) ——上一层参数更新导致下一层输入分布突然变化。归一化就像一个“校准器”,帮网络维持输入在一个合适的范围里。

在 NLP 里,常见的归一化操作有:

  1. Batch Normalization (BN)
    在 batch 维度上做归一化,也就是对一个 batch 里同一通道的数据进行标准化。
    在 NLP 的早期 CNN 或 RNN 模型里会用,但对小 batch 效果不好。

  2. Layer Normalization (LN)
    在通道维度上做归一化,对每个样本独立计算。
    在 Transformer 里最常见,因为它不依赖 batch 大小,对序列建模很合适。

  3. Instance Normalization (IN)
    在图像任务中更常见(对单个样本的 H×W 做归一化),在 NLP 用得少,偶尔会在文本风格迁移里出现。

  4. Group Normalization (GN)
    介于 LN 和 BN 之间,把通道分组,每组内做归一化。
    在 NLP 里不如 LN 常用,但在一些特殊架构里也会考虑。

所以总结一下:
在 NLP 里最常见的是 LayerNorm,几乎是 Transformer 的标配;BatchNorm 早期有过,但现在基本被 LayerNorm 取代。


Transformer

Q23. 介绍Transformer的完整结构, 包含分词,词嵌入,位置编码,attention,FFN,残差链接,归一化等.

1) 整体框架

Transformer 是一个编码器—解码器架构。高层看法很简单:Encoder 负责“理解输入”Decoder 负责“生成输出”。两者通过注意力把信息对齐起来。

2) Encoder(编码器)

  • 输入经过分词、词嵌入、位置编码后,进入 若干个 Encoder Block
  • 每个 Block 含:多头自注意力(MHSA)→ 前馈网络(FFN),每个子层外面都有残差连接 + LayerNorm(现代实现多为 Pre-LN:Norm 在子层之前)。
  • Encoder 输出一串“上下文表征”(也叫 memory),供 Decoder 读取。

3) Decoder(解码器)

  • 结构也按 Block 堆叠,但每个 Block 有两次注意力

    1. Masked Self-Attention(自注意力):只看已生成(或目标端已知)的 token。

      • Q/K/V 都来自 Decoder 当前层的输入(即目标序列的隐藏状态)
      • 用**序列掩码(causal mask)**保证位置 i 只能看到 ≤ i 的位置。
    2. Cross-Attention(编码器—解码器注意力):把输出与源端对齐。

      • Q 来自 Decoder(上一子层的输出)K/V 来自 Encoder 的输出(memory)
      • 对 K/V 再套一个源端的 padding mask,避免注意到源端的 <PAD>
  • 每个注意力子层后都接 FFN,并配 残差 + LayerNorm
  • 顶部接线性层 + Softmax,预测下一个 token。

更口语地说:**Decoder 先用自注意力“理解自己已经写了什么”,再用 cross-attention 去“翻看” Encoder 的笔记,从源句子里取该看的信息。**自注意力的 Q/K/V 都是自己人;cross-attention 的 Q 是自己人,K/V 是 Encoder 那边的人。

4) Masking(掩码机制)

  • mask 通常是一个矩阵,元素是 1 或 0;1 表示该位置可参与计算,0 表示被遮盖、不可参与计算。实现里通常把 0 位加上一个大负数(如 -inf)再进 softmax。
  • Padding Mask:在 Encoder 自注意力、以及 Decoder 的 cross-attention 里使用,用来屏蔽源或目标中的 <PAD>
  • Sequence/Causal Mask:只在 Decoder 的自注意力里用,禁止看未来位置,保证自回归生成不“作弊”。

5) Encoder 与 Decoder 的联系与差别

  • 联系:Decoder 的 cross-attention 以 Encoder 输出为 K/V,把源端信息对齐到目标端;训练和推理中,这个桥是逐层使用的。
  • 差别:Encoder 只有自注意力且可全局互看;Decoder 既有带因果掩码的自注意力,又有跨注意力与 Encoder 交互。

细节模块(从输入到 Block 内部)

A) 分词 → 词嵌入 → 位置编码

  • 分词:常用子词(BPE、WordPiece)。
  • 词嵌入:把 token 映射到 d_model 维;训练时与输出层常做权重共享。
  • 位置编码:补上顺序感。要么固定的正弦/余弦,要么可学习向量(也有 RoPE 等相对位置变体)。

B) 注意力(以单头为例)

  • 多头(Multi-Head):把维度切成多份并行做注意力,再拼回去,能看不同子空间的关系。
  • Decoder 自注意力:Q/K/V 同源于 Decoder;带 causal mask。
  • Cross-Attention:Q 来自 Decoder,K/V 来自 Encoder;附加源端 padding mask。

C) FFN(前馈网络)

常见为两层 MLP:

  • 中间维度通常是 4×d_model,激活多用 GELU/Swish 等。

D) 残差连接与归一化

  • 每个子层外都有 Residual:$y=x+\text{sublayer}(x)$,便于梯度流动、缓解消失。
  • LayerNorm:稳定数值、加速收敛。现代实现多为 Pre-LN(Norm 在子层前),训练更稳。

Q24. 掩码机制是什么, 有什么作用. 介绍Padding Mask和Sequence Mask.

掩码机制 (Masking) 在 Transformer 里就是一种“屏蔽”的技巧。它的主要作用是控制哪些信息可以被注意力机制看到,哪些不能被看到。这样既能提高训练效率,也能保证模型逻辑正确。
在实现上,mask 通常是一个矩阵,元素由 1 或者 0 组成,1 表示这个位置可以参与计算,0 表示这个位置被遮盖不能参与计算。

在 Transformer 里,主要有两种常见的掩码:

  1. 填充掩码 (Padding Mask)
    因为 NLP 的输入序列长度不一样,需要对短的句子用 <PAD> 补齐。

    • 问题是:这些补齐的 <PAD> 并不是实际的内容,如果模型在计算注意力时把它当成有意义的词,就会干扰结果。
    • 所以我们用 Padding Mask,把 <PAD> 位置屏蔽掉,让注意力忽略它们。这样每个样本在 batch 里都能对齐,但模型只会关注真实的词。
  2. 序列掩码 (Sequence Mask)
    这个主要用在 解码器 (Decoder) 里。解码器是生成式的,每一步只能看之前生成的词,不能偷看未来的词。

    • Sequence Mask 就是保证位置 $i$ 只能看到自己和前面的位置,不能访问 $i+1, i+2$ 这些未来词。
    • 比如做机器翻译时,模型预测下一个单词时,只能用到已生成的单词,而不能用到还没生成的部分。

总结
掩码机制的作用在于屏蔽无效信息和非法的信息通路。填充掩码的主要作用是处理输入长度不一致,屏蔽掉补齐的 <PAD>;序列掩码的主要作用是保证解码器自回归生成时不能作弊,只能看到过去的位置。


Q25. transformer中的解码策略是什么, 介绍四种常见的解码策略

从整体上看,解码策略就是把模型在每一步得到的“下一个 token 的概率分布”转换成一条真正的输出序列的方法,而不同的方法会在“确定性和多样性”以及“质量和速度”之间做不同的取舍。

在贪心搜索(Greedy Search)中,模型在每一步都会直接选择当前概率最高的 token,因此生成速度很快而且结果可复现。与此同时,这种做法往往会显得短视并容易产生重复,所以在实际使用中常常会配合最小长度和重复惩罚等技巧来缓解这些问题。

在束搜索(Beam Search)中,解码过程会同时保留得分最高的 B 条候选序列,并在下一步对每条候选进行扩展后再只保留前 B 条,因此整体上更容易得到连贯、全局更优的文本。与此同时,这种方法的计算成本更高而且有偏好短句的倾向,所以在工程上通常会加入长度惩罚来达到更平衡的结果。

在 Top-k 抽样中,解码器会把分布截断到概率最高的 k 个 token,并在这个受限集合内按照归一化后的概率进行随机抽样,因此可以在可控范围内引入多样性。与此同时,过小的 k 会让文本过于保守而过大的 k 又可能让输出不稳定,所以更稳妥的做法是结合任务特点来设定合适的 k,并视情况叠加温度和重复惩罚。

在 Top-p(核采样)中,解码器会从累计概率达到阈值 p 的最小候选集合中进行抽样,因此候选集合的大小会随不确定性自动变化,从而在可信度和多样性之间取得较好的平衡。与此同时,很多通用生成任务在 p 取 0.9 左右时通常能得到流畅且不那么重复的结果,但最合适的 p 仍然需要结合任务目标做小范围调试。

从实战选择的角度来看,如果任务更强调确定性和可复现性,那么使用贪心搜索或较小束宽的束搜索并配合长度惩罚通常更合适;如果任务更强调自然度和创意性,那么使用 Top-p 或 Top-k 并叠加合适的温度和重复惩罚往往能获得更好的体验;如果任务类似机器翻译这类对精确性要求很高的场景,那么带长度惩罚的束搜索常常是一条可靠的默认选择。


Q26. transformer和CNN的区别在哪里

第一点:看信息的“视野”不一样。
一句话总结:Transformer 一上来就能全局看任何两个位置,而 CNN 先看小局部,再靠堆很多层把视野慢慢放大。
细节解释:自注意力允许任意两个 token 直接相互“关注”,所以长距离关系在一层里就能连上;卷积核只覆盖邻域,模型需要更深的层数、或更大的/空洞的卷积核,才能把远处的信息纳入进来。这就让 Transformer 在需要长程依赖的任务里更省心。

第二点:内置的先验不同,顺序信息的处理也不同。
一句话总结:Transformer 先验很弱,需要位置编码告诉它“谁在第几位”,而 CNN 天然有“局部性”和“平移等价”的先验。
细节解释:Transformer 不假设局部结构,因此会额外加正弦/可学习的位置信息(或相对/旋转位置)来引入顺序;CNN 的权重共享和小卷积核自带对局部纹理的偏好,在数据不多的场景也能学到稳定特征,这就是大家常说的“强归纳偏置”。

第三点:算力和显存的开销随长度的增长不一样。
一句话总结:是的,随着序列变长,Transformer 的标准自注意力开销按长度平方增长,通常比固定核大小的 CNN 增长更快。
细节解释:自注意力要比较“每个位置对每个位置”,所以计算和显存都大致是 $O(n^2)$ 级别;卷积在核大小固定时更接近 $O(n)$,输入翻倍时成本大致线性增长。当然,如果你想让 CNN 拥有特别大的感受野,也需要更深或特殊卷积,成本也会抬升,但总体扩展曲线还是更温和。

一句选择建议: 如果任务特别依赖长距离上下文或者需要把远处的信息迅速关联起来,那么选择 Transformer 往往更合适;如果任务更看重局部纹理、数据不算多、或者部署资源比较紧张,那么从 CNN 起步通常更稳更省心。


pre-training

Q27. 模型预训练是什么意思, 介绍常见的模型预训练方法

其实,“预训练”就是在模型真正用来做任务之前,先帮它打好基础。就像小孩先学拼音、字母,再去学写作文。预训练阶段,模型会在很大规模的数据上学一些“通用能力”,比如语言模型就先在大量文本上学会预测下一个词。这样等到我们要做具体任务,比如情感分析、机器翻译,就只需要在小数据上“微调”一下,模型就能学得更快、更好。

常见的方法有几个:

  1. 语言模型预训练 (Language Modeling)
  • 解决的问题:主要是让模型学会“语言的流动性”,也就是句子里词与词之间的自然关系。这样模型在后续生成或理解任务中会更自然。
  • 步骤

    1. 把大规模语料准备好,比如维基百科、小说、新闻。
    2. 给定一句话,让模型去预测下一个词。例如“今天我想去___”,模型要猜“吃饭”、“跑步”之类的合理词。
    3. 不断重复这个过程,模型就慢慢学会了词序和语法。
  1. 掩码语言模型 / 自编码器 (Masked Language Model / Autoencoder)
  • 解决的问题:训练模型更好地理解上下文,而不是只盯着前一个词。
  • 步骤

    1. 在一句话里随机遮住一些词,比如“我去 [MASK] 吃饭”。
    2. 模型需要根据上下文来预测这个被遮住的词,比如“餐馆”。
    3. 这样模型在训练时,不仅学到单词本身,还学会了利用前后信息去填空。
    4. BERT 就是用这种方法,所以它很擅长“理解类任务”(分类、问答)。
  1. 对比学习 (Contrastive Learning)
  • 解决的问题:让模型学会“判别关系”,比如图片和文字是不是对应的。
  • 步骤

    1. 准备成对的数据,比如“一张狗的照片 + ‘一只狗’的文字”。
    2. 同时也准备一些不匹配的组合,比如“狗的照片 + ‘一辆车’”。
    3. 训练时,模型要把正确的配对“拉近”,错误的配对“推远”。
    4. 这样学到的表示可以用在检索(比如输入文字,找到对应的图片)。CLIP 就是这样训练的。
  1. 生成式预训练 (Generative Pre-training)
  • 解决的问题:不仅仅是理解输入,还要能生成新的内容,像写文章、回答问题。
  • 步骤

    1. 给模型一个开头,比如“一只小猫在…”。
    2. 模型通过学习生成下一个词,再接着下一个,直到完整生成一段话。
    3. 训练时,就是大量让它重复“看→预测→生成”的过程。
    4. GPT 系列就是靠这种方法,所以它在写作和对话任务上很强。

所以总结一下,预训练的目的就是“打地基”,不同方法就是给模型不同的训练习惯,后面才能在各种任务里更好地表现。


Q28. 常见的数据预处理方法

什么是数据预处理?
简单来说,数据预处理就是在把数据交给模型之前,先做一系列“打理”的步骤。因为原始数据往往很乱:可能有缺失值、格式不统一、范围差异太大,甚至有噪声。如果直接把这些数据拿去训练,模型就很难学好。所以预处理的目标就是让数据更干净、更规范,让模型能更有效地学习。

  1. 缺失值处理 (Missing Value Handling)
  • 问题:在真实数据里,经常会出现缺失值,比如有些人没填调查问卷中的某个问题,或者传感器没有记录下某个时刻的数据。如果不处理这些缺失,模型可能无法正常训练。
  • 解决办法:一种办法是直接删掉这些样本;另一种办法是用统计量(比如平均值、中位数或者众数)来填补缺失;更高级的办法是训练一个模型来预测缺失值,从而尽量保留完整的数据结构。
  1. 数据清洗 (Data Cleaning)
  • 问题:原始数据里可能会有错误、重复或者极端异常值。比如在年龄字段里可能会出现“300岁”这样的明显错误。
  • 解决办法:数据清洗通常包括去重、修正错误格式、以及检测和删除异常值。通过清洗,可以让数据更加真实和合理。
  1. 归一化 / 标准化 (Normalization / Standardization)
  • 问题:不同特征的数值范围差异很大,比如“身高”通常在 100 到 200 之间,而“收入”可能在几万甚至几百万之间。如果不做处理,模型会受到大数值特征的主导,导致训练结果失衡。
  • 解决办法:归一化就是把数值缩放到一个固定区间(通常是 0 到 1 之间);而标准化则是让数据减去均值再除以标准差,从而变成均值为 0、方差为 1 的分布。这样所有特征就能在同一尺度下进行比较。
  1. 特征编码 (Feature Encoding)
  • 问题:模型本身只能理解数字,而不能直接理解文字或分类标签。比如“红色/蓝色/绿色”这种类别信息如果不转化,就无法直接输入到模型。
  • 解决办法:常见的方法是用 One-hot 编码,把每个类别转换成二进制向量;更复杂的场景下,可以用嵌入表示(embedding),让类别被映射到一个连续的向量空间里,保留更多语义信息。
  1. 文本处理与分词 (Text Preprocessing & Tokenization)
  • 问题:文本数据不能直接作为输入,需要把它拆分成更小的单元。比如一句话“我喜欢学习”,模型不能直接处理字符串,而需要把它拆成“我 / 喜欢 / 学习”。
  • 解决办法:最常见的做法是分词,把句子拆成词或子词;还可以去掉停用词(比如“的”、“了”、“啊”这种不太有意义的词);或者做词干化,把“running”转化成“run”。另外,现代 NLP 模型常用子词编码,比如 BPE(Byte Pair Encoding),可以更好地处理生僻词。
  1. 数据增强 (Data Augmentation)
  • 问题:在很多任务里,标注好的数据集往往太小,模型可能学不出足够的模式,甚至会过拟合。
  • 解决办法:数据增强就是通过人为制造一些“变种数据”来扩充数据集。在图像任务里,可以通过旋转、裁剪、加噪声来产生新样本;在文本任务里,可以通过同义词替换或翻译回译来生成更多语料。这样模型就能在更丰富的数据上进行学习。

Q29. 什么是数据增强, 常见的数据增强的方法

什么是数据增强?
数据增强就是在数据量不足或者数据不够多样的时候,通过人为的方式去“扩充”或“改造”数据,让模型见过更多不同的情况。其实它的本质不是创造全新的数据,而是对已有数据做一些合理的变化。这样模型就能学得更稳健,不容易过拟合,也能更好地泛化到新数据。

  1. 图像数据增强 (Image Augmentation)
  • 旋转与翻转 (Rotation & Flipping)

    • 问题:如果模型只见过“正方向”的图片,它可能在遇到旋转或翻转的图像时表现很差。
    • 解决办法:我们可以随机旋转或水平/垂直翻转图片,这样模型就会学会在不同角度下识别同一个物体。
  • 裁剪与缩放 (Cropping & Scaling)

    • 问题:在真实场景中,物体可能只出现在画面的一部分,或者大小比例和训练集不一样。
    • 解决办法:通过随机裁剪图片的一部分或对图像进行缩放,模型可以学习在不同大小和位置下识别目标。
  • 添加噪声 (Adding Noise)

    • 问题:实际拍摄的图像可能会受到光线不足或传感器噪声的影响。
    • 解决办法:在训练图片中加入高斯噪声或模糊效果,让模型更有鲁棒性,不怕真实环境中的干扰。
  • 颜色扰动 (Color Jittering)

    • 问题:不同设备拍摄的图像会有亮度、对比度和颜色差异。
    • 解决办法:通过调整图片的亮度、饱和度、对比度,让模型学会适应各种光照条件。
  1. 文本数据增强 (Text Augmentation)
  • 同义词替换 (Synonym Replacement)

    • 问题:文本数据集往往很小,导致模型只学到有限的表达方式。
    • 解决办法:我们可以把句子里的某些词替换成同义词,比如“我很高兴”换成“我很开心”,这样能增加表达的多样性。
  • 回译 (Back Translation)

    • 问题:在自然语言任务中,句子数量有限,模型可能记住固定的句式。
    • 解决办法:先把句子翻译成另一种语言,再翻译回来。例如中文翻译成英文,再翻译回中文。这样句子意思不变,但表达方式会有所不同。
  • 随机插入或删除 (Random Insertion/Deletion)

    • 问题:模型可能过度依赖某些特定词语,而忽略整体语义。
    • 解决办法:随机插入一些近义词,或者随机删除一些非核心词,让模型学会从整体语义去理解句子。
  1. 数值型数据增强 (Numerical Data Augmentation)
  • 加噪声 (Noise Injection)

    • 问题:数值特征如果太“干净”,模型可能记住训练数据,而不能泛化到真实世界。
    • 解决办法:在数值特征中加入少量随机噪声,比如在温度特征中加减小的随机值,让模型更具鲁棒性。
  • 采样 (Resampling)

    • 问题:数据集常常类别不平衡,比如“欺诈交易”样本特别少。
    • 解决办法:我们可以对少数类做过采样,或者对多数类做欠采样,从而让训练数据更平衡。

post-training

Q30. 模型预训练、后训练post-training和微调fine-tuning之间有什么区别?

其实可以把这三步类比成“人从小学到工作”的过程:

  1. 模型预训练 (Pre-training)

    • 是什么:预训练就像打基础教育。模型在海量的通用数据(比如维基百科、新闻、小说)上学习语言规律。
    • 作用:它让模型具备基本的“常识”和表达能力,但这个时候它还不懂具体的任务,比如情感分析或者客服对话。
  2. 模型后训练 (Post-training)

    • 是什么:后训练是介于预训练和微调之间的一步,目的是让模型更贴近人类的需求。
    • 常见方法:比如指令微调(instruction tuning),让模型能听懂任务指令;再比如 RLHF(人类反馈强化学习),通过人类偏好来调整模型的输出风格。
    • 作用:它让模型从“会说话”变成“更好用、更符合人类预期”。
  3. 模型微调 (Fine-tuning)

    • 是什么:微调就像职业培训。我们会在特定任务的小数据集上继续训练模型,让它更适合某个特定领域。
    • 例子:比如你有个电商客服模型,就可以在客服对话数据上微调,让它更懂业务。
    • 作用:它让模型具备领域知识或特定技能,而不仅仅是通用能力。

一句话总结:预训练是“打通用基础”,后训练是“对齐人类期望”,微调是“学具体技能”。


Q31. 什么是prompt tuning? 什么是instruction tuning? 微调和提示学习(prompt tuning)和instruction tuning有什么差别?

1. Prompt Tuning(提示学习)

  • 是什么:Prompt tuning 就是给模型设计“提示”,让模型用已有的预训练知识去完成任务。它不是去动模型的参数,而是通过精心设计输入文本,让模型输出我们想要的答案。
  • 例子:比如我们想让模型做情感分析,可以给它一个提示:“评论:这家餐厅很好吃。 问题:这句话的情感是? 答案:”。模型就会根据上下文补充“积极”。
  • 特点:属于不改模型参数的方法,更像是“巧用提示”。

2. Instruction Tuning(指令微调)

  • 是什么:Instruction tuning 是在模型预训练之后,用大量“指令 + 答案”的数据来训练模型,让它学会如何听懂人类的任务描述。
  • 例子:比如训练数据里有“指令:把这句话翻译成英文;输入:我喜欢学习;输出:I like learning”。模型在看过成千上万条类似数据后,就能更自然地理解任务。
  • 特点:这是后训练的一部分,它真正修改模型参数,让模型更会听懂“自然语言任务指令”。

3. Fine-tuning(微调)

  • 是什么:微调就是在特定的下游任务数据集上继续训练模型,让它适应某个具体任务。
  • 例子:比如我们拿一个通用语言模型,在医学对话数据上微调,就能得到一个“医疗问答模型”。
  • 特点:和 instruction tuning 不同,它更针对单一任务或领域,而不是通用指令理解。

差别总结

  • Prompt tuning:不改参数,只是巧妙设计输入,让模型用已有知识完成任务。
  • Instruction tuning:通过大规模“指令数据”训练,改参数,让模型能听懂和执行各种自然语言指令。
  • Fine-tuning:在特定任务或领域数据上训练,改参数,让模型具备专门技能。

一句话比喻:Prompt tuning 是“问问题的技巧”,Instruction tuning 是“教学生怎么听懂题目”,Fine-tuning 是“带学生刷某一科目的专项题”。


Q32. 参数高效微调(比如 LoRA)的核心思想是什么?全参数微调和参数高效微调(PEFT,比如 LoRA、Adapter)有什么优缺点?

1. PEFT 的核心思想
参数高效微调(PEFT, Parameter-Efficient Fine-Tuning)的思路是:不要动整个大模型的全部参数,而是只在模型里加一些额外的小模块,或者只调整很少一部分参数,就能让模型学会新任务。

  • 全参数微调就像是把一本大书全部改写,非常费时间、费显存。
  • PEFT 则像是在书里夹几张小纸条,或者只在关键段落加笔记,就能达到调整效果。

常见方法:

  • LoRA(Low-Rank Adaptation):在原模型的权重矩阵旁边加一个低秩矩阵,训练时只更新这部分。
  • Adapter:在每一层里插入小的“适配层”,只更新这些层,原始模型参数保持冻结。
  • Prefix-tuning / Prompt-tuning:在输入里加一些可训练的“虚拟 token”,相当于给模型配一个“额外的提示”。

核心目标:用更少的参数、更小的计算成本,快速让大模型适配新任务。

2. 全参数微调 vs PEFT 的优缺点

  • 全参数微调 (Full Fine-tuning)

    • 优点

      • 灵活性强,模型可以完全适应目标任务。
      • 对复杂任务或和原始预训练任务差别很大的场景,效果最好。
    • 缺点

      • 参数量巨大,需要更新和存储整个模型(动辄上百 GB)。
      • 训练成本高(显存、时间、计算资源都贵)。
      • 不方便在多个任务之间切换,因为每个任务都要存一整份模型。
  • PEFT (LoRA、Adapter 等)

    • 优点

      • 只训练很少的参数(通常不到 1%),显存和计算需求大幅下降。
      • 可以为不同任务保存多个“小模块”,在同一个大模型上快速切换,成本很低。
      • 训练和部署更高效,适合中小团队或实际应用场景。
    • 缺点

      • 灵活性不如全参数微调,能力主要依赖原始预训练模型。
      • 对于任务差异特别大的情况(比如从语言转到代码或跨模态任务),效果可能不如全参数微调好。

一句话总结
全参数微调是“大修房子”,改造彻底但很贵;PEFT 是“加家具和装修”,花费小、效率高,但改造范围有限。


Q33. 你能举个例子,什么时候用微调,什么时候只用 prompt?

什么时候用微调?
比如你要做一个医疗问答模型。医疗领域的语言和通用语言模型差别挺大,涉及大量专业知识。如果只靠 prompt,模型可能答得不准,甚至答错。这个时候就需要把模型拿来在医疗对话或医学文献数据上做微调,让它真正学到领域里的知识和表达方式。

什么时候只用 prompt?
比如你要让模型做情感分析,其实这个任务模型在预训练时已经有足够的语义理解能力。你只需要设计好提示,比如“评论:这家餐厅很好吃。请判断这句话的情感是:”,模型就能直接给出“积极”这样的答案。这个时候没必要花费资源去微调。

一句话总结:微调更适合专业领域、任务差异大的情况;而 prompt 更适合通用、简单、模型已有能力的任务。


Q34. 后训练时常见的方法有哪些,比如 RLHF(人类反馈强化学习)?

在模型的后训练(post-training)阶段,最常见的三种方法是:指令微调 (Instruction Tuning)人类反馈强化学习 (RLHF)直接偏好优化 (DPO)

  1. 指令微调 (Instruction Tuning)
  • 是什么:指令微调的目标是让模型学会“听懂人类指令”。预训练的模型虽然会生成语言,但它往往只是在“接着写”,不一定能理解“这是一个任务”。
  • 怎么做:我们收集大量“指令 + 输入 + 输出”的样本,然后用监督学习方式训练模型。比如:

    • Instruction: Summarize the following review in one sentence.
    • Input: This phone has a great camera but the battery life is too short.
    • Output: The phone takes good pictures but has poor battery life.
      通过这种训练,模型学会在看到任务描述时,生成符合任务要求的结果。
  • 作用:训练后的模型不仅能“说话”,还能真正执行任务,比如总结、写代码、问答。
  1. 人类反馈强化学习 (RLHF, Reinforcement Learning from Human Feedback)
  • 是什么:RLHF 的目标是让模型的回答更符合人类偏好。它解决了这样的问题:模型虽然能完成任务,但回答可能奇怪、不安全或不够有帮助。
  • 怎么做

    1. 监督微调 (SFT):先让人类写一些理想回答,用来训练模型。
    2. 奖励模型 (Reward Model):人类对模型生成的多个答案排序,训练一个奖励模型去学会“人更喜欢哪种答案”。
    3. 强化学习优化:用奖励模型作为反馈,优化原始模型。这里用到的一种常见算法是 PPO (Proximal Policy Optimization)
  • 强化学习是什么?:简单来说,强化学习是一种“试错学习”。模型先做一个动作,然后得到奖励或惩罚,再根据奖励信号来改进下一次的行为。就像训练小狗,做对了给糖,做错了不给。
  • PPO 是什么?:PPO 是强化学习里常用的算法,它的作用是让模型在更新时“别离之前的策略太远”,既能不断改进,又不会一下子偏离原来学到的好策略。
  • 作用:经过 RLHF,模型更符合人类偏好,回答更安全、更自然、更有帮助。
  1. 直接偏好优化 (DPO, Direct Preference Optimization)
  • 是什么:DPO 是 RLHF 的简化替代方案,目标也是对齐人类偏好,但不用复杂的强化学习。
  • 怎么做:我们只需要收集偏好对,比如给一个问题和两个答案 A、B,人类选择“更喜欢 A”。DPO 直接用这种偏好对训练模型,让它更倾向于输出被人类喜欢的答案。
  • 作用:相比 RLHF,DPO 更简单,不需要训练奖励模型,也不需要 PPO,效率更高。

一句话总结

  • 指令微调 → 让模型听懂任务指令;
  • RLHF → 让模型的输出符合人类偏好,用强化学习和 PPO 实现;
  • DPO → 用更简单的方式实现人类对齐,效果接近 RLHF 但成本更低。

PEFT & RL

Q35. 介绍常见的PEFT方法

参数高效微调,简称 PEFT,其实就是一个思路:我们不需要在每个新任务上都把整个大模型重新训练一遍,因为那样代价太高。相反,我们只更新很少一部分参数,通常是在模型旁边加一些小模块或者小向量,就能让模型快速学会新东西。这样一来,训练更省资源,也更容易在不同任务之间切换。

在这些方法里,最常用的一个就是 LoRA。它的直觉特别简单:大模型里的权重矩阵很大,但真正需要调整的部分往往是低秩的。于是 LoRA 就在原始矩阵旁边加上一个小的低秩矩阵,只更新这部分小矩阵,原始权重保持不动。这样参数量能减少到原来的百分之一左右,但效果通常能接近全参数微调,所以现在几乎成了大模型里最流行的做法。

另一个经典的方法是 Adapter。它的做法是在 Transformer 的每一层里插入一个小的“适配层”,通常是先把维度降下去,再升回来,形成一个瓶颈结构。训练时只更新这些适配层的参数。这样好处是非常模块化,你可以给不同任务分别准备不同的 Adapter,就像给模型装上不同的插件,随时切换使用。

再往下是 Prefix-tuning。它的思路是给每一层的注意力机制都加上一小段可训练的前缀向量。这些前缀就像额外的上下文,能够在模型的每一层都起作用,而不是只停留在输入端。相比之下,它对模型的影响更深,所以在某些复杂任务上表现更好。

最后还有 Prompt-tuning,它可能是最轻量级的方式。做法是在输入句子的开头加一些虚拟的 token,这些 token 的向量是可以训练的。训练时只更新这几个 token 的 embedding,而大模型完全保持冻结。它的优点就是极其省参数,适合那种数据量小、资源有限的场景,但相对来说,能力可能不如 LoRA 或 Prefix-tuning 那么强。

所以总结一下,常见的 PEFT 方法就是 LoRA、Adapter、Prefix-tuning 和 Prompt-tuning。它们的共同点都是“动小不动大”,通过更新少量参数来获得和全参数微调相近的效果,同时还能大幅节省成本。


Q36. NLP中n-gram是什么概念, 常用于什么应用?

在 NLP 里,n-gram 指的是文本中连续的 n 个元素。这个元素可以是 词(word),也可以是 字符(character),甚至是 子词(subword),具体取决于我们怎么做分词。比如我们说 n=1,那就是 unigram,每个词单独看;n=2 就是 bigram,就是相邻两个词一组;n=3 就是 trigram,三个词一组。

举个例子,如果我们用词作为单位,句子 “I love NLP” 的 unigram 就是 “I”、 “love”、 “NLP”;bigram 就是 “I love”、 “love NLP”;trigram 就是 “I love NLP”。如果换成字符级别,单词 “chat” 的 trigram 就是 “cha” 和 “hat”。而在现代 NLP 里,很多时候用 subword 单元,比如 “unhappiness” 会被切成 “un”、 “happi”、 “ness”,那么它的 bigram 就是 “un happi” 和 “happi ness”。

n-gram 的核心思想就是:一个词的出现概率主要取决于它前面的 n-1 个单位。这在深度学习出现之前是最常见的语言建模方法。比如在 bigram 模型里,“love NLP” 出现的概率可以用 “love” 的频率来估计。这样的方法虽然简单,但能很好地捕捉局部的依赖关系。

在应用上,n-gram 模型用得非常广。最典型的是 语言模型,用来预测下一个词;还有 文本分类,把 n-gram 当成特征,比如垃圾邮件检测里,“free money” 这样的 bigram 就很有代表性;另外在早期的 机器翻译和语音识别 里,n-gram 语言模型也常用来保证输出的流畅性;甚至在 搜索引擎 里,n-gram 也能提高匹配效果,比如用 “New York” 的 bigram 比单独查 “New”和 “York” 更精准。

当然,n-gram 也有缺点。小的 n 捕捉不到足够的上下文,而大的 n 又会带来组合爆炸和数据稀疏的问题。所以在深度学习时代,n-gram 模型逐渐被 LSTM、Transformer 这样的神经网络模型取代。但它依然是 NLP 的入门概念,非常重要。


Q37. DreamBooth的作用和具体结构

DreamBooth 本质上是一个个性化(personalization)方法:在不推翻原有文本到图像扩散模型(比如 Stable Diffusion)的前提下,用你手里很少的几张照片(通常 3–10 张)把“某个具体主体”学到模型里。这样,你以后只要在提示词里写一个稀有标识符(比如 “sks dog” 里的 sks),模型就能在任何场景、风格里生成这只特定的狗,而不仅仅是“狗”这个类别。

从结构上看,它依赖原始扩散模型的四个部件:文本编码器(如 CLIP Text Encoder)把提示词变成向量;U-Net 去噪网络是扩散过程的主力;VAE 负责把图像在像素空间与潜空间之间来回;调度器(scheduler)控制噪声/步数。DreamBooth在此之上做了两件关键事:第一,往 tokenizer 里插入一个全新且罕见的标识符 token,并为它分配可训练的嵌入;第二,在训练时同时使用**“实例损失 + 类别先验损失(prior preservation)”**,既把你的主体记住,又不让模型忘记“这一类东西该长什么样”。

实现流程可以这样理解。你先准备一小撮“实例图像”(比如同一只狗在不同角度的照片),同时给它们都配一个文本提示:“a photo of sks dog”,其中 sks 是你新加的标识符,dog类别词。接着,你还需要一批类别先验图:要么用现成数据,要么直接让底模根据“a photo of a dog”自动生成若干张。这两类数据会交替喂给模型:用实例图学会“这只特定的狗”,用类别先验图提醒模型“狗的多样性与常识”。训练目标是扩散模型的标准噪声回归损失(MSE),但被拆成两项:对实例样本的损失 $L_\text{instance}$ 和对类别样本的损失 $L_\text{prior}$,最后用 $L = L_\text{instance} + \lambda L_\text{prior}$ 把它们加起来,其中 $\lambda$ 控制“记住个体”与“保持泛化”的平衡。

具体到“改哪里”,原论文做法是微调 U-Net,并微调文本编码器中与新 token 相关的嵌入(很多实现也会把整个文本编码器一起小幅训练)。这样做的好处是:新 token 的语义被植入到文本空间里,且去噪网络真正学会把这个语义落实到视觉细节上。为了避免过拟合,你通常会使用图像增广(裁剪、翻转、颜色扰动)、更小学习率(如 1e-6~1e-5)、较少步数(几千步量级)、较小批量,并且合理选择 $\lambda$ 让先验损失占一定比重。训练完成后,推理就很简单了:在任何提示词里带上你的标识符,比如 “a watercolor painting of sks dog wearing sunglasses, in Tokyo at night”,就能把这只特定的狗放进你描述的世界。

工程上还有一些常用“口味”。如果你显存或数据更紧,可以只训练新 token 的 embedding + U-Net 的少量层;如果你想更省参数,也可以把 DreamBooth 和 LoRA/Adapters 结合,做“DreamBooth-LoRA”:底模冻结,仅在 U-Net/Text Encoder 上挂低秩适配器,基本复刻效果同时把可训练参数降到千分之一量级。类别词的选择也很重要:它要准确描述你主体的类别(如 “dog”、“vase”、“car”),这样先验图才真能提供“这类东西”的多样性参照。最后,再提醒两点经验法则:实例图最好覆盖不同视角/光照/表情,尽量减少同角度的重复;训练时观察样张,如果“像了但变得单一”,通常是先验权重不够或步数过多,如果“泛了不够像”,则是步数不足或实例损失权重偏小。

一句话收尾:DreamBooth不是重训模型,而是在**“新 token + 先验保持 + 轻微微调”**的组合拳下,把某个具体主体“刻进”文本到图像的对齐空间里;得益于这套结构,你可以用几张图,就把“这是谁/这是什么”带到任意风格与场景中去。


Q38. agentic reinforcement learning方法解释一下,ppo, dpo, grpo是什么概念.

先把底层概念捋清楚:强化学习(Reinforcement Learning, RL)说的就是“智能体在环境里一边做事、一边拿反馈、再改进策略”的过程。你可以把目标理解成最大化一条交互轨迹里累积奖励的期望:直观地讲,就是“长期来看拿到的好处最多”。常见记法是
$J(\pi)=\mathbb{E}[\sum_t \gamma^t r_t]$,但你不用纠结公式,记住“看长期回报”就行。

Agentic 的意思是把大模型当成“会主动行动的智能体”——它有目标,会规划多步动作(比如先检索、再调用工具、再汇总),与环境交互,并根据反馈自我调整。和被动问答不同,agentic 模型是在“闭环”里工作:感知 → 决策 → 行动 → 得到反馈 → 再决策。

接下来是你关心的三种 优化范式,它们都在“让模型更符合人类偏好/任务目标”的这条线上,只是用的监督信号和训练稳定化技巧不一样。

PPO(Proximal Policy Optimization)可以理解为“加护栏的策略梯度”。普通策略梯度会让我们增大“好动作”的概率,但一步走太猛容易把已经不错的策略“拧坏”。PPO的核心做法是引入一个比值 $r_t=\pi_{\text{new}}/\pi_{\text{old}}$,并对这个比值做裁剪(clipping):当更新幅度超过阈值(比如±10%)就不再放大梯度。直觉上,它是在说:“该涨就涨,但别一下子涨过头。”在 RLHF 里,我们先用人类打分训练奖励模型,再把“奖励高的回答”当成学习信号,用 PPO 稳定地推着策略往“更被人喜欢”的方向移动;训练时还会加一个对基座模型的 KL 正则,防止模型跑太远。优点是稳定、可控、工业界成熟;成本在于需要一条完整的管线(SFT → 奖励模型 → 采样 → PPO),算力和工程复杂度都不低。

DPO(Direct Preference Optimization)更“直接”:它不训练奖励模型、也不做环境式的 RL,而是直接用偏好对(同一个输入下,A 比 B 更受人类偏好)来训练。它等价于“让模型提升偏好答案相对非偏好答案的对数几率”,同时用一个温度/正则来约束别偏离基模太远。你可以把它理解为“把人类偏好从排序信号,直接翻译成一个对数似然的目标”,从而回到熟悉的监督学习范式(只不过是相对的,而不是单个答案的绝对标签)。优点是简单高效、稳定,实现和扩展都容易;代价是探索性弱一些,偏好数据的覆盖面很关键,且对“基座模型已有能力”较为依赖。

GRPO(命名在不同论文里略有差异,这里指一种把偏好学习和PPO式稳定更新结合的范式)站在两者之间:它像 DPO 一样直接利用偏好信号来定义“谁更好”,但在优化上采用 PPO 的裁剪式更新和优势估计,把“更被偏好”转成优势(advantage)去做小步稳定更新。直觉上它是在做两件事:先把“人类更喜欢 A 胜过 B”的信息,映射成一段相对回报/优势;再用 PPO 的信赖域式“护栏”去推进策略。这样既保留了偏好学习的直接性,又继承了 PPO 的稳定性可控性,对生成式大模型的长序列训练更友好。落地时,还会配合分段/分标记的优势分配、KL 约束与批内基线,减少高方差和模式崩塌。

小结一下:如果你要工业级稳态训练、能负担奖励模型与采样流水线,PPO(RLHF)很合适;如果你要简单高效、快速对齐人类偏好,DPO 是强力首选;如果你既想用偏好对又想要 PPO 的稳定训练特性,GRPO 这类“偏好+裁剪更新”的混合范式很值得考虑。至于 agentic,它不是另一种优化算法,而是一种系统范式:让模型在“多步交互和工具使用”的闭环里学会规划与行动,而上面这些优化方法,就是把它对齐成“更有用、更安全、更符合人类偏好”的 agent的训练抓手。


Q39. agent mcp解释一下

先说背景。大模型本身只是一个“语言引擎”,它的强项是理解和生成文本,但如果想让它变成真正的 agent(智能体),它必须能够调用外部的工具、数据和服务。否则,它只能在自己训练过的知识里打转,无法主动完成更复杂的任务。

**MCP(Model Context Protocol)**就是为了解决这个问题提出的一种“通用协议”。你可以把它想象成一个“标准接口”,通过它,模型可以访问数据库、调用 API、检索文档、甚至操作系统服务,而不需要为每个场景重新写复杂的 glue code。

举个例子:一个基于 MCP 的 agent,用户问“帮我查一下最新的财报并画个图”。模型本身不懂财报在哪,但它能通过 MCP 调用“金融数据源”和“绘图工具”。对模型来说,这些外部服务就像插件一样,MCP 帮它把“我要的数据/功能”转化为一段结构化的调用,再把返回结果放回上下文里。

所以简单理解:Agent MCP = 大模型智能体 + 一个标准化的上下文/调用协议。它让 agent 具备更强的“可组合性”,能无缝衔接不同的数据源和工具。

总结一句话:MCP 就是帮模型搭好“外部世界的插座”,而 agent 就是那个“用插座的人”。两者结合,大模型就不只是聊天机器人,而是能主动感知、调用工具、完成任务的智能体。


Q40. 详细解释什么是RLHF概念,以及它的常见应用

他是什么
RLHF,全称是 Reinforcement Learning from Human Feedback,也就是“基于人类反馈的强化学习”。简单来说,它是一种把人类的主观偏好转化成模型优化目标的方法。大模型在预训练和监督微调之后,已经能给出还不错的答案,但并不总是符合人类真正想要的效果。RLHF 就是在这个阶段接入人类的判断,让模型更贴近人的价值观和喜好。具体做法就是先收集人类对模型回答的比较或打分,再训练一个奖励模型去模仿这种偏好,然后用强化学习的方法把大模型往这个奖励方向推一把。

为什么需要他
其实监督微调只能保证模型“能完成任务”,但并不能保证答案的风格和内容真的让人满意。比如,有时候模型说得太长、太啰嗦,或者在敏感问题上答得不够谨慎。这些都不是单纯靠标签就能控制的。而 RLHF 的好处就是,它让模型知道“什么样的回答更被人喜欢”,这样输出的结果就不光是正确,还更自然、更安全、更符合人类直觉。换句话说,它弥补了监督学习里难以定义的那部分人类偏好。

流程是什么
整个流程通常分三步。第一步是监督微调,也就是在指令数据上训练一个初始模型,让它具备基本的对话和任务能力。第二步是收集人类偏好,比如给同一个问题生成几个不同的回答,让标注员选出更好的一个,这些偏好数据就用来训练奖励模型。第三步是用强化学习来优化策略模型,最常见的是 PPO 算法,并且会加一个 KL 惩罚,避免模型在追求奖励的时候偏离原本的语言风格太多。这样反复迭代,模型就能学会既完成任务,又让回答更贴近人类喜好。

常见应用
在实际应用里,RLHF 用得最多的就是三个方向。第一个是对话对齐,让模型说话更礼貌、语气更自然,还能在遇到敏感话题时合理拒答。第二个是安全控制,通过人类反馈来减少有害输出,降低模型编造内容的概率,这对于大规模商用尤其重要。第三个是任务质量优化,比如在总结、翻译或者代码生成中,RLHF 能让答案更清晰、可靠,也更符合用户期待。这三个应用几乎是所有大模型在落地过程中都会涉及的。

优缺点
RLHF 的最大优点就是能把人类的主观满意度变成一个可优化的信号,从而让模型输出更符合人心。但它也有不少挑战。比如奖励模型本身可能带有偏差,如果标注数据不够多样或不够准确,模型就会学歪。再比如,如果优化过度,模型可能出现所谓的“奖励黑客”,为了讨好奖励模型而给出奇怪的答案。另外,收集高质量的人类反馈代价很高,标注过程复杂,成本也大。所以说,RLHF 是目前最有效的对齐手段,但并不是终极方案,还需要不断结合新方法来改进。


经典NLP模型

Q41. 请介绍BERT模型及其变种

BERT的结构
BERT,全称是 Bidirectional Encoder Representations from Transformers,是 Google 在 2018 年提出的模型。当时它可以说是 NLP 领域的一个里程碑。它的结构其实就是一堆 Transformer 的 encoder 堆起来的。训练分成两个阶段:第一步是预训练(pretraining),用大规模无标注文本来学语言表示;第二步是微调(finetuning),在具体任务上调整参数,让它适配任务需求。输入的时候,模型会先把句子转成 embedding,包括 token embedding、segment embedding 和 position embedding,并且会在开头加一个特殊的 [CLS] token,在结尾加一个 [SEP] token。然后,这些 embedding 会经过多层 encoder block,每层包含多头注意力、前馈网络、残差连接和层归一化。因为模型需要固定长度,所以不足的地方会 padding,超过的部分会截掉。这样,整个流程就能在上下文中捕捉丰富的语义信息。

BERT和GPT的不同点
BERT 和 GPT 的最大不同点在于结构和目标。BERT 用的是 Transformer 的 encoder 堆叠,它通过掩码语言建模(masked language modeling)来学习语义,这让它特别擅长理解文本,但它不具备自然的文本生成能力。而 GPT 用的是 decoder 堆叠,通过自回归语言建模来预测下一个词,所以它更适合做内容生成。简单说,BERT 是理解专家,GPT 是生成专家。

BERT的主要应用
BERT 在应用上最常见的有三类。第一类是文本分类,比如情感分析、垃圾邮件检测,这类任务直接用 [CLS] 的输出就能做。第二类是序列标注,比如命名实体识别(NER)或者词性标注,让模型对每个 token 的输出做预测。第三类是“两句话关系的任务”,比如自然语言推理(NLI)要判断一句话是不是另一句话的推论,或者语义相似度判断两句话是不是说的差不多。这类任务里,BERT 用 segment embedding 来区分两句话,再用 [CLS] 表示整体关系。

BERT的变种
BERT 出来后有很多改进版,其中最经典的两个是 RoBERTa 和 DeBERTa。RoBERTa,全称 Robustly Optimized BERT Pretraining Approach,它主要是把训练方式优化了,比如去掉了下一句预测任务(NSP)、用更多数据、训练更久,结果比原始 BERT 更强。DeBERTa,全称 Decoding-enhanced BERT with Disentangled Attention,它在注意力机制上做了改动,把词的内容信息和位置信息分开处理,这样模型更容易理解“词是什么”和“词在句子里在哪”,所以效果也更好。

优缺点
BERT 的优点很突出:它让机器真正能捕捉上下文的双向信息,把 NLP 各类理解任务的表现拉到了新高度。但缺点也明显。它不能自然生成文本,只适合理解类任务;训练成本高,需要大量算力;还有一些预训练目标,比如 NSP,后来被发现其实作用不大。总体来说,BERT 在理解任务上很强,但在生成和效率上还有不足。


Q42. 介绍GPT系列模型

GPT家族的发展历程
GPT,全称 Generative Pre-trained Transformer,最早是 OpenAI 在 2018 年提出的。GPT-1 是第一个版本,参数大约 1.1 亿,结构就是一个标准的 Transformer decoder 堆叠,训练目标是自回归语言建模,也就是逐词预测下一个词。虽然规模不大,但它验证了“先在大规模语料上做预训练,再在下游任务上做微调”的思路是可行的。当时 GPT-1 是完全开源的,研究社区都能拿来试验。

2019 年推出的 GPT-2 扩展到 15 亿参数,能力相比 GPT-1 有质的飞跃,它能生成连贯的长文本,甚至可以跨任务迁移。GPT-2 的结构还是 decoder-only 的 Transformer,但训练规模更大。这个版本因为担心滥用,OpenAI 一开始没有完整开源,只发布了小模型,后来才逐渐开放。

到 2020 年,GPT-3 出现,参数规模直接拉到 1750 亿。GPT-3 依然是 decoder-only 架构,但在能力上出现了所谓的“涌现”现象,比如 zero-shot 和 few-shot 学习,也就是不需要微调,只给几个例子就能完成任务。这一代开始,OpenAI 并没有开源,而是转向通过 API 的方式对外提供服务,比如早期的 OpenAI API。

2023 年 GPT-4 上线,它不只是规模更大,还在推理能力、多模态和安全性上都提升明显。GPT-4 能看图理解、做更复杂的逻辑推理,并且在安全对齐方面更稳健。这个版本完全闭源,只能通过 API 或者 ChatGPT 产品来使用。

同年,OpenAI 发布了 GPT-4o(Omni),它是一个原生的多模态模型,不仅能处理文本,还能直接处理语音和图像,而且延迟更低,更适合实时对话。这一代同样没有开源,只能通过 ChatGPT 或者 API 调用。

最新的 GPT-5 在 2025 年推出,重点提升了推理能力、长上下文处理能力以及和工具结合的能力。它被定位成更接近通用智能的一步,也是闭源的,只能通过 API 或产品来访问。

GPT常见的应用
GPT 系列的应用非常广。最直接的就是对话助手,比如 ChatGPT,用来做知识问答、信息检索和闲聊。第二类是内容生成,比如写文章、生成代码、写邮件或者创作文案。第三类是任务辅助,比如总结文档、翻译、生成 SQL、调试代码,甚至是帮助研究人员快速头脑风暴。随着 GPT-4o 的多模态能力,这些应用已经扩展到语音助手、图片理解,甚至视频分析。

优点和缺点
GPT 系列的优点很明显:它是通用的,一个模型就能覆盖各种任务;它的上下文理解和生成能力很强,而且现在已经支持多模态交互;它也让普通用户不用懂太多技术,就能享受强大的智能体验。但它的缺点也很突出。第一,训练和运行成本非常高,需要巨大的数据和算力。第二,它会出现幻觉(hallucination),生成的内容可能听起来合理但其实是错的。第三,它的行为不完全可控,对敏感问题需要很多对齐机制。最后,还有一个实际的限制:从 GPT-3 开始,模型就不再开源,只能通过 API 或产品来使用,这也让研究社区没法像过去那样直接研究内部细节。


Q43. 介绍LLaMA系列模型

LLaMA家族的发展历程
LLaMA,全称是 Large Language Model Meta AI,是 Meta(也就是原 Facebook)在 2023 年提出的开源大模型系列。它的结构本质上是基于 Transformer 的 decoder-only 架构,也就是说它跟 GPT 系列一样,靠自回归的方式一个词一个词地预测下去。这类架构特别适合文本生成,同时也能通过微调来适配理解类任务。
最初的 LLaMA-1 在 2023 年 2 月发布,参数规模从 7B 到 65B 不等,强调“高效和开放”,用更少的参数达到接近 GPT-3 的效果,而且开源给研究社区。到了 2023 年 7 月,Meta 发布了 LLaMA-2,它在训练数据、对齐和安全性上做了优化,提供 7B、13B 和 70B 三个版本,并且允许商用。很多开源的 ChatGPT 替代品,比如 Vicuna、Alpaca,都是基于 LLaMA-2 开发的。
2024 到 2025 年间,Meta 推出了 LLaMA-3,更大规模、更长上下文、更强的跨语言能力,还计划支持多模态。整体上,LLaMA 家族就是开源世界里最有影响力的 GPT 替代品。

LLaMA的常见应用
LLaMA 因为是开源的,被广泛应用在研究和工业界。最常见的就是作为基础模型做二次开发,比如指令微调、对话优化或者安全增强,很多开源 ChatGPT 替代品(比如 Vicuna、Alpaca)都来自 LLaMA 的衍生。第二类应用是在垂直领域做专用模型,比如医疗问答、法律助手或者编程助手,研究人员可以在 LLaMA 基础上加领域数据做微调。第三类就是在学术和研究中作为实验基线,因为它开源、可下载,所以特别适合做 NLP 或多模态方向的研究。

优点和缺点
LLaMA 的优点主要有两个:一是开源友好,研究者和企业都能自由下载和修改,这让它成为推动开源生态的核心力量;二是参数规模和效率的平衡很好,7B 和 13B 模型就能在消费级 GPU 上运行,门槛比 GPT 低得多。但它也有缺点。比如,相比 GPT-4 这类闭源巨型模型,LLaMA 在推理能力、稳健性和多模态方面还是略逊一筹。另外,虽然开源是优势,但也带来滥用风险,比如可能被用于生成不当内容。所以说,LLaMA 系列在开源世界里影响力巨大,但和闭源巨头相比,还处在追赶阶段。


Q44.介绍Qwen系列模型

Qwen系列的发展历程
Qwen,全称是 Tongyi Qianwen(通义千问),是阿里巴巴(后来是通义实验室)在 2023 年开始推出的大模型系列。它的底层结构和 GPT、LLaMA 类似,都是 基于 Transformer 的 decoder-only 架构,也就是自回归地逐词生成。Qwen-1.0 系列在 2023 年发布,参数规模从 1.8B 到 72B 不等,覆盖了轻量和大规模两类场景。它最大的特点就是 全面开源,而且模型覆盖中文和英文,适合中文语境下的任务。

之后在 2023 年底,阿里推出了 Qwen-ChatQwen-Code,分别针对对话和代码生成优化。到 2024 年,Qwen-1.5 系列出现,进一步提升了长上下文处理能力(支持上万 tokens),并且在指令理解和安全性上做了优化。紧接着,2024 年下半年,Qwen-2 发布,训练数据更大、更广,推理和数学能力明显增强,也开始有多模态版本,能处理图像输入。整个 Qwen 家族从一开始就是走开源路线,这一点和 GPT 系列的闭源形成鲜明对比,也让它迅速成为中文社区里最受欢迎的开源大模型之一。

Qwen的常见应用
Qwen 系列的应用很广。第一是在中文场景下的 对话助手,比如智能客服、知识问答、企业内部助手,它的中文语料覆盖更全面,所以表现比较自然。第二是在 内容生成 方面,包括写作、营销文案、翻译和代码生成,尤其是 Qwen-Code 在程序员群体里很实用。第三是在 行业专用模型 上,比如教育、医疗、金融等场景,很多企业会用 Qwen 作为基础模型,再加领域数据做微调。

优点和缺点
Qwen 的优势有两个特别明显。一个是 中文能力强,因为它在训练里加入了大量中文语料,所以对中文语义和习惯的理解比国外模型更贴合。另一个是 开源开放,研究者和企业都可以自由使用和改造,推动了国内开源生态的发展。缺点方面,Qwen 在顶级推理、多模态和复杂任务的表现上,还不如 GPT-4 或 GPT-4o 这样的闭源旗舰模型。同时,因为是开源,滥用风险也更高,需要额外的安全措施。总体来说,Qwen 是中文大模型领域里非常重要的一个系列,在开源社区影响力很大。


Q45. 介绍DeepSeek系列模型

DeepSeek系列的发展历程与结构特点
DeepSeek 是一家中国团队在 2024 年开始推出的大模型系列,它的核心理念是“高效和低成本”。和 GPT、LLaMA 一样,DeepSeek 的底层结构也是 基于 Transformer 的 decoder-only 架构,主要做自回归生成。但它的特点是做了很多工程上的优化。比如它引入了 Mixture-of-Experts (MoE, 专家混合结构),不是所有参数在每一步都会被激活,而是只激活其中一部分,这样既能保持参数规模大、模型表达能力强,又能降低训练和推理的成本。另外,DeepSeek 在并行训练和推理效率上也做了很多改进,比如更好的分布式架构和硬件利用率。
在发展上,DeepSeek 最早推出的是 DeepSeek LLM,然后逐步演化出多个版本,涵盖了基础语言模型、对话模型以及多模态方向。它的定位很明确:希望用更低的算力和成本,做出能和 GPT-4 这一类闭源大模型相媲美的性能。

DeepSeek的常见应用
DeepSeek 模型的应用方向和 GPT、Qwen、LLaMA 这些大模型比较类似。第一,它可以作为 对话助手,用于客服、知识问答或者企业内部的智能助手。第二,它能做 内容生成,比如写文章、写代码、写营销文案或者做翻译。第三,它也能在 研究和开源社区 里被广泛使用,因为它在效率和成本上的优化,特别适合资源有限的团队尝试大模型应用。

DeepSeek的优点和缺点
DeepSeek 的优点主要体现在两个方面。第一个是 高性价比,通过 MoE 和工程优化,它能用更少的算力实现接近超大模型的效果。第二个是 开源和透明,它的部分模型权重和训练细节对研究社区开放,推动了大模型的普及。缺点也很明显:相比 GPT-4 或最新的 GPT-4o、GPT-5,这些闭源旗舰,DeepSeek 在推理能力、多模态整合和安全对齐上还是有差距。另外,MoE 结构虽然高效,但在推理延迟和分布式调度上可能会带来复杂性。整体来说,DeepSeek 是国产开源模型里一个非常有竞争力的系列,尤其强调“高效替代方案”。


模型优化

Q46. 介绍常见的模型优化方法

其实在我看来,常见的模型优化方法大概可以分成三类:结构层面的优化训练和推理效率的优化,以及模型压缩和部署的优化。这三类方法分别对应着“模型设计”“训练过程”和“实际落地”这三个阶段。

第一类是结构层面的优化。
这里的重点是改进 Transformer 架构本身。比如 稀疏注意力(sparse attention),就是在注意力计算时只关注一部分关键位置,而不是对所有 token 都做全连接计算,这样可以降低计算量。还有 高效注意力机制,比如用低秩近似来替代完整的注意力矩阵,让长文本处理更快。另一个很重要的是 MoE(Mixture of Experts,专家混合模型),意思是模型里面有很多“专家子网络”,但在一次计算中只激活其中少数几个,这样既能保持模型容量大,又能节省算力和显存。

第二类是训练和推理效率的优化。
在训练中,常见的方法是 混合精度训练(mixed precision training)。所谓“半精度浮点数(FP16/BF16)代替全精度浮点数(FP32)”,就是用更少的比特来表示数字,从 32 位减少到 16 位,这样显存占用和计算量都会减少,速度就更快。对于超大模型,还会用 分布式训练,包括数据并行(每张卡处理不同数据)、模型并行(把模型拆开分到多卡上)、流水线并行(像装配线一样分阶段训练)。在推理时,优化的思路是提升响应速度。比如 KV cache(键值缓存),就是把前面步骤的注意力计算结果缓存起来,避免重复计算,从而加速生成。

第三类是模型压缩和部署优化。
这一类主要解决“怎么让模型更轻量”。比如 剪枝(pruning),就是把权重里影响不大的部分直接删掉。量化(quantization) 更常见,比如把参数存储从 INT8(8 位整数)甚至 INT4(4 位整数)代替原来的浮点数存储,这样能大幅减少显存和内存占用。还有 知识蒸馏(distillation),就是用一个大模型来教小模型,让小模型学到大模型的能力,但体积更小、更高效。最后在部署时,还可以用编译优化工具,比如 TensorRT 或 ONNX Runtime,把模型在 GPU 或 CPU 上跑得更快。

总结一下,模型优化方法可以从三个角度来看:通过改进结构来减少无谓计算、通过训练和推理技巧来提升效率、通过压缩和部署优化让模型更轻量化。三类方法结合起来,就能让大模型既更强又更高效。


Q47. 什么是模型压缩, 介绍常见的模型压缩的方法

其实所谓的 模型压缩,就是在不显著降低模型效果的前提下,把模型的体积变小、运行速度变快,让它更适合在有限算力或者设备上部署。常见的压缩方式主要有三种:剪枝、量化和蒸馏

第一种是剪枝(Pruning)。
剪枝的意思就是“删掉模型里不重要的部分”。在神经网络里,有些权重参数对结果几乎没影响,那么我们就可以把这些权重去掉。比如在全连接层里,把很小的权重直接设为零,或者在卷积里删除不重要的通道。这样模型就更稀疏,计算量也减少。直观理解就是:修剪掉无用的枝叶,保留主干结构。

第二种是量化(Quantization)。
量化的意思是“用更少的比特来存储参数”。原始模型通常用 32 位浮点数(FP32)来表示权重和激活,但其实可以用低精度表示。比如 INT8 就是 8 位整数,INT4 是 4 位整数,比 FP32 更省存储。虽然精度下降了一点,但对整体性能影响不大,却能大幅度减少内存占用和加速推理。简单比喻:原来用高清照片,现在换成压缩版的 JPG,但肉眼看起来差别不大。

第三种是蒸馏(Distillation)。
蒸馏的意思是“用大模型教小模型”。具体做法是先训练一个大的教师模型(teacher),然后让一个小的学生模型(student)去模仿它的输出。这样小模型能学到大模型的知识和风格,但参数量更少、运行更快。就像请名师带学生一样,学生虽然个头小,但学到的核心知识不少。

总结一下,模型压缩的核心目标就是:在尽量不损失性能的前提下,让模型更轻量、更高效。常见的方法有修剪掉不必要的权重(剪枝)、降低参数精度(量化)、用大模型带小模型(蒸馏)。这三类方法往往可以结合使用,让大模型真正能够“落地”。


Q48. 什么是RAG

什么是RAG
RAG,全称 Retrieval-Augmented Generation,中文叫“检索增强生成”。它的核心思想就是把外部检索和大模型结合起来。为什么需要它呢?因为大模型的知识是固定的,可能过时或者不完整,如果遇到新的事实问题,它可能会瞎编。RAG 的办法就是先去外部知识库里找到相关信息,再结合大模型的生成能力回答,这样答案更准确、更实时。

RAG的流程
RAG 的流程大概分三步。第一步,用户提出问题,比如“特斯拉昨天股价是多少”。
第二步,检索模块会到外部数据库或者搜索引擎里找相关信息,这里涉及 数据库怎么构建怎么检索

  • 在构建数据库时,通常会把原始的文档(比如网页、PDF、报告)先分成小片段,然后用向量化模型(embedding model)把每个片段转成一个向量,存到 向量数据库(像 FAISS、ChromaDB、Pinecone)里。这样一来,语义相似的文本就离得很近。
  • 在检索时,当用户提问,也会把问题转成向量,然后在数据库里做“向量相似度搜索”,找到语义最接近的文档片段。除了向量搜索,也可以结合传统的关键词检索(BM25 等),两者结合叫做 混合检索(hybrid retrieval),能更稳定地找到相关内容。
    第三步,把这些检索到的文档交给大模型,大模型在生成答案时会参考这些内容,输出既自然又有知识支撑的回答。

RAG的优缺点
RAG 的优点很明显:答案更准确、更及时,还能减少模型的幻觉;而且企业可以把自己的私有知识库接入,让模型理解内部资料。缺点是检索结果的质量直接影响最终答案,如果检索不准,输出就可能出问题;另外,搭建和维护向量数据库也需要一定的工程成本。

RAG和Finetuning的区别
RAG 和微调(finetuning)思路完全不一样。RAG 是通过外部检索来补充知识,模型参数不变;而微调是直接再训练,把知识写进模型参数里。
什么时候用哪种?如果知识经常更新,比如财经数据、政策法规,用 RAG 更合适,只需要更新数据库,不用重训模型。如果知识长期稳定,比如产品说明或者固定风格的回复,用 finetuning 更合适。很多时候也可以结合:finetuning 决定风格和领域,RAG 补充实时信息。

具体例子
比如一家银行做智能客服。客户问:“现在的贷款利率是多少?” 如果只靠语言模型,它可能给出过时答案。但用 RAG,系统会先在银行的内部公告和政策库里检索到最新利率,再让模型生成回答:“根据最新公告,当前贷款利率是 X.X%。” 如果银行还想客服语气永远保持正式礼貌,就可以通过 finetuning 来固化风格,再结合 RAG 来回答最新问题。


Q49. 什么是agent

什么是Agent
所谓的 Agent,其实就是一个“能自主决策和执行任务的智能体”。它不仅仅是一个模型回答问题,而是可以根据目标自己规划步骤,然后调用工具或者外部系统来完成任务。为什么需要 Agent 呢?因为单纯的大模型擅长生成文本,但在遇到需要操作外部环境(比如查资料、算数学、调用 API)时就会受限。Agent 的设计就是给模型一个“行动的身体”,让它能理解任务、规划步骤、调用工具,再把结果反馈给用户。

Agent的流程
Agent 的典型流程大概是这样的:第一步,用户提出一个目标,比如“帮我查一下下周纽约的天气并发邮件告诉我”。第二步,Agent 会先理解任务,然后做任务分解,比如需要先查天气 → 再生成邮件 → 再调用邮箱接口。第三步,它会调用外部工具或 API,比如搜索引擎、数据库、计算器、邮件服务等。最后,它会把执行结果组合起来,用自然语言反馈给用户。很多时候,Agent 在执行中还能循环决策,也就是遇到中间结果不对时,会自己调整步骤继续完成任务。

Agent的优缺点
Agent 的优势是很明显的。第一,它能扩展大模型的能力,把模型从“会说话”变成“能做事”。第二,它有一定的自主性,能根据任务自动规划,而不是被动回答。但它也有缺点:比如,复杂任务里它的规划可能出错,导致“跑偏”;而且调用外部工具的过程增加了系统复杂性,可能带来延迟和安全风险。

Agent是不是就是Prompt Engineering?
有时候大家会问:Agent 是不是就是一个“写好了提示词的模型”?其实不是。Prompt Engineering(提示词工程)更像是精心设计一个输入,让模型按照预期去回答。但 Agent 不仅仅依赖一个 prompt,而是有一个完整的决策循环:它会根据任务动态生成下一步提示词,调用工具,把结果读回来,再决定下一步。这种“感知—决策—行动—反馈”的循环,比单纯的 Prompt Engineering 更复杂。所以可以说 Agent 里面当然也包含 prompt 设计,但它远远不止于此。

具体例子
举个例子,你可以想象一个旅行助手 Agent。你告诉它:“帮我计划一个去巴黎的三天旅行,包含机票、酒店和景点推荐。” 普通的大模型可能只能生成一段泛泛的行程建议,而 Agent 会一步步去查航班 → 查酒店 → 查景点评价,然后把这些信息整合起来,生成一份更真实、更可执行的旅行计划。


NLP常见面试问题集合
https://kangkang37.github.io/zh-hans/2025/10/03/NLP-interview-QA/
作者
kq
发布于
2025年10月3日
许可协议