logo

哈工大2022秋NLP期末试题解析与备考指南

作者:公子世无双2025.09.26 18:33浏览量:1

简介:本文深度解析哈尔滨工业大学2022年秋季自然语言处理(NLP)期末考试回忆版试题,涵盖核心算法、模型架构及典型应用场景,结合理论推导与代码示例,为NLP学习者提供备考策略与实战指导。

一、考试整体结构与核心考点分析

哈尔滨工业大学2022年秋季自然语言处理(NLP)期末考试延续了“理论+实践”的考核模式,试卷分为基础题(40%)、算法题(30%)和综合应用题(30%)三部分。基础题聚焦NLP核心概念,如语言模型、词向量表示、序列标注任务;算法题要求推导Transformer、BERT等模型的数学原理;综合应用题则考察文本生成、信息抽取等实际场景的解决方案。

核心考点分布

  1. 语言模型与统计方法:N-gram模型、平滑技术、困惑度计算;
  2. 词向量与预训练模型:Word2Vec、GloVe、BERT的架构与训练目标;
  3. 序列标注与结构预测:CRF、HMM在命名实体识别中的应用;
  4. 注意力机制与Transformer:自注意力计算、多头注意力、位置编码;
  5. 生成式任务:Seq2Seq模型、束搜索(Beam Search)、重复生成问题。

二、基础题解析:从理论到代码的深度拆解

典型题目1:N-gram语言模型的平滑技术
题目要求计算三元组“我 爱 自然语言”在语料库中的概率,并对比加一平滑与Good-Turing平滑的效果。

关键步骤

  1. 统计词频:假设语料库中“我 爱 自然语言”出现2次,“我 爱 编程”出现3次,总三元组数为1000;
  2. 加一平滑:未登录词概率 = (1)/(1000+V³),其中V为词汇表大小(假设V=5000);
  3. Good-Turing平滑:调整出现次数为0的三元组概率,利用出现1次的词频估计。

代码示例(Python)

  1. import math
  2. def good_turing_smoothing(counts, total_ngrams, vocab_size):
  3. # 统计出现次数为r的n-gram数量N_r
  4. N_r = {r: counts.count(r) for r in set(counts)}
  5. # 估计未登录词概率
  6. p_zero = N_r.get(1, 0) / total_ngrams * (1 + 1) / (vocab_size**3 + 1)
  7. return p_zero
  8. # 示例数据
  9. counts = [2, 3] * 500 # 模拟1000个三元组的出现次数
  10. total_ngrams = 1000
  11. vocab_size = 5000
  12. print("Good-Turing未登录词概率:", good_turing_smoothing(counts, total_ngrams, vocab_size))

典型题目2:Word2Vec的负采样目标函数
题目要求推导Skip-Gram模型中负采样损失的数学表达式,并解释其与原始Softmax的区别。

关键推导

  1. 原始Softmax:P(w_o|w_i) = exp(u_o·v_i) / Σ_j exp(u_j·v_i),计算复杂度为O(|V|);
  2. 负采样:仅对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维),要求计算单头自注意力的输出。

关键步骤

  1. 生成Q、K、V矩阵:通过线性变换W_Q, W_K, W_V∈R^(512×64)得到Q, K, V∈R^(3×64);
  2. 计算注意力分数:Attention_scores = QK^T / √d_k = XW_Q(W_K^TX^T) / 8;
  3. Softmax归一化:Attention_weights = Softmax(Attention_scores);
  4. 加权求和:Output = Attention_weights V。

代码示例(PyTorch

  1. import torch
  2. import torch.nn as nn
  3. # 输入序列 (batch_size=1, seq_len=3, dim=512)
  4. X = torch.randn(1, 3, 512)
  5. # 线性变换
  6. W_Q = nn.Linear(512, 64)
  7. W_K = nn.Linear(512, 64)
  8. W_V = nn.Linear(512, 64)
  9. Q = W_Q(X) # (1,3,64)
  10. K = W_K(X)
  11. V = W_V(X)
  12. # 自注意力计算
  13. scores = torch.bmm(Q, K.transpose(1, 2)) / (64 ** 0.5) # (1,3,3)
  14. weights = torch.softmax(scores, dim=-1)
  15. output = torch.bmm(weights, V) # (1,3,64)
  16. print("自注意力输出形状:", output.shape)

典型题目2:BERT的MLM任务损失
题目要求解释BERT中Masked Language Model(MLM)的训练目标,并分析其与传统语言模型的区别。

关键点

  1. 随机遮盖:15%的词被遮盖,其中80%替换为[MASK],10%替换为随机词,10%保持不变;
  2. 双向上下文:利用Transformer的双向编码能力预测遮盖词;
  3. 损失函数:交叉熵损失,仅计算被遮盖词的位置。

四、综合应用题实战:从模型到部署的全流程

典型题目1:基于BERT的文本分类
题目要求设计一个利用BERT进行新闻分类的方案,包括数据预处理、模型微调、评估指标。

解决方案

  1. 数据预处理
    • 使用BERT分词器(BertTokenizer)将文本转换为ID序列;
    • 添加[CLS]和[SEP]标记,截断或填充至固定长度(如128)。
  2. 模型微调
    • 加载预训练BERT模型(BertForSequenceClassification);
    • 替换分类头为线性层(输出类别数=新闻类别数);
    • 优化器选择AdamW,学习率2e-5。
  3. 评估指标
    • 准确率、F1值(宏平均);
    • 混淆矩阵分析错误分类案例。

代码示例(HuggingFace Transformers)

  1. from transformers import BertTokenizer, BertForSequenceClassification
  2. import torch
  3. # 加载模型和分词器
  4. tokenizer = BertTokenizer.from_pretrained('bert-base-chinese')
  5. model = BertForSequenceClassification.from_pretrained('bert-base-chinese', num_labels=5)
  6. # 示例数据
  7. text = "中国科学家研发新型AI芯片"
  8. inputs = tokenizer(text, return_tensors="pt", max_length=128, truncation=True)
  9. # 前向传播
  10. outputs = model(**inputs)
  11. logits = outputs.logits
  12. predicted_class = torch.argmax(logits, dim=1).item()
  13. print("预测类别:", predicted_class)

五、备考建议与资源推荐

  1. 理论巩固
    • 精读《Speech and Language Processing》(Jurafsky & Martin)第9-12章;
    • 推导关键公式(如CRF的条件概率、Transformer的注意力计算)。
  2. 代码实践
    • 复现经典模型(Word2Vec、Transformer、BERT);
    • 使用HuggingFace Transformers库快速实验。
  3. 真题模拟
    • 限时完成回忆版试题,重点训练算法推导和代码实现;
    • 分析错题,补全知识盲区。

六、总结与展望

哈工大2022年秋季NLP期末考试通过理论推导、算法实现和综合应用三层次考察,要求考生具备扎实的数学基础和工程能力。未来NLP考试可能增加大模型(如GPT、LLaMA)的微调与部署题目,建议考生关注模型压缩、高效训练等前沿技术。

相关文章推荐

发表评论

活动