|
### 词向量知识点
**词向量(Word Embedding)**:把词映射为稠密实数向量,使**语义相似的词在向量空间中相近**。
**分布式假设**(核心思想):**一个词的语义由其上下文决定**("You shall know a word by the company it keeps")。词义相近 → 上下文相近 → 向量相近。
**Word2vec**(Google, 2013):基于分布式假设的浅层神经网络词向量模型。
- **CBOW**(连续词袋):用上下文预测中心词
- **Skip-gram**:用中心词预测上下文(小数据更优)
- **浅层网络**(仅 1 个隐藏层,无深层结构),训练快
- **无监督**:只需大量未标注语料
- 经典特性:向量运算捕获语义关系,如 `vec(国王) - vec(男) + vec(女) ≈ vec(女王)`
**关键性质**:
| 性质 | Word2vec |
|------|---------|
| 监督/无监督 | **无监督**(自监督:从语料自动构造训练信号) |
| 网络深度 | **浅层**(非深度网络) |
| 训练目标 | 上下文预测(语言建模的副产品) |
| 输出 | 词的稠密向量表示 |
| 应用 | 语义相似度、类比推理、下游任务特征 |
**其他词向量方法**:
- **GloVe**:基于全局词共现矩阵的矩阵分解
- **FastText**:Word2vec + 子词(subword),能处理未登录词
- **ELMo/BERT**:**上下文相关**的词向量(同一词在不同语境向量不同)
**Word2vec vs BERT 的关键区别**:Word2vec 是**静态**词向量(一词一向量);BERT 是**动态**(同一词在不同句中向量不同)。
|
|
### Word2vec 哪些说法正确?
**[多选]** 关于 Word2vec,哪些正确?
A. **是无监督学习** ✓
B. **利用上下文信息** ✓
C. **是语言模型的副产品** ✓
D. **能表示语义关系** ✓
E. 是一个深度神经网络
**答案:A、B、C、D(E 错误)**
**解析**:
- A:无标注语料即可训练,自监督(用数据自身构造上下文-目标对)
- B:CBOW 用上下文预测中心词,Skip-gram 用中心词预测上下文
- C:词向量训练目标类似语言建模,向量是其副产物
- D:向量运算体现语义(如国王-男+女≈女王)
- **E 错**:Word2vec 是**浅层**网络(1 个隐藏层),不是深度网络
|
|
### 序列模型知识点
**RNN(循环神经网络)**:处理变长序列,每步共享参数,隐藏状态传递历史信息。
```
h_t = f(W_h·h_{t-1} + W_x·x_t + b)
```
**问题**:长序列中梯度消失/爆炸,难以捕获**长距依赖**。
**LSTM(长短期记忆)**:用**门控机制**缓解 RNN 的长距依赖问题。
- **细胞状态(Cell State)C_t**:贯穿整个序列的"传送带",信息流动顺畅
- **遗忘门**:决定丢弃多少旧信息
- **输入门**:决定加入多少新信息
- **输出门**:决定输出多少
- **关键**:早期信息可通过 cell state 直接流到后期,不被遗忘
**Seq2Seq(编码器-解码器)**:
- 编码器把输入序列编码为上下文向量
- 解码器从上下文向量逐步生成输出序列
- 应用:机器翻译、摘要、对话
**解码策略**:
| 策略 | 机制 | 优缺点 |
|------|------|--------|
| **贪心解码** | 每步选概率最高的词 | 快,但可能陷入局部最优 |
| **Beam Search** | 每步保留 top-k 个候选序列 | 质量更好,但更慢更耗内存 |
| **采样** | 按概率随机采样 | 多样性高,但不可控 |
**Beam Search 的 beam width(束宽)权衡**:
- 增大 beam width → 找到更好解(搜索空间大)→ 但更慢、更耗内存
- 不影响"收敛步数"(生成长度由 stop 决定)
**困惑度(Perplexity, PPL)**:语言模型评估指标。
```
PPL = 2^(-平均对数似然) = exp(交叉熵)
```
- **PPL 越低,模型越好**(更自信、更准确)
- PPL = 词表大小 → 等概率随机猜;PPL = 1 → 完美预测
|
|
### LSTM 如何帮助理解非相邻词?
**[单选]** 当相关词在句子中不相邻时,LSTM 如何帮助理解句意?
A. 通过隐藏状态短期记忆
B. 通过梯度下降优化
C. 通过词向量相似度
D. **早期词通过 cell state 传到后期** ✓
**答案:D**
**解析**:
- 普通 RNN 的隐藏状态 h_t 经多次变换,早期信息易衰减(梯度消失)
- **LSTM 的 cell state C_t** 是一条贯穿序列的"信息传送带",加法更新(非全替换)
- 早期词的信息可沿 cell state **几乎不衰减地传到后期**
- 即使中间有无关词,相关词的语义仍保留
**关键**:cell state 的加法更新 + 门控控制 → 长距依赖的载体。
|
|
### Seq2Seq 能用贪心或 Beam Search?
**[判断]** Seq2Seq 模型在解码时既可用贪心解码,也可用 Beam Search。
**答案:对 ✓**
**解析**:
- 贪心解码:每步选概率最高的词,简单快但可能次优
- Beam Search:保留 top-k 候选序列,质量更高但更慢
- 两者都是 Seq2Seq 解码的常用方法
- 实际中机器翻译/摘要常用 Beam Search;开放生成(对话/创意)常用采样
|
|
### Beam Search 增大束宽的效果?
**[多选]** Beam Search 中增大 beam width(束宽),哪些正确?
A. **运行变慢** ✓
B. **占用更多内存** ✓
C. **通常找到更好的解** ✓
D. 减少收敛步数
**答案:A、B、C**
**解析**:
- A:beam 越大,每步要追踪的候选越多 → 计算量大 → 慢
- B:要存储所有 beam 的状态 → 内存大
- C:搜索空间更大 → 更可能找到全局更优解(质量提升)
- D 错:beam width 影响"搜索宽度"不影响"生成长度/步数"
**权衡**:beam width 大 → 质量好但慢;实际中常取 5~10。
|
|
### 关于困惑度的正确说法?
**[单选]** 关于 NLP 中的困惑度(Perplexity),哪个正确?
A. 困惑度越高越好
B. **困惑度越低越好** ✓
C. 困惑度应为 0
D. 困惑度与模型无关
**答案:B**
**解析**:
- 困惑度 = `exp(交叉熵)`,衡量语言模型对测试集的"困惑程度"
- **越低 = 模型越自信、预测越准 = 越好**
- PPL = 词表大小 N → 模型等概率瞎猜(最差)
- PPL = 1 → 完美预测(理论最优,实际不可能)
**注意**:PPL 只能在**相同词表、相同测试集**的模型间比较。
|
|
### 语言结构知识点
**句法分析(Syntactic Parsing)**:分析句子的语法结构,常用**句法树**表示。
**句法树类型**:
- **成分句法树(Constituency)**:短语结构(NP/VP/PP),自底向上组合
- **依存句法树(Dependency)**:词与词的依存关系(主谓、动宾)
**句法树的本质特征**:
- **递归性(Recursive)**:子树本身也是一棵树,可嵌套
- 例:句子(S) = 名词短语(NP) + 动词短语(VP);VP 又可分解为 V + NP...
- 这正是"递归神经网络(Recursive NN)"名称的来源——按树结构递归组合
- **不是循环性(Circular)**:循环指自指(A 包含 A),句法树无环
**命名实体识别(NER, Named Entity Recognition)**:
- 任务:从文本中识别出命名实体(人名、地名、机构名等)并分类
- 本质:**序列标注任务**(每个 token 打标签:B-PER, I-PER, O 等)
**NER 适用算法**:
| 算法 | 是否适用 | 原因 |
|------|---------|------|
| **HMM(隐马尔可夫)** | ✅ | 序列建模经典方法 |
| **CRF(条件随机场)** | ✅ | 序列标注的强基线 |
| BiLSTM-CRF | ✅ | 深度学习 + CRF,主流 |
| BERT + softmax/CRF | ✅ | 现代 SOTA |
| GBDT | ❌ | 非序列模型,难处理上下文 |
| LDA | ❌ | 主题模型,非序列标注 |
**序列标注 vs 分类**:NER 是 token 级标注(每个词一个标签),需考虑标签间依赖(如 I-PER 必须跟在 B-PER 后),故 CRF 优于独立分类。
|
|
### 句法树的特征?
**[单选]** 句法树结构有哪些显著特征?
A. **递归性(Recursive)** ✓
B. 循环性(Circular)
C. 线性
D. 对称性
**答案:A**
**解析**:
- 句法树**本质是递归的**:每个子树也是一棵完整句法树,可继续分解
- S → NP + VP;VP → V + NP;NP → Det + N...
- 这种自相似的嵌套结构 = 递归
- 正因如此,"递归神经网络(Recursive Neural Network)"按树结构组合节点
**易混点**:
- 递归(Recursive)≠ 循环(Circular)——循环是自指(含环),句法树是无环的
- 递归(Recursive)≠ 循环神经网络(Recurrent)——前者按树,后者按时间序列
|
|
### NER 适用哪些算法?
**[多选]** 命名实体识别(NER)可用哪些算法?
A. GBDT
B. LDA
C. **HMM** ✓
D. **CRF** ✓
**答案:C、D**
**解析**:
- NER 是**序列标注任务**,需建模 token 间标签依赖
- C 对:HMM 是经典序列建模方法(状态转移 + 观测发射)
- D 对:CRF 是序列标注的强基线,能建模标签间约束
- A 错:GBDT 是非序列模型,逐样本独立预测,难捕获上下文
- B 错:LDA 是无监督主题模型,用于文档主题提取,非序列标注
**现代主流**:BiLSTM-CRF、BERT-CRF。
|
|
### NLP 文本预处理知识点
**完整流水线**:原始文本 → 分词 → 规范化 → 编码 → 填充 → 输入网络。
**1. 预处理标准步骤**
| 步骤 | 说明 | 示例 |
|------|------|------|
| 文本清洗 | 去HTML、特殊字符、标点 | `<p>text</p>` → `text` |
| 分词 (Tokenize) | 切分为词/子词 | `"Hello world"` → `["Hello","world"]` |
| 词汇规范化 | 词干提取、词形还原、大小写统一 | `running` → `run`,`better` → `good` |
| 关系统一化 | 同义词合并、缩写扩展、拼写纠正 | `can't` → `cannot` |
| 噪声移除 | 去停用词、数字、标点 | `the cat` → `cat` |
**2. 编码(Token → Index)**
词汇表为每个词分配唯一索引,未知词(OOV)映射到索引 0(保留给 `<UNK>` / `<PAD>`):
```
Index 0:
|
|
### Q1 哪个不是 NLP 预处理步骤?
**[单选]** 文本数据很无结构、含很多噪点,需要预处理。以下**不是** NLP 预处理过程的是:
A. 词汇规范化 B. 词汇关系统一化 C. 对象标准化 D. 噪声移除
**答案:C**
**解析**:
- A 词汇规范化(词干提取/词形还原/大小写)✅ 是 NLP 预处理
- B 词汇关系统一化(同义词/缩写/拼写纠正)✅ 是 NLP 预处理
- **C 对象标准化 ❌ 不是 NLP 术语**——"对象"指图像中的物体(人、车、狗),属计算机视觉的对象检测/识别领域
- D 噪声移除(去标点/特殊字符/HTML/停用词)✅ 是 NLP 预处理
**记忆口诀**:NLP 处理"文本",CV 处理"对象"。
|
|
### Q2 词汇表中不存在的 token 编码时如何处理?
**[单选]** 如果没有在词汇表中使用 token,那么编码时会发生什么?
A. 该单词未编码,序列化结束
B. 这个词被最常见的 token 代替
C. 这个单词没有经过编码,因此会被跳过
D. 该单词未编码,序列中被替换为 0
**答案:D**
**解析**:这是 OOV(Out-Of-Vocabulary)的标准处理。
| 选项 | 问题 |
|------|------|
| A 序列化结束 | 遇到未知词就停止 → 整篇文档无法处理 |
| B 用最常见的词替换 | 严重改变语义("I ate [the]" 失去原意) |
| C 跳过 | 破坏序列对齐,`"I love [unk] you"` → `"I love you"` 语义巨变 |
| **D 替换为 0** ✅ | 保持序列长度与位置信息,索引 0 = `<UNK>` |
**为什么是 0**:TensorFlow/PyTorch 通用约定,索引 0 保留给 `<UNK>`/`<PAD>`,模型可学习处理未知词策略,且 `mask_zero=True` 能识别填充位。
|
|
### Q3 变长序列如何输入神经网络?
**[单选]** 有许多不同长度的序列,输入神经网络时如何确保它们被理解?
A. 使用 token 生成器的 `pad_sequences` 方法确保长度都相同
B. 使用 `tensorflow.Keras.Preprocessing.Sequencer` 命名空间中的 `pad_sequences` 对象
C. 指定神经网络输入层期望 `dynamic._length` 有不同大小
D. 使用 `pad_sequences` 属性在神经网络输入层上处理
**答案:A**
**解析**:
- **A ✅** `pad_sequences` 是 Keras 标准函数,填充/截断变长序列到等长,是业界通用做法
- B ❌ 命名空间路径不存在(正确路径是 `tensorflow.keras.preprocessing.sequence.pad_sequences`,无 `Sequencer` 类)
- C ❌ `dynamic._length` 不是有效概念,输入层通常需固定 shape
- D ❌ `pad_sequences` 不是输入层的"属性",应在输入网络**之前**预处理
**为什么必须等长**:批处理(一次处理多序列)、GPU 并行(固定 shape)、矩阵运算(标准线性代数)都要求固定 shape。
|
|
### 序列模型知识点
**1. RNN(循环神经网络)核心**
专为**序列数据**设计,隐藏状态在时间步间循环传递:`h(t) = f(h(t-1), x(t))`。
| 架构类型 | 输入 → 输出 | 应用 |
|----------|-------------|------|
| one-to-one | 固定 → 固定 | 普通分类 |
| one-to-many | 1 → 序列 | 图像描述 |
| many-to-one | 序列 → 1 | 情感分析 |
| many-to-many (同步) | 序列 → 序列 | 词性标注 |
| many-to-many (异步) | 序列 → 序列 | **机器翻译 (Seq2Seq)** |
**2. LSTM 对 RNN 的关键改进**
标准 RNN 只有隐藏状态 H,梯度在长距离传播时**消失**。LSTM 引入:
- **单元状态 C_t(Cell State)**:贯穿所有时间步的"信息高速公路",信息可不变地流过长序列
- **三门控**:遗忘门(决定丢弃)、输入门(决定写入)、输出门(决定读出)
- 这套设计称为**恒定误差车(CEC, Constant Error Carousel)**,有效解决长距离依赖
**3. Seq2Seq + 集束搜索**
机器翻译 = 有监督学习(平行语料提供标签):
```
Encoder RNN: 英语 → Context Vector → Decoder RNN → 法语
损失: L = -Σ log P(目标词 | 输入序列)
```
解码时**集束搜索(Beam Search)**保留 top-k 候选,但需**长度归一化**避免偏好短序列。
**4. RNN vs CNN**
- 各有所长,**无优劣之分**:RNN 适合时序(翻译/语音),CNN 适合空间(图像)
- 机器翻译用 RNN 因输入输出都是序列,不是因 RNN"更强大"
|
|
### Q1 为什么 RNN 用于机器翻译?
**[多选]** 为什么 RNN 被用于机器翻译(如英语→法语)?选出所有正确项。
A. 它可以训练成一个有监督的学习问题
B. 它比卷积神经网络(CNN)更强大
C. 当输入/输出是一个序列(例如单词序列)时适用
D. RNN 表示"想法→代码→实验→想法→..."的循环过程
**答案:A、C**
**解析**:
- **A ✅** 机器翻译是有监督学习:训练数据是平行语料(英语句→法语句),输入序列和目标序列都已知
- B ❌ RNN 和 CNN 适用不同场景,不存在"谁更强大"——CNN 擅长空间(图像),RNN 擅长时序(序列)
- **C ✅** RNN 专为序列设计,输入是词序列、输出也是词序列,保持时序依赖与上下文
- D ❌ 这描述的是研发迭代流程,与 RNN(Recurrent Neural Network,循环神经网络)完全无关
**Seq2Seq 架构**:Encoder 编码英语为 Context Vector,Decoder 解码出法语,全程梯度下降更新权重 = 有监督学习。
|
|
### Q2 浅 RNN 与 LSTM 的主要区别?
**[单选]** 浅显的 RNN 和 LSTM 之间的主要区别是什么?
A. LSTM 具有单个输出,RNN 具有多个输出
B. 除了 H 输出外,LSTM 的单元状态贯穿所有单元
C. 除了 H 输出外,RNN 的单元状态贯穿所有单元
D. LSTM 具有多个输出,RNN 具有单个输出
**答案:B**
**解析**:
- **B ✅** LSTM 引入**单元状态 C_t**,配合遗忘门/输入门/输出门,贯穿所有时间步——这是 LSTM 的核心创新,称为"恒定误差车(CEC)",有效解决长距离梯度消失
- A、D ❌ 输出数量取决于任务架构(many-to-one/many-to-many),不是 RNN/LSTM 的本质区别
- C ❌ 标准 RNN **只有隐藏状态 H**,没有独立的单元状态,单元状态是 LSTM 特有
**结构对比**:
```
RNN: 输入 → tanh(Wx+Uh+b) → H_t → 输出 (只有 H,梯度易消失)
LSTM: 输入 → [遗忘门|输入门|输出门] → C_t + H_t → 输出 (C_t 信息高速公路)
```
|
|
### Q3 集束搜索不归一化会输出过短译文?
**[判断]** 在机器翻译中,如果不使用句子归一化就使用集束搜索,算法会输出过短的译文。
**答案:对 ✓**
**解析**:序列生成目标是最大化条件概率乘积:
`P(y₁,...,yₙ) = ∏ P(yₜ | y₁,...,yₜ₋₁)`
**问题根源**:每个条件概率都 `< 1`,序列越长,乘积越小(指数级衰减)。
| 候选译文 | 概率乘积 | 不归一化得分 |
|----------|---------|-------------|
| "Hi"(短) | 0.9 × 0.8 | **0.72 ← 被偏好** |
| "Hi world" | 0.9 × 0.7 × 0.6 | 0.378 |
| "Hi there world" | 0.9 × 0.5³ | 0.112 |
→ 算法倾向于**过早输出 `<eos>`**(结束符)以保持高分。
**解决方案——长度归一化**:
`归一化得分 = ∏ P(yₜ) / n^α`,α 通常 0.5~1.0
除以序列长度 n 的 α 次方后,长短序列得以公平比较。Andrew Ng 建议:若发现集束搜索输出译文过短,很可能是漏了长度归一化。
|
|
### 知识图谱知识点
**基本单位——三元组**:(头实体, 关系, 尾实体)
```
(李白, 朝代, 唐朝)
(北京, 首都, 中国)
(爱因斯坦, 出生于, 德国)
```
**逻辑形式**:每个三元组可写成 `R(实体1, 实体2)`,是一阶谓词逻辑的**原子命题**(atomic proposition)——最简单的事实陈述。
**谓词逻辑的阶**
| 阶 | 量词作用对象 | 复杂度 | 示例 |
|----|-------------|--------|------|
| **一阶** | 个体变量 | 低 | `Capital(北京, 中国)` |
| 二阶 | 谓词变量 | 中 | "所有关系 R 都..." |
| 三阶 | 谓词的谓词 | 高 | 高阶抽象 |
**结论**:知识图谱三元组只需**一阶谓词逻辑**即可表达,不涉及量词嵌套或谓词变量,无需二阶/三阶逻辑。
**典型应用**:搜索引擎(Google Knowledge Graph)、问答系统、推荐系统、RAG(检索增强生成)的知识源。
|
|
### Q1 知识图谱三元组遵从三阶谓词逻辑?
**[判断]** 知识图谱中的三元组遵从一种三阶谓词逻辑的表达形式。
**答案:错 ✗**
**解析**:
- 三元组 `(头实体, 关系, 尾实体)` 形式化为 `R(实体1, 实体2)`,是**一阶谓词逻辑**的原子命题
- 不涉及量词嵌套(∀/∃)、谓词变量、高阶抽象,**无需三阶逻辑**
- 三阶谓词逻辑量词作用于"谓词的谓词",远超三元组的表达需求
**记忆**:三元组 = 一阶原子命题;三阶是过度复杂化的表述。
|