神经网络与神经语言模型:从基础到应用
立即解锁
发布时间: 2025-09-04 00:39:12 阅读量: 10 订阅数: 27 AIGC 


自然语言处理入门
### 神经网络与神经语言模型:从基础到应用
#### 1. 偏置单元的替换
在描述网络时,我们常使用一种简化符号,它无需显式提及偏置节点 $b$ 就能表示相同的函数。具体做法是,为每一层添加一个虚拟节点 $a_0$,其值始终为 1。例如,输入层(第 0 层)有虚拟节点 $a_0^{[0]} = 1$,第 1 层有 $a_0^{[1]} = 1$,依此类推。这个虚拟节点有对应的权重,该权重就代表偏置值 $b$。
原本的方程如 $h = \sigma(Wx + b)$,现在可写成 $h = \sigma(Wx)$。不过,向量 $x$ 原本有 $n_0$ 个值 $x = [x_1, \cdots, x_{n_0}]$,现在会有 $n_0 + 1$ 个值,新增的第 0 个虚拟值 $x_0 = 1$,即 $x = [x_0, \cdots, x_{n_0}]$。计算每个 $h_j$ 的方式也从 $h_j = \sigma(\sum_{i = 1}^{n_0} W_{ji}x_i + b_j)$ 变为 $h_j = \sigma(\sum_{i = 0}^{n_0} W_{ji}x_i)$,其中 $W_{j0}$ 替代了原来的 $b_j$。
下面通过表格对比两种表示方式:
| 表示方式 | 方程形式 | 向量维度 | 计算 $h_j$ 方式 |
| ---- | ---- | ---- | ---- |
| 原始表示 | $h = \sigma(Wx + b)$ | $x$ 有 $n_0$ 个值 | $h_j = \sigma(\sum_{i = 1}^{n_0} W_{ji}x_i + b_j)$ |
| 简化表示 | $h = \sigma(Wx)$ | $x$ 有 $n_0 + 1$ 个值,$x_0 = 1$ | $h_j = \sigma(\sum_{i = 0}^{n_0} W_{ji}x_i)$ |
#### 2. 用于自然语言处理的前馈网络:分类
##### 2.1 简单的 2 层情感分类器
我们可以从第 5 章的逻辑回归分类器(对应 1 层网络)入手,添加一个隐藏层,构建一个简单的 2 层情感分类器。输入元素 $x_i$ 可以是标量特征,例如 $x_1$ 是文档中的单词计数,$x_2$ 是文档中积极词汇的计数,$x_3$ 表示文档中是否包含“no”等。输出层 $\hat{y}$ 可以有 2 个节点(分别对应积极和消极),也可以有 3 个节点(积极、消极、中性)。此时,$\hat{y}_1$ 是积极情感的估计概率,$\hat{y}_2$ 是消极情感的概率,$\hat{y}_3$ 是中性情感的概率。相关方程如下:
$x = [x_1, x_2, \cdots, x_N]$(每个 $x_i$ 是手动设计的特征)
$h = \sigma(Wx + b)$
$z = Uh$
$\hat{y} = \text{softmax}(z)$
这个架构的流程可以用 mermaid 流程图表示:
```mermaid
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([输入特征 x]):::startend --> B(计算 h = σ(Wx + b)):::process
B --> C(计算 z = Uh):::process
C --> D(计算 ŷ = softmax(z)):::process
D --> E([输出分类结果 ŷ]):::startend
```
添加隐藏层使网络能够表示特征之间的非线性交互,可能会得到更好的情感分类器。
##### 2.2 使用词嵌入的分类方法
大多数自然语言处理中的神经网络应用并非使用手动设计的特征作为分类器的输入,而是利用深度学习从数据中学习特征的能力,将单词表示为嵌入,如 word2vec 或 GloVe 嵌入。
对于分类任务的输入表示,一种简单的基线方法是对输入中所有单词的嵌入应用某种池化函数。例如,对于有 $n$ 个输入单词 $w_1, \cdots, w_n$ 的文本,可将 $n$ 个嵌入 $e(w_1), \cdots, e(w_n)$(每个维度为 $d$)通过求和或求均值(求和后除以 $n$)的方式转换为一个维度同样为 $d$ 的单一嵌入:
$x_{mean} = \frac{1}{n} \sum_{i = 1}^{n} e(w_i)$
假设使用均值池化,分类器的方程如下:
$x = \text{mean}(e(w_1), e(w_2), \cdots, e(w_n))$
$h = \sigma(Wx + b)$
$z = Uh$
$\hat{y} = \text{softmax}(z)$
在实际应用中,我们要对整个测试集的 $m$ 个示例进行高效分类。首先将每个输入 $x$ 的输入特征向量打包成一个输入矩阵 $X$,若池化后的输入嵌入维度为 $d$,则 $X$ 是形状为 $[m \times d]$ 的矩阵。然后对上述方程进行修改:
$H = \sigma(XW^T + b)$
$Z = HU^T$
$\hat{Y} =
0
0
复制全文