句子分类相关技术及评估指标详解
立即解锁
发布时间: 2025-09-03 01:50:09 阅读量: 7 订阅数: 11 AIGC 

### 句子分类相关技术及评估指标详解
#### 1. 梯度消失问题与反向传播
在嵌套函数调用的过程中,信息传递就像玩“传话游戏”一样,直到消息到达最内层的函数。由于消息需要经过许多层,到最后它会变得非常微弱和模糊(或者由于某些误解而变得非常强烈和扭曲),导致内层函数很难弄清楚自己哪里做错了。在深度学习领域,这被称为梯度消失问题。
梯度是一个数学术语,对应于每个函数从下一个函数接收到的消息信号,该信号表明它们应该如何改进其处理过程(如何更改其魔法常量)。从最终函数(即损失函数)向后传递消息的反向“传话游戏”被称为反向传播。简单循环神经网络(RNN)由于梯度消失问题,很难进行训练,如今在实际应用中很少使用。
#### 2. 长短期记忆网络(LSTM)
前面提到的嵌套函数处理语法信息的方式似乎效率很低。为什么最外层的函数(如判断句子是否符合语法的函数)不能直接告诉负责的特定函数(如处理主要主语的函数)哪里出了问题,而要进行“传话游戏”呢?这是因为每次函数调用后,由于某些因素(如文中的w2和f()),消息的形式会完全改变,最外层函数仅从最终输出无法判断哪个函数对消息的哪部分负责。
为了解决这种低效问题,可以考虑在处理句子的每个步骤中,添加和减去与正在处理的句子部分相关的信息,而不是每次都通过激活函数传递信息并完全改变其形状。例如,如果处理主要主语的函数可以直接将关于主语的信息添加到某种“记忆”中,并且网络可以确保该记忆完整地通过中间函数,那么判断句子是否符合语法的函数就能更轻松地告诉之前的函数如何调整其输出。
长短期记忆单元(LSTM)就是基于这种思路提出的一种RNN单元。LSTM单元共享一个“记忆”,每个单元可以从中删除旧信息和/或添加新信息,就像制造工厂中的装配线一样。LSTM RNN使用以下函数来更新状态:
```python
def update_lstm(state, word):
cell_state, hidden_state = state
cell_state *= forget(hidden_state, word)
cell_state += add(hidden_state, word)
hidden_state = update_hidden(hidden_state, cell_state, word)
return (cell_state, hidden_state)
```
LSTM状态由两部分组成:单元状态(“记忆”部分)和隐藏状态(“心理表征”部分)。函数`forget()`返回一个介于0和1之间的值,乘以这个数意味着从单元状态中擦除旧记忆,擦除的程度由隐藏状态和输入词决定。通过乘以介于0和1之间的值来控制信息流动的方式称为门控,LSTM是第一个使用这种门控机制的RNN架构。函数`add()`返回添加到记忆中的新值,该值同样由隐藏状态和输入词决定。最后,隐藏状态使用一个函数进行更新,该函数的值由先前的隐藏状态、更新后的记忆和输入词计算得出。
由于LSTM具有在不同时间步保持不变的单元状态(除非被明确修改),因此它们更容易训练,并且表现相对良好。因为有共享的“记忆”,并且函数在添加和删除与输入句子不同部分相关的信息,所以更容易确定哪个函数做了什么以及哪里出了问题,最外层函数的错误信号可以更直接到达负责的函数。
#### 3. 门控循环单元(GRU)
另一种RNN架构——门控循环单元(GRU)也使用了门控机制。GRU背后的理念与LSTM类似,但GRU只使用一组状态,而不是像LSTM那样分为两部分。GRU的更新函数如下:
```python
def update_gru(state, word):
new_state = update_hidden(state, word)
switch = get_switch(state, word)
state = switch * new_state + (1 - switch) * state
return state
```
GRU不进行记忆的擦除或更新,而是使用一种切换机制。单元首先根据旧状态和输入计算新状态,然后计算一个介于0和1之间的值switch。根据该值在新状态和旧状态之间选择最终状态:如果值为0,旧状态完整通过;如果值为1,旧状态被新状态覆盖;如果值介于两者之间,最终状态将是两者的混合。
GRU的更新函数比LSTM简单,需要训练的参数(魔法常量)更少,因此训练速度比LSTM快。目前,对于所有应用来说,社区中并没有就哪种RNN架构(LSTM还是GRU)是最好的达成共识,通常需要将它们作为超参数进行不同配置的实验。幸运的是,只要使用现代深度学习框架(如PyTorch和TensorFlow),就很容易对不同类型的RNN单元进行实验。
#### 4. 评估指标
在进行句子分类任务时,需要一些评估指标来衡量模型的性能。
- **准确率(Accuracy)**:准确率可能是这里讨论的所有评估指标中最简单的一个。在分类任务中,准确率是模型正确预测的实例比例。例如,如果有10封电子邮件,你的垃圾邮件过滤模型正确分类了8封,那么预测的准确率就是0.8,即80%。然而,准确率也有其局限性,当测试集不平衡时,准确率可能会产生误导。例如,一个垃圾邮件过滤数据集可能包含90%的非垃圾邮件和10%的垃圾邮件,在这种情况下,一个将所有邮件都标记为非垃圾邮件的“愚蠢”分类器也能达到90%的准确率。因此,在使用准确率作为指标时,最好将其与假设的“愚蠢”分类器(多数投票)作为基线进行比较。
- **精确率(Precision)和召回率(Recall)**:精确率、召回率和F值常用于二分类任务。二分类任务的目标是从另一个类别(负类)中识别出一个类别(正类)。在垃圾邮件过滤场景中,正类是垃圾邮件,负类是非垃圾邮件。
|分类情况|含义|
| ---- | ---- |
|真正例(True Positives,TP)|被预测为正类且实际属于正类的实例|
|假正例(False Positives,FP)|被预测为正类但实际不属于正类的实例,即预测中的噪声|
|假反例(False Negatives,FN)|被预测为负类但实际属于正类的实例,如漏过的垃圾邮件|
|真反例(True Negatives,TN)|被预测为负类且实际属于负类的实例|
精确率是模型分类为正类的实例中真正正确的比例。例如,如果你的垃圾邮件过滤器识别出三封邮件为垃圾邮件,其中两封确实是垃圾邮件,那么精确率就是2/3,约为66%。召回率与精确率相反,是数据集中正类实例被模型识别为正类的比例。例如,如果数据集中有三封垃圾邮件,你的模型成功识别出两封,那么召回率就是2/3,约为66%。计算公式如下:
- 精确率:$Precision = \frac{TP}{TP + FP}$
- 召回率:$Recall = \frac{TP}{TP + FN}$
- 准确率:$Accuracy = \frac{TP + TN}{TP + FP + FN + TN}$
- **
0
0
复制全文
相关推荐










