查看全课大纲(第 40 / 69 节)
- 1.NLP 的研究领域、应用与学习路径
- 2.自然语言的基本术语
- 3.信息论基础:信息熵与交叉熵
- 4.语言的进化与语义变迁
- 5.主观概率、客观概率与条件概率
- 6.贝叶斯原理与推理
- 7.随机变量:二项式、期望方差与联合概率
- 8.常见概率分布
- 9.辛普森悖论与贝叶斯解题实例
- 10.语言模型:语言概率与词袋模型
- 11.n-gram 语言模型(二元 / 三元 / N-Gram)
- 12.语言模型评价:交叉熵、困惑度与插值
- 13.朴素贝叶斯文本分类:垃圾邮件
- 14.拼写检查
- 15.中文分词:构词法、最大匹配、最优路径与 Jieba
- 16.词表示问题与语义相似度
- 17.TF-IDF 权重处理
- 18.One-Hot 表达与词表示的局限
- 19.Word2Vec 核心思想
- 20.Word2Vec 训练过程
- 21.Skip-gram 模型详解
- 22.词性标注任务与标注方法(规则 + N-Gram)
- 23.EM 算法与混合模型
- 24.高斯混合模型 GMM
- 25.从混合模型到隐马尔可夫模型
- 26.隐马尔可夫模型(HMM)推导与维特比解码
- 27.线性链条件随机场 CRF
- 28.贝叶斯网络与图模型
- 29.隐马尔可夫链与 HMM 推导
- 30.PLSA 主题模型
- 31.LSI 与 SVD 向量表达
- 32.LDA 与狄利克雷分布
- 33.主题模型实验复现(困惑度 / 分类 / 相似度 / 延展)
- 34.上下文无关文法(CFG)与句法分析
- 35.概率上下文无关文法 PCFG
- 36.统计机器翻译:词对齐与翻译模型
- 37.统计机器翻译中的对齐模型与参数估计
- 38.从统计机器翻译到神经机器翻译
- 39.神经元与反向传播速览(指向深度学习课)
- 40.CNN 原理及其在 NLP 中的应用
- 41.循环神经网络的基本原理与 Elman / Jordan 网络
- 42.LSTM:长短期记忆网络的核心思想与分步实现
- 43.Encoder-Decoder 框架
- 44.Seq2Seq 与早期注意力机制
- 45.注意力机制的背景与动机
- 46.注意力模型实现原理与匹配函数
- 47.记忆网络:组成与计算
- 48.注意力机制的应用与历史延展
- 49.Transformer 结构:Encoder-Decoder 栈与 Self-Attention
- 50.Multi-Head Attention、FFNN 与位置编码
- 51.层归一化、损失函数与 Universal Transformer 延展
- 52.预训练范式:从 ELMo 到 BERT
- 53.BERT 与掩码语言模型
- 54.BERT 下游任务微调与 GLUE 口径
- 55.GPT 与自回归语言建模
- 56.GPT-1 到 GPT-4 的演进
- 57.指令微调与 RLHF
- 58.分词器:BPE、WordPiece 与中文词表
- 59.上下文窗口与长文本处理
- 60.能力边界、成本与适用场景
- 61.文本分类实战:从朴素贝叶斯到逻辑回归
- 62.命名实体识别实战
- 63.文本生成与摘要实战
- 64.语义检索与向量库实战
- 65.RAG 知识库问答
- 66.NLP 评估指标:BLEU / ROUGE / BERTScore 与人工评估
- 67.幻觉与事实性问题
- 68.文本与知识结合(知识图谱压缩)
- 69.跨媒体信息检索与未来展望
CNN 原理及其在 NLP 中的应用
小象实战讲义 · 自然语言处理
在掌握了神经网络的基本原理后,我们面临一个核心问题:如何将神经网络高效地应用于文本这类具有结构特点的数据?卷积神经网络(CNN)最初在计算机视觉领域大放异彩,其关键在于能够自动学习图像中从局部到全局的层次化特征。本节我们将深入剖析 CNN 的核心思想——卷积、池化与层次化特征学习,并探讨如何巧妙地将其迁移到自然语言处理任务中,例如文本分类和情感分析。理解 CNN 在 NLP 中的应用,是连接传统词袋模型与更复杂的序列模型(如 RNN)的重要桥梁。
💡 核心导读
- 深度学习的本质:深度网络(如 CNN)的强大之处不在于参数多,而在于其“深度”能够自动构建从底层到高层的层次化特征表示(Representation Learning)。
- CNN 的核心操作:通过卷积核(局部连接、权重共享)提取局部特征,再通过池化(如 Max Pooling)进行降采样和特征选择,保留最显著的信息。
- 从图像到文本的迁移:将文本视为“一维图像”,词向量作为像素,卷积核在句子长度方向滑动,捕捉 n-gram 级别的局部语义模式。
- CNN 在 NLP 中的优势:能够并行处理文本,高效捕捉局部上下文特征,在文本分类等任务上表现优异,为后续理解更复杂的序列模型(如 RNN 和 Transformer)奠定基础。
从全连接到局部:CNN 的诞生与核心思想
在深度神经网络中,一个常见的误解是模型的强大仅仅源于其庞大的参数量。我们可以设想构建一个非常“宽”但“浅”的网络(层数少,每层节点多),其参数总量同样巨大,但实验表明,这样的网络性能往往远不如一个“深”的网络,且更容易过拟合。
深度神经网络(Deep Neural Networks)的真正威力在于“深度”本身。这个“深度”意味着网络能够进行层次化的特征学习(Hierarchical Feature Learning)或表示学习(Representation Learning)。以 CNN 处理图像为例:
- 底层特征:最初的卷积层可能学习到检测边缘、角点、颜色斑块等基础模式。
- 中层特征:基于这些边缘和斑块,更高层的卷积层可以组合出更复杂的形状,如眼睛、轮子、纹理。
- 高层特征:更深层的网络则可能组合出整个物体部件或甚至整个物体的概念,如“猫的脸”、“汽车的车身”。
整个 CNN 的训练过程,就是通过调整网络中各层的权重,自动地选择和组合不同层次的特征,以最优的方式完成最终任务(如图像分类)。对于某些任务,底层特征更重要;对于另一些,可能是中层或高层特征的组合起决定性作用。这种自动构建和筛选特征的能力,使得 CNN 在特征工程复杂的领域(如图像、文本)取得了革命性成功。
CNN 的设计灵感部分来源于生物视觉系统。1981年诺贝尔生理学或医学奖授予了 David H. Hubel 和 Torsten N. Wiesel,表彰他们对视觉系统信息处理的研究。他们发现,视觉皮层中的神经元具有感受野(Receptive Field),只对视野中特定区域的特定模式(如特定方向的边缘)敏感,并且这些神经元也是分层组织的。CNN 中的卷积核正对应了这种对局部区域敏感的特性,而网络的深度结构则模仿了视觉通路的层次化处理过程。
CNN 的基本原理:卷积、池化与参数共享
卷积操作:从数学定义到直观理解
数学上,两个一维函数 和 的卷积定义为: 对于离散情况(如图像和文本):
一个直观的比喻是:在一条直线上做两步随机游走,第一步从原点出发、位移为 的概率密度为 ,第二步从当前位置再走一个位移 、密度为 。最终位置 是两段位移的有符号叠加 ;对所有能到达 的中间位置(即所有满足 的 组合)把概率密度相加,这正是 和 的卷积 。这里叠加的是一维有符号位移,不是平面上的欧氏距离——两段径向距离一般不能直接相加得到终点到原点的距离。
在 CNN 的语境下,我们通常不进行这种翻转操作,而是执行互相关(Cross-correlation),但习惯上仍称之为“卷积”。对于一个二维图像 和一个卷积核(或滤波器),其计算过程如下:
# 示例:一个简单的二维卷积(互相关)计算
import numpy as np
# 假设一个 5x5 的灰度图像(像素值 0-1)
image = np.array([
[1, 1, 0, 0, 2],
[0, 1, 1, 2, 0],
[0, 0, 1, 1, 1],
[2, 0, 0, 1, 0],
[1, 2, 1, 0, 1]
])
# 定义一个 3x3 的卷积核
kernel = np.array([
[1, 0, 1],
[0, 1, 0],
[1, 0, 1]
])
# 手动实现步长(stride)为1的卷积操作
def conv2d(image, kernel):
i_h, i_w = image.shape
k_h, k_w = kernel.shape
o_h = i_h - k_h + 1
o_w = i_w - k_w + 1
output = np.zeros((o_h, o_w))
for i in range(o_h):
for j in range(o_w):
region = image[i:i+k_h, j:j+k_w]
output[i, j] = np.sum(region * kernel) # 对应元素相乘后求和
return output
feature_map = conv2d(image, kernel)
print("原始图像:")
print(image)
print("\n3x3卷积核:")
print(kernel)
print("\n卷积后得到的特征图(feature map):")
print(feature_map)原始图像:
[[1 1 0 0 2]
[0 1 1 2 0]
[0 0 1 1 1]
[2 0 0 1 0]
[1 2 1 0 1]]
3x3卷积核:
[[1 0 1]
[0 1 0]
[1 0 1]]
卷积后得到的特征图(feature map):
[[3. 3. 6.]
[3. 5. 2.]
[3. 3. 5.]]卷积核像一个滑动窗口,遍历整个输入图像。每次滑动,计算窗口内图像像素与卷积核权重的内积,生成特征图中的一个值。这个值反映了该局部区域与卷积核所检测模式的匹配程度。
局部连接与权重共享:CNN 的两大关键特性
与传统全连接神经网络相比,CNN 引入了两个关键概念以大幅减少参数量并增强泛化能力:
- 局部连接(Local Connectivity):在卷积层中,每个神经元(即特征图上的一个点)只与输入数据的一个局部区域(即其感受野)相连,而不是与全部输入相连。这符合图像中相邻像素关联性更强的先验知识。
- 权重共享(Shared Weights):同一个卷积核在整个输入数据上滑动并重复使用。这意味着,无论卷积核滑动到哪个位置,其检测的都是同一种特征(如垂直边缘)。这极大地减少了需要学习的参数数量。
全连接 vs 局部连接(权重共享)示意图:
全连接:
输入 X0-X8 -> 每个隐藏层神经元 A 连接所有输入 (W0...W8)
权重矩阵 W 是稠密的 9xN。
局部连接(以1D为例,感受野大小为2):
输入: X0, X1, X2, X3, ...
隐藏层神经元 A0 连接 X0, X1 (权重 W0, W1)
隐藏层神经元 A1 连接 X1, X2 (权重 W0, W1) // 共享同一组权重
隐藏层神经元 A2 连接 X2, X3 (权重 W0, W1) // 共享同一组权重
...
权重矩阵 W 是稀疏的,且大量权重是重复的。在图像 CNN 中,卷积核是三维的(宽 x 高 x 输入通道数)。对于 RGB 图像(3通道),一个 5x5 的卷积核实际上是 5x5x3,它在所有三个通道上同时进行卷积操作,最后将三个通道的结果相加(并加上偏置),生成特征图上的一个标量值。
池化层:降采样与特征不变性
卷积层之后通常会接一个池化层(Pooling Layer),最常见的是最大池化(Max Pooling)。池化层的主要作用有:
- 降维(降低计算量):减少特征图的空间尺寸(宽度和高度)。
- 引入平移不变性:即使特征在输入中发生微小平移,池化后仍可能捕获到该特征。
- 防止过拟合:提供了一种温和的降采样形式。
最大池化的操作很简单:在特征图上定义一个窗口(如 2x2),取出窗口内的最大值作为输出。
# —— 重新构建上文用到的微型数据(本节各代码块相互独立,可单独运行)
import numpy as np
image = np.array([
[1, 1, 0, 0, 2],
[0, 1, 1, 2, 0],
[0, 0, 1, 1, 1],
[2, 0, 0, 1, 0],
[1, 2, 1, 0, 1]
])
kernel = np.array([
[1, 0, 1],
[0, 1, 0],
[1, 0, 1]
])
def conv2d(image, kernel):
i_h, i_w = image.shape
k_h, k_w = kernel.shape
o_h = i_h - k_h + 1
o_w = i_w - k_w + 1
output = np.zeros((o_h, o_w))
for i in range(o_h):
for j in range(o_w):
region = image[i:i+k_h, j:j+k_w]
output[i, j] = np.sum(region * kernel) # 对应元素相乘后求和
return output
feature_map = conv2d(image, kernel)
# 示例:最大池化操作
def max_pooling_2d(feature_map, pool_size=2, stride=2):
f_h, f_w = feature_map.shape
p_h = (f_h - pool_size) // stride + 1
p_w = (f_w - pool_size) // stride + 1
pooled = np.zeros((p_h, p_w))
for i in range(0, f_h - pool_size + 1, stride):
for j in range(0, f_w - pool_size + 1, stride):
region = feature_map[i:i+pool_size, j:j+pool_size]
pooled[i//stride, j//stride] = np.max(region)
return pooled
# 使用上一节卷积得到的特征图
pooled_map = max_pooling_2d(feature_map, pool_size=2, stride=2)
print("卷积特征图:")
print(feature_map)
print("\n经过 2x2 最大池化后的结果:")
print(pooled_map)卷积特征图:
[[3. 3. 6.]
[3. 5. 2.]
[3. 3. 5.]]
经过 2x2 最大池化后的结果:
[[5.]]为什么用最大池化而不是平均池化?考虑一个极端例子:在人脸识别中,嘴边的一颗痣是一个关键特征。在降采样时,如果取平均值,痣的特征会被周围皮肤的颜色“稀释”掉。而取最大值,则更有可能保留这个与众不同的显著特征。这类似于一些美图软件用均值滤波来平滑皮肤、去除瑕疵的原理。
经典 CNN 架构示例
一个典型的用于图像分类的 CNN 架构遵循“卷积 -> 激活 -> 池化”的重复模式,最后接上全连接层进行分类。例如 LeNet-5(1998年):
- 输入层(32x32 灰度图)
- C1: 卷积层(6个 5x5 卷积核) -> 特征图 (28x28x6)
- S2: 子采样层(2×2 非重叠:每个单元把四个输入先求和,乘以可训练系数、再加可训练偏置,结果经 sigmoid;并非普通 2×2 平均池化,现代变体常换成 2×2 最大池化) -> 特征图 (14x14x6)
- C3: 卷积层(16个 5x5 卷积核) -> 特征图 (10x10x16)
- S4: 子采样层(同 S2:可训练系数、可训练偏置加 sigmoid 的子采样;现代变体常用最大池化) -> 特征图 (5x5x16)
- C5: 全连接层(120个神经元)
- F6: 全连接层(84个神经元)
- OUTPUT: 输出层。原版 LeNet-5 采用 RBF 径向基单元(按类别模板计算距离),并非 Softmax;现代常见复现才在全连接层后接 Softmax 输出 10 个数字类别的概率。
随着数据和计算力的增长,更深的网络如 AlexNet, VGGNet, GoogLeNet (Inception), ResNet, DenseNet 等被提出,它们在 ImageNet 等竞赛中取得了突破性成果。这些网络的核心思想依然是层次化特征学习和卷积操作,但在深度、宽度、连接方式等方面进行了创新。
CNN 如何应用于自然语言处理
将 CNN 应用于 NLP 的关键在于重新定义“输入数据”和“局部区域”。
文本的“图像化”表示
- 词作为基本单元:在图像中,基本单元是像素;在文本中,基本单元是词(或子词)。我们无法对词的一部分进行卷积,因为“i”的一部分和“like”的一部分组合起来没有意义。因此,卷积核在词向量维度(通道方向)上的高度必须与词向量维度 对齐。
- 句子作为“一维图像”:一个句子可以表示为一个矩阵。假设句子有 个词,每个词用 维的词向量表示(通过 Word2Vec、GloVe 或随机初始化得到),那么这个句子就是一个 的矩阵。其中:
- 长度(n):句子的词数,对应图像的“宽度”。
- 通道/深度(d):词向量的维度,对应图像的“高度”或“通道数”。
一维卷积操作
在 NLP 中,我们通常使用一维卷积。卷积核的高度固定为 (与词向量维度一致),宽度(即卷积核大小) 是一个超参数,表示一次考虑多少个连续的词。
例如,对于一个 的句子矩阵,使用一个宽度为 、高度为 的卷积核进行卷积。这个卷积核在句子长度方向(即 的方向)上滑动,每次覆盖 个连续的词( 的区域)。卷积计算这 个词向量与卷积核权重的内积,并加上偏置,通过一个非线性激活函数(如 ReLU),生成一个标量值。
特征图长度由输入长度 、卷积核大小 、步长 (stride)和填充 (padding,两端补零的层数)共同决定: 以 、 为例:步长 1、无填充()时 ;步长 2、无填充时 ;步长 1、两端各补 1 层()时 。上面 的写法只是 、 的特例。
# 示例:模拟 NLP 中的一维卷积思想(使用伪代码说明)
import numpy as np
# 假设我们有 7 个词,每个词用 5 维向量表示(例如通过 Word2Vec 得到)
# 句子矩阵 shape: (7, 5)
sentence_matrix = np.random.randn(7, 5) # 随机初始化代替真实词向量
# 假设我们使用 3 个不同的卷积核,大小分别为 2, 3, 4(宽度),高度均为5(词向量维度)
kernel_sizes = [2, 3, 4]
num_filters_per_size = 2 # 每种尺寸的卷积核数量
# 伪代码流程(实际实现需使用深度学习框架如 PyTorch/TensorFlow):
# 1. 对于每个 kernel_size (k):
# - 初始化 num_filters_per_size 个形状为 (k, 5) 的卷积核权重。
# 2. 对于每个卷积核:
# - 在 sentence_matrix 上滑动(步长通常为1)。
# - 对每个覆盖的 kx5 窗口,计算卷积核与窗口的内积,加上偏置,通过 ReLU。
# - 得到一个长度为 (7 - k + 1) 的一维特征图。
# 3. 对每个特征图进行全局最大池化(Global Max Pooling over Time):
# - 取该特征图所有位置的最大值。这样,无论句子多长,每个卷积核只输出一个标量。
# - 这个标量代表该卷积核所检测的"特征"(如某种特定的二元组、三元组模式)在整个句子中的最强响应。
# 4. 将所有卷积核(本例共 3*2=6 个)的池化后标量连接起来,形成一个 6 维的句子特征向量。
# 5. 将这个句子特征向量输入全连接层,进行最终分类(如情感分析:正面/负面)。
print("句子矩阵形状(模拟):", sentence_matrix.shape)
print("卷积核配置:")
for ks in kernel_sizes:
print(f" 尺寸 {ks}x5 的卷积核,共 {num_filters_per_size} 个")
print("每个卷积核经过一维卷积和全局最大池化后,输出一个标量。")
print("最终句子表示维度:", len(kernel_sizes) * num_filters_per_size)句子矩阵形状(模拟): (7, 5)
卷积核配置:
尺寸 2x5 的卷积核,共 2 个
尺寸 3x5 的卷积核,共 2 个
尺寸 4x5 的卷积核,共 2 个
每个卷积核经过一维卷积和全局最大池化后,输出一个标量。
最终句子表示维度: 6多尺寸卷积核与特征组合
在图像中,卷积核大小通常是固定的(如 3x3, 5x5)。在文本 CNN 中,一个常见且有效的策略是使用多种不同宽度的卷积核(例如 2, 3, 4, 5)。这相当于同时考虑不同长度的 n-gram 特征:
- 宽度为 2 的卷积核:捕捉二元组(Bigram)级别的特征。
- 宽度为 3 的卷积核:捕捉三元组(Trigram)级别的特征。
- 宽度为 4 的卷积核:捕捉四元组级别的特征。
网络并不预先知道对于当前任务,是二元组、三元组还是四元组更重要。通过训练,网络会自动学习到不同尺寸卷积核的权重,从而自动选择出对分类最有帮助的 n-gram 特征组合。这比手工设计 n-gram 特征更加灵活和有效。
一个完整的文本 CNN 情感分析流程
以句子 “I love this movie very much !” 的情感分析(正面/负面)为例:
- 输入表示:将每个词转换为 维词向量。句子变为 矩阵。
- 卷积层:使用多组不同宽度(如 2, 3, 4)的卷积核进行卷积,每组包含多个卷积核以捕捉不同模式。每个卷积核产生一个特征图。
- 池化层:对每个特征图进行全局最大池化(取整个特征图的最大值)。这样,每个卷积核贡献一个最重要的特征值。这一步替代了图像中常用的固定尺寸池化,能处理可变长度的句子。
- 特征拼接:将所有卷积核池化后的特征值拼接成一个一维特征向量。
- 输出层:将拼接后的特征向量输入全连接层,最后通过 Softmax 输出正面和负面的概率。
通过这种方式,CNN 成功地将图像处理中的层次化特征学习思想迁移到了文本领域。它能够有效捕捉文本中的局部语义模式(n-gram),并且由于卷积和池化的特性,模型对词的位置变化具有一定的鲁棒性,计算效率也高于 RNN。
CNN vs. RNN 与未来展望
CNN 在 NLP 中的应用,尤其是在文本分类、情感分析、垃圾邮件检测等任务上,取得了非常出色的效果。其优势在于:
- 并行计算能力强:卷积操作可以高度并行化,训练速度快。
- 局部特征捕捉能力强:擅长捕捉短语级别的局部语义模式。
- 层次化特征:通过叠加卷积层,理论上可以捕捉更长的依赖关系(尽管不如 RNN 直接)。
然而,CNN 在处理长距离依赖和严格的序列顺序信息方面存在天然局限。卷积核的感受野有限,虽然深层网络可以扩大感受野,但捕捉长程依赖的效率不如专门为序列设计的循环神经网络(RNN)及其变体 LSTM 和 GRU。
值得注意的是,CNN 在 NLP 中的成功,以及后来 RNN 与注意力机制(Attention Mechanism)的结合,都为 Transformer 模型的诞生铺平了道路。Transformer 完全基于自注意力(Self-Attention)机制,能够高效地处理序列中任意两个位置的关系,同时具备 CNN 的并行计算优势。如今,基于 Transformer 的预训练大模型(如 BERT、GPT)已成为 NLP 的主流。
因此,学习 CNN 在 NLP 中的应用,不仅是为了掌握一种有效的文本建模工具,更是为了理解“如何为不同类型的数据设计合适的神经网络结构”这一核心思想,为我们后续学习更强大的序列模型奠定坚实的基础。
📝 动手练一练
- 概念辨析:全连接层、卷积层、池化层的主要区别是什么?请从连接方式、参数数量、功能三个方面进行简要对比。
👉 点击查看参考答案
- 全连接层:
- 连接方式:每个神经元与上一层的所有神经元相连。
- 参数数量:极其庞大(输入维度 x 输出维度),容易过拟合。
- 功能:进行全局的特征组合与变换,通常用于网络的最后几层进行分类或回归。
- 卷积层:
- 连接方式:局部连接(每个神经元只连接输入的一个小区域)且权重共享(同一卷积核在不同位置重复使用)。
- 参数数量:远少于全连接层,由卷积核大小、数量和输入通道数决定,与输入尺寸无关。
- 功能:自动提取输入数据的局部特征(如图像的边缘、纹理,文本的 n-gram 模式)。
- 池化层:
- 连接方式:对输入特征图的一个小区域进行下采样操作(如取最大值、平均值)。
- 参数数量:无需要训练的参数。
- 功能:降低特征图的空间尺寸,减少计算量;引入平移不变性;防止过拟合。
- 手算练习:假设有一个极短的句子“AB”,其中词“A”的词向量是
[1, 0, 1],词“B”的词向量是[0, 1, 1]。我们使用一个宽度为2(即 Bigram)、高度为3的卷积核W = [[0.5, 0, 0.5], [0, 1, 0]]和偏置b = 0.1进行卷积,激活函数为 ReLU(ReLU(x) = max(0, x))。请计算卷积后得到的特征值。
👉 点击查看参考答案
- 将句子矩阵化:句子矩阵
S为 2x3。
S = [ [1, 0, 1], # A
[0, 1, 1] ] # B- 卷积核
W形状为 2x3,覆盖整个句子(因为句子长度=卷积核宽度)。 - 计算内积(对应元素相乘后求和):
元素相乘:
S * W = [ [1*0.5, 0*0, 1*0.5],
[0*0, 1*1, 1*0] ]
= [ [0.5, 0, 0.5],
[0, 1, 0] ]
求和: 0.5 + 0 + 0.5 + 0 + 1 + 0 = 2.0- 加上偏置:
2.0 + 0.1 = 2.1 - 通过 ReLU 激活函数:
max(0, 2.1) = 2.1因此,卷积后得到的特征值为 2.1。
本章小结
本节我们深入探讨了卷积神经网络(CNN)的核心原理及其在自然语言处理中的创新应用。我们从深度网络的核心优势——层次化特征学习出发,理解了 CNN 如何通过卷积、池化等操作自动构建从局部到全局的特征表示。重点在于掌握如何将文本数据(句子)重新表述为类似图像的矩阵形式,从而利用一维卷积捕捉 n-gram 级别的局部语义特征。CNN 为 NLP 提供了一种高效、并行的文本建模方式,特别是在文本分类任务上表现出色,是连接传统词袋模型与复杂序列模型的重要一环。
📋 行动清单
- 在脑海中复述 CNN 的三大核心特性:局部连接、权重共享、池化,并理解它们如何共同作用以减少参数、提升效率。
- 尝试用纸笔或代码模拟一个简单句子(如“I like AI”)的词向量矩阵,并思考一个宽度为2的卷积核是如何在其上滑动并计算特征值的。
- 对比思考:CNN 处理文本和 RNN 处理文本的根本区别是什么?(提示:从对序列顺序的建模方式和计算并行性角度考虑)
—— 小象教研组