词向量
### 词向量知识点 **词向量(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: / ← 未知词、填充符 Index 1..N: 词汇表中已知词 ``` **3. 变长序列处理(pad_sequences)** 神经网络要求固定 shape 的张量输入,必须把变长序列填充/截断到等长: ```python from tensorflow.keras.preprocessing.sequence import pad_sequences padded = pad_sequences(sequences, maxlen=5, padding='post', # 'pre' 前填充 / 'post' 后填充 truncating='post', value=0) # 填充值=0 # 配合 Masking(mask_value=0) 或 Embedding(mask_zero=True) 忽略填充位 ``` **4. 关键区分** - **NLP 处理"文本/词汇"**;**计算机视觉处理"对象/物体"**——"对象标准化"是 CV 术语,不是 NLP 预处理 - 未知词**不能跳过**(破坏序列对齐)、**不能用最常见的词替换**(改变语义),必须映射到 `<UNK>`
### 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)`,是**一阶谓词逻辑**的原子命题 - 不涉及量词嵌套(∀/∃)、谓词变量、高阶抽象,**无需三阶逻辑** - 三阶谓词逻辑量词作用于"谓词的谓词",远超三元组的表达需求 **记忆**:三元组 = 一阶原子命题;三阶是过度复杂化的表述。
参考