文本分类的评估指标

使用 PyTorch 的文本深度学习

Shubham Jain

Instructor

为何评估指标重要

书评焦点

  • 设想一个判断书评情感的模型
  • 模型称一部畅销书评价很差。应采信吗?
  • 使用评估指标

书评

使用 PyTorch 的文本深度学习

评估 RNN 模型

# Initialize model, criterion, and optimizer
rnn_model = RNNModel(input_size, hidden_size, num_layers, num_classes)
...
# Model training
for epoch in range(10): 
    outputs = rnn_model(X_train)
    ...
    print(f'Epoch: {epoch+1}, Loss: {loss.item()}')

outputs = rnn_model(X_test) _, predicted = torch.max(outputs, 1)
使用 PyTorch 的文本深度学习

准确率

  • 正确预测数与总预测数之比
from torchmetrics import Accuracy

actual = torch.tensor([0, 1, 1, 0, 1, 0]) predicted = torch.tensor([0, 0, 1, 0, 1, 1])
accuracy = Accuracy(task="binary", num_classes=2)
acc = accuracy(predicted, actual) print(f"Accuracy: {acc}")
Accuracy: 0.6666666666666666
使用 PyTorch 的文本深度学习

不止于准确率

  • 10,000 条评论:9,800 条为正面
    • 若模型始终预测为正面:准确率 98%
      • 但未能识别负面评论

 

  • 精确率:将评论判为负面的把握度
  • 召回率:识别负面评论的能力
  • F1:精确率与召回率的平衡
使用 PyTorch 的文本深度学习

精确率与召回率

  • 精确率:正确预测为正类的数量 / 预测为正类的总数
  • 召回率:正确预测为正类的数量 / 正类样本的总数
from torchmetrics import Precision, Recall

precision = Precision(task="binary", num_classes=2) recall = Recall(task="binary", num_classes=2)
prec = precision(predicted, actual) rec = recall(predicted, actual)
print(f"Precision: {prec}") print(f"Recall: {rec}")
Precision: 0.6666666666666666
Recall: 0.5
使用 PyTorch 的文本深度学习

精确率与召回率

Precision: 0.6666666666666666
Recall: 0.5
  • 精确率:66.66% 被正确判为正类
  • 召回率:捕获了50%的正类
使用 PyTorch 的文本深度学习

F1 分数

  • 综合精确率与召回率
  • 适合类不平衡时评估
from torchmetrics import F1Score
f1 = F1Score(task="binary", num_classes=2)
f1_score = f1(predicted, actual)
print(f"F1 Score: {f1_score}")
F1 Score: 0.5714285714285715
  • F1=1:精确率与召回率皆完美
  • F1=0:最差表现
使用 PyTorch 的文本深度学习

注意事项

  • 多类分数可能相同

    • 可能表示模型表现良好
  • 解读结果时务必结合任务情境

使用 PyTorch 的文本深度学习

¡Vamos a practicar!

使用 PyTorch 的文本深度学习

Preparing Video For Download...