1. 词干提取和词形还原的区别及使用场景
方法 | 定义 | 特点 | 使用场景 |
---|
词干提取(Stemming) | 通过截断词的后缀或前缀,得到一个可能不是标准词汇的词干 | 规则简单,速度快,但结果可能不是有效单词 | 适用于搜索引擎、信息检索等对精度要求不高的任务 |
词形还原(Lemmatization) | 根据单词的词性(POS)和语境,返回其标准词形(词典中存在的单词) | 需要依赖词典,精确但速度较慢 | 适用于 NLP 任务,如机器翻译、问答系统等 |
词干提取:通常使用规则或启发式方法,不依赖词典,如:
Porter Stemmer(最常见)
from nltk.stem import PorterStemmer
ps = PorterStemmer()
print(ps.stem("running")) # 输出: run
print(ps.stem("flies")) # 输出: fli(可能错误)
还有:Lancaster Stemmer(更激进)
Snowball Stemmer(支持多种语言)
词形还原:基于词典(如 WordNet),结合 词性(POS)信息 进行转换。更精确,但计算开销大。
from nltk.stem import WordNetLemmatizer
from nltk.corpus import wordnet
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize("running", pos='v')) # 输出: run
print(lemmatizer.lemmatize("flies", pos='n')) # 输出: fly
词干提取和词形还原的使用场景
场景 | 推荐方法 | 原因 |
---|---|---|
搜索引擎 / 信息检索 | Stemming | 快速归一化不同形式的单词,提高召回率 |
机器翻译 / 语义分析 | Lemmatization | 需要准确的单词语义,防止误解析 |
关键词提取 | Lemmatization | 需要保留词汇的原始意义 |
低资源计算 / 轻量级应用 | Stemming | 计算速度快,不需要词典支持 |
2. 词袋模型的优缺点?
✅ 优点
- 简单易实现:易于构建特征矩阵,计算效率高。
- 可用于文本分类:适用于情感分析、垃圾邮件检测等任务。
- 可结合 TF-IDF:可降低高频词影响,提高低频词的区分度。
- 与机器学习兼容:可用于 SVM、逻辑回归、朴素贝叶斯等模型。
❌ 缺点
- 丢失语序:无法区分
"I love NLP"
和"NLP love I"
。 - 丢失语义:无法识别同义词,如
"good"
和"excellent"
视为完全不同的词。 - 维度高且稀疏:词汇表大时,矩阵稀疏,计算成本高。
- 无法处理未见词(OOV):训练集未出现的词无法表示。
3. BLEU值是什么?
BLEU 值(BLEU Score) 是用于评估 机器翻译(Machine Translation, MT) 和 文本生成 任务的指标,衡量 生成文本Candidate与参考文本Reference的相似度。
4. 中文分词中的歧义问题类型:
- 交集型歧义:同一串字符可以有多种切分方式,如
ABC
可分为AB/C
或A/BC
。 - 组合型歧义:多个词可以不同方式组合,如
AB
可合并为AB
或A/B
。
5. 在文本情感分析任务中常使用交叉熵:
6. 什么是ROUGH指标?与BLEU指标的区别?
对比项 | ROUGE(Recall-Oriented Understudy for Gisting Evaluation) | BLEU(Bilingual Evaluation Understudy) |
---|
用途 | 主要用于 自动摘要评估,也可用于文本生成 | 主要用于 机器翻译评估,也可用于文本生成 |
核心思想 | 召回率为主,衡量参考文本中的 n-gram 是否出现在生成文本中 | 精确率为主,衡量生成文本中的 n-gram 是否出现在参考文本中 |
计算方式 | 计算 n-gram 召回率(ROUGE-N)、最长公共子序列(ROUGE-L)等 | 计算 n-gram 精确率,并加上 长度惩罚 |
n-gram 统计 | 参考文本中的 n-gram 是否出现在生成文本 | 生成文本中的 n-gram 是否出现在参考文本 |
主要指标 | - ROUGE-N(n-gram 召回率) - ROUGE-L(最长公共子序列) - ROUGE-W(加权最长公共子序列) - ROUGE-S(跳跃 n-gram) | - BLEU-N(n-gram 精确率) - BLEU-4(标准 4-gram 计算) |
适用于 | 文本摘要、文本生成(如 GPT-3 评估) | 机器翻译、文本生成 |
7. cnn在nlp任务的应用多见于什么场景?
cnn对位置不敏感,适合语序对nlp任务影响不大的场景。
优势 | 原因 |
---|
并行计算(Parallelism) | CNN 计算不依赖前后时序关系,可以 并行处理,比 RNN 快 |
捕捉局部特征(Local Features) | CNN 使用 卷积核(Filters),可以有效提取 n-gram 级别的短语信息 |
适用于短文本(Short Text) | 适用于短文本任务,如 情感分析、新闻分类,比 RNN 更高效 |
参数共享(Parameter Sharing) | CNN 共享卷积核参数,在大语料训练时 更具鲁棒性 |
避免梯度消失(Gradient Vanishing) | RNN 处理长文本时易梯度消失,CNN 结构避免了这个问题 |
8. word embedding是什么?
Word Embedding(词向量) 是将 单词映射到低维连续向量空间,使得相似的单词在向量空间中更接近。常见的方法包括 Word2Vec、GloVe、FastText,以及 Transformer 预训练的嵌入(如 BERT)。
假设我们有以下单词:
["king", "queen", "man", "woman"]
Word Embedding 可能将它们映射为:
单词 | 维度 1 | 维度 2 | 维度 3 | 维度 4 |
---|---|---|---|---|
king | 0.5 | 0.8 | 0.2 | 0.7 |
queen | 0.6 | 0.9 | 0.1 | 0.6 |
man | 0.2 | 0.7 | 0.3 | 0.8 |
woman | 0.3 | 0.8 | 0.2 | 0.7 |
维度个数是一个超参数,由语料库规模、词汇表大小、计算资源、任务需求等因素决定。
常见 Word Embedding 维度
模型 | 常见维度 | 适用场景 |
---|---|---|
Word2Vec(Google 预训练) | 300 | 一般 NLP 任务 |
GloVe(Stanford 预训练) | 50, 100, 200, 300 | 文本分类、搜索 |
FastText | 100, 300 | 适用于 OOV 词 |
BERT(Transformer) | 768, 1024 | 需要强上下文理解的任务 |
word embedding的优点:
- 词嵌入相比one-hot embedding,维度低且为连续向量,方便机器学习型的处理;
- word embedding具有天然的聚类效果,语义相似的词在向量空间上也较为接近;
- 是无监督的方法,方便应用到海量数据。
9. 什么是Word2Vec?
Word2Vec 是一种 基于上下文学习单词向量 的方法,即word embedding的实现算法之一,主要有两种训练方式:
- CBOW(Continuous Bag of Words):通过上下文预测中心词。
- Skip-Gram:通过中心词预测上下文。
word2vec与glove的区别:
word2vec使用神经网络学习word-embedding的表示,属于predictive-model;
而Glove算法本质上是对词频共现矩阵进行SVD降维,属于count-based model。
10. 介绍一下隐马尔可夫模型
HMM(隐马尔可夫模型)的思想 是:系统存在一个 不可直接观测的隐藏状态序列,但可以通过 观测状态序列 来推断隐藏状态的变化。HMM 假设 当前隐藏状态只依赖于前一个状态(马尔可夫性),并通过 状态转移概率 进行跳转,同时根据 观测概率(发射概率) 生成可见数据。
HMM 的基本步骤:
- 定义状态空间:确定隐藏状态(如词性)和观测状态(如单词)。
- 初始化概率:设定初始状态分布、状态转移概率、发射概率。
- 计算问题(前向算法):求观测序列的概率。
- 解码问题(维特比算法):找到最可能的隐藏状态序列。
- 训练问题(Baum-Welch):从数据中学习最优参数(状态转移 & 发射概率)。
11. Bert的思想和结构是什么?
BERT(Bidirectional Encoder Representations from Transformers)是基于 Transformer encoder 的预训练模型,通过双向注意力机制建模文本上下文,从大规模语料中学习通用语言表示。
其主要训练任务包括:
- MLM(Masked Language Model):随机遮蔽部分单词,预测被遮蔽词,以学习双向上下文关系。
- NSP(Next Sentence Prediction):判断两句话是否连续,以学习跨句子关系。
BERT 主要结构
BERT 采用 多层 Transformer 编码器 进行文本建模,主要包括:
-
输入层:
- Token Embedding:将输入文本转换为 WordPiece 词向量。
- Segment Embedding:区分不同句子(如 NSP 任务)。
- Position Embedding:编码单词在句子中的位置。
-
编码层:
- 由 多个 Transformer 编码器层(如 BERT-Base 12 层,BERT-Large 24 层) 组成。
- 采用 多头自注意力(Multi-Head Attention),可同时关注多个上下文关系。
- 采用 Feed-Forward Network(FFN) 进行特征转换。
-
输出层:
- MLM 预测头:预测被遮蔽的单词。
- NSP 分类头:判断两个句子是否相连。
12. 简述Transformer模型结构,特别是Encoder-Decoder特点与区别
Transformer 采用 典型的 Encoder-Decoder 结构,其中:
-
Encoder 端 和 Decoder 端 均由 6 个 Block 组成。
-
Encoder Block 主要包含:
-
多头自注意力(Self-Attention)
-
前馈神经网络(Feed-Forward Network, FFN)
-
-
Decoder Block 额外包含:
-
多头自注意力(Self-Attention)
-
Encoder-Decoder 交互注意力(Cross-Attention)
-
前馈神经网络(FFN)
-
-
每个 Block 还包含 残差连接(Residual Connection)和 Layer Normalization(层归一化),用于稳定训练。
📌 Transformer 结构与各组件作用
模块 | 位置 | 作用 |
---|---|---|
多头自注意力(Multi-Head Self-Attention) | Encoder & Decoder | 让模型关注输入序列中不同部分的关联,捕捉长程依赖关系 |
Encoder-Decoder 交互注意力(Cross-Attention) | Decoder | 让 Decoder 关注 Encoder 的输出,以生成正确的目标序列 |
前馈神经网络(Feed-Forward Network, FFN) | Encoder & Decoder | 进一步处理 Transformer Block 输出,提高特征表达能力 |
残差连接(Residual Connection) | Encoder & Decoder | 防止梯度消失,增强深层网络的训练效果 |
Layer Normalization | Encoder & Decoder | 归一化层,稳定训练,加速收敛 |
位置编码(Positional Encoding) | 输入层 | 由于 Transformer 没有 RNN 结构,位置编码用于引入单词的顺序信息 |
为什么残差连接可以解决梯度爆炸?
- 缓解梯度消失:梯度可以绕过深层网络的非线性变换,直接传播到前层,提高参数更新效率。
- 稳定深层网络训练:让深层网络至少能学习恒等映射(Identity Mapping),避免退化问题。
- 加快收敛:提供直接的梯度传递路径,使训练更稳定,收敛速度更快。
13. Bert有哪些可以改进的地方?
-
问题:中文 BERT 以汉字为单位,忽略了词级信息。
改进:ERNIE 引入知识实体,BERT-WWM 采用 短语级 Mask(Whole Word Masking)。 -
问题:NSP 任务影响词向量性能。
改进:RoBERTa 移除 NSP,使用 动态 Mask 替代静态 Mask。 -
问题:BERT 计算开销大,推理慢。
改进:DistilBERT、ALBERT 进行 模型蒸馏与参数共享,降低计算成本。 -
问题:BERT 处理长文本受限(最大 512 tokens)。
改进:Longformer、BigBird 采用 稀疏注意力机制,适应长文本。
-
问题:生成任务表现不佳,预训练和生成过程不一致。
改进:T5、BART 采用 序列到序列(Seq2Seq) 结构,优化生成能力。 -
问题:位置编码使用绝对编码,难以建模长程依赖。
改进:ALiBi、RoPE 采用 相对位置编码,增强位置感知能力。
14. Attention机制的核心作用?它为什么如此有效?
- 在 Attention 出现之前,通常使用 RNN(LSTM)建模序列信息,这些模型需要读取完整句子并将所有信息压缩为固定长度的向量;当处理长句时,容易导致信息丢失等问题。
- 注意力机制基于人类视觉注意机制,在处理长句时,不是按顺序浏览每个单词或字符,而是潜意识地关注信息密度最高的部分,并过滤掉无关信息;能更有效地捕获上下文信息。
- 跳过固定长度瓶颈:不像 RNN 需要将所有信息压缩到一个向量,Attention 允许模型直接关注输入序列的关键部分,提高长文本处理能力。
- 全局依赖建模:可以 并行处理,不像 RNN 依赖递归计算,避免梯度消失问题,适用于长程依赖建模。
- 自适应权重分配:不同词的重要性不同,Attention 通过 权重机制 让模型动态调整关注点,提高信息提取效率。
15. 简述BPE模型
BPE(Byte Pair Encoding) 是一种 基于统计的子词分词算法,用于压缩词汇表并减少 OOV 词汇。从字符级开始,迭代合并出现频率最高的相邻字符或子词,形成更长的子词单元。
- BPE 通过统计合并最频繁的字符对,适合一般数据压缩。
- WordPiece 通过最大化语言模型概率合并子词,适合 NLP 任务,如 BERT。
16. 简述NLP数据增强的办法
- 加噪声:以信息丢失为主(Dropout),如 随机切词(每次切换不同词类)、在 Embedding 上随机 Dropout,或使用带权重的 Mask 遮蔽部分单词。
- 同义词替换:随机选择一些词,替换为 同义词,如 “她非常美丽” → “她非常漂亮”,但 NLP 词向量相似的情况下,增强效果有限。
- 反向翻译(Back Translation):使用机器翻译 将句子翻译成另一种语言,再翻译回原语言,得到 意思相近但表述不同的新句子,可增强语序多样性。
- 生成式方法:使用 GAN / VAE 生成网络 生成新数据,适合 高质量数据增强,但训练 GAN 难度较大,计算成本高。
17. NLP如何解决OOV问题?
- 子词分词(Subword Tokenization):使用 BPE、WordPiece、SentencePiece 等方法将 OOV 词拆分成已知子词,减少完全未见词的情况。
- UNK(Unknown Token):用特殊符号
<UNK>
代替 OOV 词,但会丢失语义信息,适用于简单模型。 - 字符级模型(Character-Level Model):直接基于字符级建模(如 CNN/RNN 处理字符级输入),适用于 OOV 词较多的场景。
- 动态词向量(Contextual Embeddings):如 BERT、GPT、ELMo,能够基于上下文生成 OOV 词的语义表示,而不是依赖固定词表。
- 词形还原(Lemmatization):将单词还原为词根,如 "running" → "run",减少 OOV 发生的可能性。