大家好,这里是好评笔记,本文为试读,查看全文请移步公主号:Goodnote。本文详细介绍面试过程中可能遇到的循环神经网络RNN、LSTM、GRU、Bi-RNN知识点。
@[toc]
文本特征提取的方法
1. 基础方法
1.1 词袋模型(Bag of Words, BOW)
词袋模型最简单的方法。它将文本表示为一个词频向量,不考虑词语的顺序或上下文关系,只统计每个词在文本中出现的频率。
工作原理
- 构建词汇表:对整个语料库中的所有词汇建立一个词汇表(也称为词典)。每个文档中的每个词都与词汇表中的一个位置对应。
- 生成词频向量:对于每个文本(文档),生成一个与词汇表长度相同的向量。向量中每个元素表示该词在文档中出现的次数(或者是否出现,用二进制表示)。
举例
假设有两个句子:
- 句子 1:
猫 喜欢 鱼 - 句子 2:
狗 不 喜欢 鱼
词汇表 = ["猫", "狗", "喜欢", "不", "鱼"]
- 句子 1 的词袋向量表示为:[1, 0, 1, 0, 1]
- 句子 2 的词袋向量表示为:[0, 1, 1, 1, 1]
优点
- 简单直观,易于实现,有效地表示词频信息。
缺点
- 忽略词序:词袋模型无法捕捉词语的顺序,因此在语义表达上有局限。
- 高维稀疏:对于大词汇表,词袋模型会生成非常长的特征向量,大多数元素为 0,容易导致稀疏矩阵,影响计算效率。
- 受到常见词的影响:常见词(如 "the"、"and" 等)可能在各类文档中频繁出现,但对语义贡献较少,词袋模型会受到这些高频词的影响,降低模型的效果。
1.2 TF-IDF(Term Frequency-Inverse Document Frequency)
TF-IDF 是对词袋模型的改进,它为词语赋予不同的权重,来衡量每个词在文档中的重要性。与词袋模型相比,TF-IDF 不仅考虑词频,还考虑词的普遍性,以避免常见词(如"the"、"and")的影响。
工作原理
举例
对于句子“猫 喜欢 鱼”和“狗 不 喜欢 鱼”,假设 "喜欢" 出现在所有文档中,IDF 会给它较低的权重,而像 "猫"、"狗" 这样的词会有较高的 IDF 权重,因为它们只出现在一部分文档中。
优点
- 更准确地反映词的重要性,避免了词袋模型中常见词占主导地位的情况。尤其适用于文本分类任务。
缺点
- 稀疏矩阵:虽然词频的权重经过调整,但词汇表的大小仍然很大,容易产生稀疏矩阵问题。
- 忽略词序:仍然无法捕捉词语之间的顺序和上下文关系。
1.3 TF-IDF的改进——BM25
BM25对TF和IDF进行加权,同时考虑文档长度对相关性的影响,使得对较短和较长文档的评分更加合理。
BM25 的计算公式如下:
TF-IDF 中的 IDF(逆文档频率)使用
来衡量词的普遍性。然而这种计算方式可能会导致在某些极端情况下(如 df(t) = 0 )出现不合理的结果。
BM25 对 IDF 进行了小改进,以提高在极端情况下的稳定性:
这种改进的 IDF 计算在文档数量较少或者某个词的出现频率极高时,能提供更合理的 IDF 值,增加了 BM25 的稳定性。
优化
相比于 TF-IDF,BM25 主要做了以下改进:
- 非线性词频缩放:通过 控制词频TF饱和 ,避免 TF 值无限增大导致的偏差。
- 文档长度归一化:使用参数调整文档长度对评分的影响,防止长文档得分偏高。
- 改进的 IDF 计算:使用平滑后的 IDF 计算,保证在极端情况下的稳定性。
- 查询词频考虑:在评分中更合理地衡量查询中词频的影响,提高了对复杂查询的检索效果。
1.4 N-Gram 模型
N-Gram 模型是一种基于词袋模型的扩展方法,它通过将词组作为特征,来捕捉词语的顺序信息。
工作原理
-
N-Gram 是指在文本中提取连续的 n 个词组成的词组作为特征。当 n=1 时,即为 unigram(单词级别特征);当 n=2 时,即为 bigram(双词组特征);当 n=3 时,即为 trigram(词三元组特征)。
-
在提取 N-Gram 时,模型不仅关注单个词,还捕捉到词与词之间的顺序和依赖关系。例如,2-Gram 模型会将句子分解为相邻的两词组合。
举例
对于句子“猫 喜欢 吃 鱼”,2-Gram 模型会提取出以下特征:
- ["猫 喜欢", "喜欢 吃", "吃 鱼"]
优点
- 能捕捉到顺序和依赖关系,比单词级别的特征表达更丰富。n 越大,模型捕捉的上下文信息越多。
缺点
- 维度膨胀:n 值越大,特征向量的维度会急剧增加,容易导致稀疏矩阵和计算复杂度升高。
- 对长文本,N-Gram 模型可能会生成非常多的组合,计算资源消耗较大。
RNN
循环神经网络(RNN,Recurrent Neural Network)是一种用于处理序列数据等具有顺序关系的数据的神经网络。与传统的前馈神经网络不同,RNN 具有循环连接 ,允许信息通过隐藏状态在序列的不同时间步之间传播。这种结构使得RNN非常适合处理时间序列、文本数据、语音信号等具有顺序关系的数据。
RNN 参数
其他相关参数:
- 时间步(Time Steps):决定模型的循环次数,非可学习参数。
- 损失函数(Loss Function):指导模型参数更新的依据,非可学习参数。
- 学习率(Learning Rate):控制优化过程的步幅大小,超参数。
RNN 的特点
- 顺序处理:RNN 可以处理不同长度的输入序列,这是由于其内部结构允许将前一步的信息作为当前步的输入之一。
- 隐藏状态:RNN 具有隐藏状态,隐藏状态是前一个时间步的信息的压缩,并与当前输入一起决定下一时间步的输出。
- 权重共享:RNN 中每个时间步之间共享相同的网络权重( , , ),减少了模型参数的数量,适合处理序列长度不同的问题。
RNN 的局限性
- 梯度消失与爆炸问题:在长序列处理中,由于反向传播算法在计算梯度时,RNN 容易出现梯度消失(gradient vanishing)或梯度爆炸(gradient exploding)的现象,导致模型难以学习长期依赖关系。
- 长时间依赖问题:RNN 处理长序列时,无法有效捕捉到前后相距较远的依赖关系,导致模型的性能下降。
- 并行化困难:由于 RNN 是逐时间步处理序列的,因此不容易并行化处理,这使得其训练时间较长。
前向传播的核心计算
在 RNN 中,当前时间步的输出不仅依赖于当前输入,还依赖于之前时间步的隐状态(hidden state)。隐状态是 RNN 中的一个内部存储器,它能够保存之前的时间步的信息,使得网络具备记忆能力。RNN 的计算公式如下:
隐状态更新
输出更新
RNN 的训练流程
RNN 的训练主要包括以下步骤:
详细全文请移步公主号:Goodnote。