哈工大2022秋NLP期末试题解析与备考指南
2025.09.26 18:33浏览量:1简介:本文深度解析哈尔滨工业大学2022年秋季自然语言处理(NLP)期末考试回忆版试题,涵盖核心算法、模型架构及典型应用场景,结合理论推导与代码示例,为NLP学习者提供备考策略与实战指导。
一、考试整体结构与核心考点分析
哈尔滨工业大学2022年秋季自然语言处理(NLP)期末考试延续了“理论+实践”的考核模式,试卷分为基础题(40%)、算法题(30%)和综合应用题(30%)三部分。基础题聚焦NLP核心概念,如语言模型、词向量表示、序列标注任务;算法题要求推导Transformer、BERT等模型的数学原理;综合应用题则考察文本生成、信息抽取等实际场景的解决方案。
核心考点分布:
- 语言模型与统计方法:N-gram模型、平滑技术、困惑度计算;
- 词向量与预训练模型:Word2Vec、GloVe、BERT的架构与训练目标;
- 序列标注与结构预测:CRF、HMM在命名实体识别中的应用;
- 注意力机制与Transformer:自注意力计算、多头注意力、位置编码;
- 生成式任务:Seq2Seq模型、束搜索(Beam Search)、重复生成问题。
二、基础题解析:从理论到代码的深度拆解
典型题目1:N-gram语言模型的平滑技术
题目要求计算三元组“我 爱 自然语言”在语料库中的概率,并对比加一平滑与Good-Turing平滑的效果。
关键步骤:
- 统计词频:假设语料库中“我 爱 自然语言”出现2次,“我 爱 编程”出现3次,总三元组数为1000;
- 加一平滑:未登录词概率 = (1)/(1000+V³),其中V为词汇表大小(假设V=5000);
- Good-Turing平滑:调整出现次数为0的三元组概率,利用出现1次的词频估计。
代码示例(Python):
import mathdef good_turing_smoothing(counts, total_ngrams, vocab_size):# 统计出现次数为r的n-gram数量N_rN_r = {r: counts.count(r) for r in set(counts)}# 估计未登录词概率p_zero = N_r.get(1, 0) / total_ngrams * (1 + 1) / (vocab_size**3 + 1)return p_zero# 示例数据counts = [2, 3] * 500 # 模拟1000个三元组的出现次数total_ngrams = 1000vocab_size = 5000print("Good-Turing未登录词概率:", good_turing_smoothing(counts, total_ngrams, vocab_size))
典型题目2:Word2Vec的负采样目标函数
题目要求推导Skip-Gram模型中负采样损失的数学表达式,并解释其与原始Softmax的区别。
关键推导:
- 原始Softmax:P(w_o|w_i) = exp(u_o·v_i) / Σ_j exp(u_j·v_i),计算复杂度为O(|V|);
- 负采样:仅对k个负样本计算损失,目标函数为:
L = -log(σ(uo·v_i)) - Σ{j=1}^k log(σ(-u_j·v_i))
其中σ为Sigmoid函数,负样本从噪声分布P_n(w)∝U(w)^(3/4)中采样。
三、算法题攻坚:Transformer与BERT的数学本质
典型题目1:Transformer自注意力计算
题目给出输入序列X∈R^(3×512)(3个词,每个词512维),要求计算单头自注意力的输出。
关键步骤:
- 生成Q、K、V矩阵:通过线性变换W_Q, W_K, W_V∈R^(512×64)得到Q, K, V∈R^(3×64);
- 计算注意力分数:Attention_scores = QK^T / √d_k = XW_Q(W_K^TX^T) / 8;
- Softmax归一化:Attention_weights = Softmax(Attention_scores);
- 加权求和:Output = Attention_weights V。
代码示例(PyTorch):
import torchimport torch.nn as nn# 输入序列 (batch_size=1, seq_len=3, dim=512)X = torch.randn(1, 3, 512)# 线性变换W_Q = nn.Linear(512, 64)W_K = nn.Linear(512, 64)W_V = nn.Linear(512, 64)Q = W_Q(X) # (1,3,64)K = W_K(X)V = W_V(X)# 自注意力计算scores = torch.bmm(Q, K.transpose(1, 2)) / (64 ** 0.5) # (1,3,3)weights = torch.softmax(scores, dim=-1)output = torch.bmm(weights, V) # (1,3,64)print("自注意力输出形状:", output.shape)
典型题目2:BERT的MLM任务损失
题目要求解释BERT中Masked Language Model(MLM)的训练目标,并分析其与传统语言模型的区别。
关键点:
- 随机遮盖:15%的词被遮盖,其中80%替换为[MASK],10%替换为随机词,10%保持不变;
- 双向上下文:利用Transformer的双向编码能力预测遮盖词;
- 损失函数:交叉熵损失,仅计算被遮盖词的位置。
四、综合应用题实战:从模型到部署的全流程
典型题目1:基于BERT的文本分类
题目要求设计一个利用BERT进行新闻分类的方案,包括数据预处理、模型微调、评估指标。
解决方案:
- 数据预处理:
- 使用BERT分词器(
BertTokenizer)将文本转换为ID序列; - 添加[CLS]和[SEP]标记,截断或填充至固定长度(如128)。
- 使用BERT分词器(
- 模型微调:
- 加载预训练BERT模型(
BertForSequenceClassification); - 替换分类头为线性层(输出类别数=新闻类别数);
- 优化器选择AdamW,学习率2e-5。
- 加载预训练BERT模型(
- 评估指标:
- 准确率、F1值(宏平均);
- 混淆矩阵分析错误分类案例。
代码示例(HuggingFace Transformers):
from transformers import BertTokenizer, BertForSequenceClassificationimport torch# 加载模型和分词器tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')model = BertForSequenceClassification.from_pretrained('bert-base-chinese', num_labels=5)# 示例数据text = "中国科学家研发新型AI芯片"inputs = tokenizer(text, return_tensors="pt", max_length=128, truncation=True)# 前向传播outputs = model(**inputs)logits = outputs.logitspredicted_class = torch.argmax(logits, dim=1).item()print("预测类别:", predicted_class)
五、备考建议与资源推荐
- 理论巩固:
- 精读《Speech and Language Processing》(Jurafsky & Martin)第9-12章;
- 推导关键公式(如CRF的条件概率、Transformer的注意力计算)。
- 代码实践:
- 复现经典模型(Word2Vec、Transformer、BERT);
- 使用HuggingFace Transformers库快速实验。
- 真题模拟:
- 限时完成回忆版试题,重点训练算法推导和代码实现;
- 分析错题,补全知识盲区。
六、总结与展望
哈工大2022年秋季NLP期末考试通过理论推导、算法实现和综合应用三层次考察,要求考生具备扎实的数学基础和工程能力。未来NLP考试可能增加大模型(如GPT、LLaMA)的微调与部署题目,建议考生关注模型压缩、高效训练等前沿技术。

发表评论
登录后可评论,请前往 登录 或 注册