一、文本预处理:从原始字符到Token序列
大模型处理文本的第一步是将其转化为离散的Token序列,这一过程涉及分词策略与编码规则的设计。主流技术方案采用子词单元(Subword)分词法,通过统计语料中的字符共现模式,将低频词拆分为高频子词组合。例如”unhappiness”会被拆分为[“un”, “happiness”],既保留语义完整性又降低未登录词(OOV)概率。
Token编码阶段采用整数映射表(Vocabulary)实现符号到数字的转换。以BPE算法为例,其构建过程包含三个关键步骤:
- 初始化:将所有字符作为基础单元
- 迭代合并:统计相邻单元对的出现频率,合并最高频组合
- 终止条件:达到预设词汇表大小或合并次数上限
# 示例:基于HuggingFace Tokenizer的BPE分词from tokenizers import Tokenizer, models, trainerstokenizer = Tokenizer(models.BPE(unk_token="[UNK]"))trainer = trainers.BpeTrainer(vocab_size=30000,special_tokens=["[UNK]", "[CLS]", "[SEP]", "[PAD]", "[MASK]"])tokenizer.train(files=["corpus.txt"], trainer=trainer)output = tokenizer.encode("自然语言处理").tokens # 输出子词序列
二、嵌入层:将Token映射到高维向量空间
嵌入层(Embedding Layer)负责将离散的Token ID转换为连续的稠密向量。每个Token对应一个N维向量(通常N=768/1024/2048),这些向量在训练过程中通过反向传播自动学习得到。向量空间建模遵循分布式假设:语义相似的词在向量空间中距离更近。
位置编码(Positional Encoding)是Transformer架构的关键创新。不同于RNN的时序递归,Transformer通过正弦函数生成位置信息:
PE(pos,2i) = sin(pos/10000^(2i/d_model))PE(pos,2i+1) = cos(pos/10000^(2i/d_model))
其中pos表示位置,i表示维度索引,d_model为向量维度。这种设计使模型能够感知相对位置关系,同时保持平移不变性。
三、注意力机制:捕捉上下文依赖关系
自注意力(Self-Attention)机制通过计算Token间的相关性权重,动态构建上下文感知的向量表示。其核心公式可分解为三个矩阵运算:
- 查询-键匹配:QK^T/√d_k 计算注意力分数
- Softmax归一化:获得概率分布
- 加权求和:V矩阵与注意力权重相乘
# 简化版注意力计算示例import torchimport torch.nn.functional as Fdef scaled_dot_product_attention(Q, K, V):d_k = Q.size(-1)scores = torch.matmul(Q, K.transpose(-2, -1)) / torch.sqrt(torch.tensor(d_k))weights = F.softmax(scores, dim=-1)return torch.matmul(weights, V)# 输入维度 (batch_size, seq_len, d_model)Q = torch.randn(2, 10, 64)K = torch.randn(2, 10, 64)V = torch.randn(2, 10, 64)output = scaled_dot_product_attention(Q, K, V) # 输出形状 (2,10,64)
多头注意力(Multi-Head Attention)通过并行多个注意力头,使模型能够同时关注不同语义子空间的信息。每个头独立计算注意力权重,最后将所有头的输出拼接并通过线性变换融合。
四、语义理解:从向量到上下文表示
经过多层Transformer编码后,每个Token的向量表示已融合全局上下文信息。此时可通过三种方式提取语义特征:
- 分类任务:取[CLS]标记的向量接入分类头
- 序列标注:对每个位置的向量进行独立预测
- 信息检索:计算查询向量与文档向量的相似度
向量空间的几何性质直接影响语义理解效果。理想情况下应满足:
- 语义相似性:cos(v1,v2) ≈ 语义相似度
- 语义组成性:v(“king”) - v(“man”) + v(“woman”) ≈ v(“queen”)
- 语义线性:v(“large”) - v(“big”) ≈ v(“huge”) - v(“big”)
五、文本生成:自回归解码策略
生成阶段采用自回归(Autoregressive)方式逐个预测Token。解码策略直接影响生成结果的多样性和质量,常见方法包括:
-
贪心搜索(Greedy Search):每步选择概率最高的Token
- 优点:计算效率高
- 缺点:容易陷入局部最优
-
束搜索(Beam Search):保留top-k个候选序列
# 伪代码示例def beam_search(model, input_ids, beam_width=5):sequences = [[input_ids, 0.0]] # [token_ids, log_prob]for _ in range(max_length):all_candidates = []for seq in sequences:if seq[0][-1] == EOS_TOKEN:all_candidates.append(seq)continuelogits = model(seq[0])top_k = torch.topk(logits, beam_width)for token, prob in zip(top_k.indices, top_k.values):new_seq = [seq[0]+[token], seq[1]+math.log(prob)]all_candidates.append(new_seq)# 按累积概率排序并截断ordered = sorted(all_candidates, key=lambda x: x[1], reverse=True)sequences = ordered[:beam_width]return sequences[0][0]
-
采样方法(Sampling):
- 温度采样:调整softmax温度参数T
- Top-k采样:限制候选词范围
- Nucleus采样:保留累积概率超过p的词汇
六、评估与优化指标
生成质量评估需综合考虑多个维度:
-
自动指标:
- BLEU:基于n-gram匹配的精确度
- ROUGE:侧重召回率的评估
- METEOR:考虑同义词和词干匹配
- BERTScore:基于预训练模型的语义相似度
-
人工评估:
- 流畅性:语法正确性和连贯性
- 相关性:与输入内容的匹配度
- 多样性:避免重复和模板化
- 信息量:提供有价值的新内容
优化方向包括:
- 增加训练数据多样性
- 调整解码策略参数
- 引入强化学习进行偏好优化
- 使用对比学习提升向量空间质量
七、行业应用实践建议
在实际部署中需注意:
- 长文本处理:采用滑动窗口或稀疏注意力机制
- 领域适配:通过继续预训练或微调适应专业场景
- 效率优化:使用量化、蒸馏等技术降低推理延迟
- 安全控制:构建内容过滤机制防止有害生成
当前技术发展趋势显示,向量空间建模正朝着更高维、更稀疏、更动态的方向演进。结合知识图谱和外部记忆模块的混合架构,有望进一步提升大模型的语义理解能力。开发者应持续关注注意力机制的改进和生成策略的创新,以构建更智能的文本处理系统。