【大模型】LLM概念相关问题(中)
1.什么是句法分析?
1.句法分析简介
句法分析(Syntactic Parsing)是自然语言处理中的基础任务之一,旨在识别句子中词语之间的语法关系,构建反映句子结构的语法树。根据分析目标的不同,句法分析可分为两种类型:成分句法分析和依存句法分析。
1. 成分句法分析(Constituency Parsing)
成分句法分析侧重于揭示词语如何组合成短语及句子结构。分析结果通常以短语结构树表示,适用于语法教学、机器翻译等场景。
2. 依存句法分析(Dependency Parsing)
依存句法分析关注词语之间的依赖关系,更贴近语义层面。其分析结果为依存关系图,常用于信息抽取、问答系统等任务,特别适合中文处理。
2.主流句法分析方法
1. 基于规则的方法
早期方法主要依靠人工编写的语法规则,进行结构分析。该方法可解释性强,但在面对复杂语句和语言多样性时缺乏鲁棒性,现已基本淘汰。
2. 基于统计的方法
统计方法依赖人工标注的语料库,通过概率建模句子结构。常见模型包括:
- PCFG(概率上下文无关文法):用于成分分析,常结合CKY算法进行解析。
- 最小生成树(MST)模型:用于依存分析,将句子建模为加权图,求解最大依存树。
- 基于转移系统的方法(Transition-based Parsing):通过一系列动作预测依存结构,效率较高。
3. 基于神经网络的方法
近年来,深度学习方法已成为主流,典型方法包括:
- BiLSTM + MLP / CRF:通过双向LSTM建模上下文,输出词间依存关系。
- BERT等预训练语言模型:使用Transformer编码器提取句子表示,再结合分类或图神经网络完成句法预测,显著提升准确率。
2.什么是词向量?
1.词向量的基本原理
词向量的生成通常基于这样一个假设:上下文相似的词语,其语义也相近。因此,通过学习一个词在不同上下文中出现的模式,可以将其表示为一个包含语义信息的向量。训练好的词向量能在向量空间中体现出语义关系,如:
vec(“国王”) - vec(“男人”) + vec(“女人”) ≈ vec(“女王”)
2.主流词向量方法
词向量的发展经历了从浅层模型到深层预训练模型的演进。以下是当前主流的几类方法:
1. 基于统计的方法
(1)TF-IDF(Term Frequency–Inverse Document Frequency)
- 不是严格意义上的“词向量”,但可以看作词的数值表示方式。
- 基于词频与逆文档频率构建稀疏向量。
- 缺点:维度高、稀疏,不能表达词语之间的语义关系。
(2)LSA(Latent Semantic Analysis)
- 基于共现矩阵和奇异值分解(SVD)生成词向量。
- 具有一定的语义表示能力,但维度固定,缺乏上下文建模能力。
2. 基于预测的浅层神经网络方法
(1)Word2Vec
- Google 提出的模型,包括 CBOW(上下文预测当前词)和 Skip-gram(当前词预测上下文)。
- 输出为稠密的低维词向量,能较好反映词语的语义关系。
- 缺点:每个词只有一个向量,不能区分词义(如“苹果”表示公司还是水果)。
(2)GloVe
- Stanford 提出的模型,结合了全局词频(统计信息)与局部上下文信息。
- 相较于 Word2Vec,在某些任务中更稳定,但仍为静态词向量。
3. 基于上下文的深层神经网络方法(上下文敏感)
(1)ELMo(Embeddings from Language Models)
- 使用双向LSTM语言模型生成词向量。
- 每个词的表示会根据上下文动态变化,解决了词义歧义问题。
(2)BERT Embedding
- 基于Transformer的预训练模型,能为词提供上下文相关的动态表示。
- BERT不是专为词向量而设计,但其Token Embedding被广泛用作高质量的上下文词表示。
- 适用于几乎所有下游NLP任务。
3.Bert的特点?
- 双向建模:
与传统的语言模型只能从左到右(或右到左)建模不同,BERT使用双向Transformer编码器,同时考虑词语左右两侧的上下文,提高理解效果。 - 预训练+微调框架:
- 预训练任务:
- MLM(Masked Language Model):随机遮盖部分词,预测被遮盖的词。
- NSP(Next Sentence Prediction):判断两个句子是否为连续句。
- 微调:将预训练好的BERT模型应用于具体任务(如分类、问答、NER等),只需增加少量特定层并微调。
- 预训练任务:
- 通用性强:
BERT可以迁移到多种NLP任务中,并在多个任务上刷新了当时的最佳性能。
4.Batch Norm和Layer Norm?
1. Batch Norm(批量归一化)
核心思路
- 对一整个小批量(batch)里的同一维度特征做归一化。
- 具体来说:假设网络某一层的输出是一个形状为 (batch_size, features) 的矩阵,那么 Batch Norm 会对每一列(即每个特征维度)分别计算该维度在整个 batch 中的均值和方差,再用它们对该列的数据做归一化。
类比
想象你在给一班学生测身高(feature)。如果直接比较他们的身高,相差很大,影响你对成绩(后续学习)的判断;Batch Norm 的做法就像是:先统计这批学生的平均身高和标准差,再把每个学生的身高转换成“离平均身高多少个标准差”的值,让“身高”这个特征在这一班里都在相似的尺度上。
优点
- 加快收敛:减轻了“内部协变量偏移”(Internal Covariate Shift),梯度更新更稳定。
- 能起到轻微正则化作用:有时能提高模型的泛化。
局限
- 对 batch 大小敏感:batch 太小,估计的均值和方差不稳定;在 RNN、在线学习或少样本场景效果不好。
2. Layer Norm(层归一化)
核心思路
- 对同一个样本(sample)里所有特征做归一化。
- 假设网络某一层输出是 (batch_size, features),Layer Norm 会对每一行(即一个样本的所有特征)计算均值和方差,再对该行数据做归一化。
类比
还是那群学生测身高——不过现在你关注的是每个学生的所有身体指标(身高、体重、臂展……一堆 feature)。Layer Norm 就是对每个学生,先算出他自己的所有指标的平均和差异,再把这些指标都归一到同一尺度,这样比较不同种类的指标(特征)时,也不会因量纲差别太大而影响后续判断。
优点
- 不依赖 batch:即使 batch 大小为 1,也能正常工作;非常适合 RNN 和 Transformer 等场景。
- 计算简单、顺序无关:尤其在序列模型里,不会受序列长度或时间步长影响。
局限
- 对跨样本的分布差异无法归一化:它只关注每个样本内部特征,不能减少不同样本间的统计差异。
5.使用BERT预训练模型为什么最多只能输入512个词?
-
位置(Positional)编码的固有设计
- Transformer 本身不具备处理序列顺序的机制,需要给每个位置加上位置编码(Position Embedding)。
- 在原始 BERT 实现中,位置编码矩阵的大小是固定的:0,1,2,…,5110,1,2,…,511 共 512 个位置,每个位置对应一个向量。这些向量是在预训练阶段一并学习得到的。
- 如果要支持更长的序列,就需要重新初始化并重新预训练这一套位置编码,否则模型无法正确理解序列中第 512 之后的位置含义。
-
计算和内存开销呈平方增长
- Transformer 的多头自注意力机制需要对序列中所有 token 两两计算注意力权重,计算复杂度和内存消耗是 O ( L 2 ) O(L^2) O(L2),其中 L L L是序列长度。
- 当输入长度翻倍时,注意力矩阵的规模是原来的四倍,所需显存和算力也随之快速上涨。512 是一个在显存、算力和效果之间折中的“工业常见”上限。
-
预训练时的资源与效率权衡
- BERT 在大规模语料(如 Wikipedia + BookCorpus)上进行预训练,输入长度越长,训练速度越慢,需要的 GPU/TPU 资源和存储也越大。
- 选择 512 既能覆盖绝大多数自然语言短文(99%以上的句子对长度小于 512 token),又保证了训练和推理效率可控。
-
下游任务场景的通用性
- 512 token(约 384–512 字左右)已经足够覆盖大多数单句或双句的分类、问答取 span、序列标注等任务。
- 对于需要处理更长文本(如全文检索、长文档摘要),社区一般采用滑动窗口、层次化模型(Hierarchical BERT)或专用的长序列 Transformer(如 Longformer、BigBird)来解决,而不是直接扩展原始 BERT 的位置编码。
6.为什么说ELMO是伪双向,BERT是真双向?
特性 | ELMo(伪双向) | BERT(真双向) |
---|---|---|
架构 | 两条独立单向 LSTM → 输出拼接 | 多层 Transformer 自注意力 → 同层直接双向融合 |
信息流动 | 前向不见后文;后向不见前文 | 每层都同时见前文和后文 |
预训练目标 | 基于语言模型(LM)分别训练前向和后向 | Masked LM,遮蔽位置同时利用左右文预测 |
优势 | 相对简单;可在不同层级拼接多层输出 | 高频率、全层次的双向交互,效果更强;预训练任务更加针对双向 |
7.BERT和Transformer Encoder的差异有哪些?
- 架构核心相同:二者都基于多层自注意力 Encoder。
- 输入设计不同:BERT 增加了 WordPiece、位置学习、Segment Embedding、特殊 Token、Attention Mask 等。
- 预训练任务不同:原始 Transformer 没定义预训练;BERT 用 MLM + NSP 实现深度双向和句间建模。
- 使用方式差异:Transformer Encoder 需从零构建;BERT 则是“预训练模型 + 下游微调”高效复用。
8.MLM任务,对于在数据中随机选择 15% 的标记,其中80%被换为[mask],10%不变、10%随机替换其他单词,原因是什么?
1. 降低 Pre-train / Fine-tune 差异
- 问题:在预训练阶段,80% 的选中 token 都被替换成了特殊的
[MASK]
,但在下游微调(fine-tune)和实际推理时,文本中是没有[MASK]
标记的。 - 解决方案:
- 10% 保持原 token:令模型在上下文完整的情况下也要对原 token 得到高置信度,从而减轻“训练时总见到 [MASK],推理时却永远见不到 [MASK]”这种分布差异带来的性能下降。
2. 强化对上下文的鲁棒理解
- 纯 [MASK] 会让模型走捷径:如果永远把选中 token 全部变成
[MASK]
,模型可能只学“遇到 [MASK] 就去查词表里最频繁的那个词”,而不是真正去综合左右文推断。 - 10% 随机替换:用一个完全不相关的词替换,逼迫模型不仅要学会识别
[MASK]
,还要学会判断“这个词放在这里合不合理”,增强对上下文的敏感度和分辨能力。
3. 综合训练信号,提升表示质量
掩码方式 | 百分比 | 作用 |
---|---|---|
用 [MASK] 替换 | 80% | 明确告诉模型“这里需要你去预测原词”,是核心的 MLM 任务信号 |
保持原 token | 10% | 给模型“看到真实词也要能解释上下文”的正例,缩小预训练与下游的差距 |
随机替换 | 10% | 提供“错误词”的负例,教模型更好地判断上下文,并防止对 [MASK] 过拟合 |
- 80%→[MASK]:提供最直接的“填空”监督,让模型学会用左右文推断缺失信息。
- 10%→原 token:让模型也能在上下文完整的情况下为“已知词”产生高概率,减轻下游无 [MASK] 场景的分布偏移。
- 10%→随机 token:制造误导性噪声,逼使模型更深层次地理解语义,而不是走“看到 [MASK] 就猜高频词”或“看到原词就一味复制”的捷径。