Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

6.4 用于 NLP 分类的前馈网络

下面介绍如何将前馈网络用于 NLP 分类。实践中,简单前馈网络并非文本分类的主流方案;真实应用通常使用第 9 章 BERT Transformer 等更复杂的架构。不过,前馈文本分类器可以引出后续全书都会用到的关键思想,包括嵌入矩阵、表示池化和表示学习。

在介绍这些思想之前,先只对第 4 章的情感分类器作最小改动:仍然提取人工特征、送入分类器并输出类别概率,只是用神经网络代替逻辑回归。

6.4.1 使用人工特征的神经网络分类器

从第 4 章相当于一层网络的逻辑回归分类器出发,增加一个隐藏层,就得到简单的两层情感分类器。输入元素 xix_i 可以是图 4.2 中的标量特征,例如 x1=count(文档中的词)x_1=\operatorname{count}(\text{文档中的词})x2=count(文档中的正面词典词)x_2=\operatorname{count}(\text{文档中的正面词典词})x3=1x_3=1 当 no 出现在文档中,等等,共 dd 个特征。

输出层 y^\hat{\mathbf y} 可以有两个节点(正面、负面),也可以有三个节点(正面、负面、中性)。三节点时,y^1,y^2,y^3\hat y_1,\hat y_2,\hat y_3 分别是三类情感的估计概率。方程就是前面所见的两层网络,其中仍以 σ\sigma 统指 sigmoid、ReLU 等任意非线性函数:

x=[x1,x2,,xd](每个 xi 都是人工设计特征)h=σ(Wx+b)z=Uhy^=softmax(z)(6.19)\begin{array}{ll}\mathbf x=[x_1,x_2,\ldots,x_d]&\text{(每个 $x_i$ 都是人工设计特征)}\\\mathbf h=\sigma(\mathbf W\mathbf x+\mathbf b)\\\mathbf z=\mathbf U\mathbf h\\\hat{\mathbf y}=\operatorname{softmax}(\mathbf z)\end{array}\tag{6.19}

图 6.10 使用输入文本传统人工特征的前馈网络情感分析。

给逻辑回归分类器增加隐藏层,使网络能表示特征之间的非线性交互,仅此一点就可能得到更好的情感分类器。

6.4.2 向量化以并行推理

式 6.19 只分类单个样本 xx,实际中要高效分类含 mm 个样本的完整测试集。与逻辑回归一样,可以向量化整个过程:不用循环逐个处理,而用矩阵乘法一次完成整个测试集的计算。

把各输入 xx 的所有特征向量装入输入矩阵 X\mathbf X,第 ii 行是样本 x(i)x^{(i)} 的特征行向量 x(i)\mathbf x^{(i)}。若输入特征向量维数为 dd,则 X\mathbf X 的形状为 [m×d][m\times d]

现在每个输入是行向量而非列向量,所以需要稍微修改式 6.19。X\mathbf X 的形状为 [m×d][m\times d]W\mathbf W[dh×d][d_h\times d];调整相乘顺序并转置 W\mathbf W,便得到形状为 [m×dh][m\times d_h]H\mathbf H

式 6.19 中形状为 [1×dh][1\times d_h] 的偏置向量 b\mathbf b 要复制为 [m×dh][m\times d_h] 的矩阵。下一步同样调整顺序并转置 U\mathbf U。最终输出矩阵 Y^\hat{\mathbf Y} 形状为 [m×3][m\times3],更一般地为 [m×do][m\times d_o],其中 dod_o 是输出类别数;第 ii 行就是输出向量 y^(i)\hat{\mathbf y}^{(i)}。整个测试集的输出类别分布为:

H=σ(XWT+b)Z=HUTY^=softmax(Z)(6.20)\begin{array}{rcl}\mathbf H&=&\sigma(\mathbf X\mathbf W^{\mathsf T}+\mathbf b)\\\mathbf Z&=&\mathbf H\mathbf U^{\mathsf T}\\\hat{\mathbf Y}&=&\operatorname{softmax}(\mathbf Z)\end{array}\tag{6.20}

本书有时会写 WX+b\mathbf W\mathbf X+\mathbf b,有时写 XW+b\mathbf X\mathbf W+\mathbf b。因此,阅读任何方程时都必须留意参与运算的权重矩阵形状。