6.4 用于 NLP 分类的前馈网络
下面介绍如何将前馈网络用于 NLP 分类。实践中,简单前馈网络并非文本分类的主流方案;真实应用通常使用第 9 章 BERT Transformer 等更复杂的架构。不过,前馈文本分类器可以引出后续全书都会用到的关键思想,包括嵌入矩阵、表示池化和表示学习。
在介绍这些思想之前,先只对第 4 章的情感分类器作最小改动:仍然提取人工特征、送入分类器并输出类别概率,只是用神经网络代替逻辑回归。
6.4.1 使用人工特征的神经网络分类器¶
从第 4 章相当于一层网络的逻辑回归分类器出发,增加一个隐藏层,就得到简单的两层情感分类器。输入元素 xi 可以是图 4.2 中的标量特征,例如 x1=count(文档中的词)、x2=count(文档中的正面词典词)、x3=1 当 no 出现在文档中,等等,共 d 个特征。
输出层 y^ 可以有两个节点(正面、负面),也可以有三个节点(正面、负面、中性)。三节点时,y^1,y^2,y^3 分别是三类情感的估计概率。方程就是前面所见的两层网络,其中仍以 σ 统指 sigmoid、ReLU 等任意非线性函数:
x=[x1,x2,…,xd]h=σ(Wx+b)z=Uhy^=softmax(z)(每个 xi 都是人工设计特征)(6.19) 
图 6.10 使用输入文本传统人工特征的前馈网络情感分析。
给逻辑回归分类器增加隐藏层,使网络能表示特征之间的非线性交互,仅此一点就可能得到更好的情感分类器。
6.4.2 向量化以并行推理¶
式 6.19 只分类单个样本 x,实际中要高效分类含 m 个样本的完整测试集。与逻辑回归一样,可以向量化整个过程:不用循环逐个处理,而用矩阵乘法一次完成整个测试集的计算。
把各输入 x 的所有特征向量装入输入矩阵 X,第 i 行是样本 x(i) 的特征行向量 x(i)。若输入特征向量维数为 d,则 X 的形状为 [m×d]。
现在每个输入是行向量而非列向量,所以需要稍微修改式 6.19。X 的形状为 [m×d],W 为 [dh×d];调整相乘顺序并转置 W,便得到形状为 [m×dh] 的 H。
式 6.19 中形状为 [1×dh] 的偏置向量 b 要复制为 [m×dh] 的矩阵。下一步同样调整顺序并转置 U。最终输出矩阵 Y^ 形状为 [m×3],更一般地为 [m×do],其中 do 是输出类别数;第 i 行就是输出向量 y^(i)。整个测试集的输出类别分布为:
HZY^===σ(XWT+b)HUTsoftmax(Z)(6.20) 本书有时会写 WX+b,有时写 XW+b。因此,阅读任何方程时都必须留意参与运算的权重矩阵形状。