如何规范化 BERT 分类器的输出
How to normalize output from BERT classifier
我使用 HuggingFace transformers.TFBertForSequenceClassification
分类器训练了 BERT 分类器。它工作正常,但是当使用 model.predict() 方法时,它给出一个元组作为输出,该元组未在 [0, 1] 之间标准化。例如。我训练模型将新闻文章分为欺诈和非欺诈类别。然后我将以下4个测试数据输入模型进行预测:
articles = ['He was involved in the insider trading scandal.',
'Johnny was a good boy. May his soul rest in peace',
'The fraudster stole money using debit card pin',
'Sun rises in the east']
输出是:
[[-2.8615277, 2.6811066],
[ 2.8651822, -2.564444 ],
[-2.8276567, 2.4451752],
[ 2.770451 , -2.3713884]]
对我来说,label-0 代表非欺诈,label-1 代表欺诈,所以效果很好。但是我如何从这里准备得分信心呢?在这种情况下使用 softmax 进行归一化是否有意义?另外,如果我想查看模型优柔寡断的那些预测,我该怎么做?在那种情况下,这两个值会非常接近吗?
是的。你可以使用 softmax。更准确地说,使用 argmax over softmax 来获得标签预测,如 0 或 1。
y_pred = tf.nn.softmax(model.predict(test_dataset))
y_pred_argmax = tf.math.argmax(y_pred, axis=1)
这个 blog 在我有同样的查询时对我很有帮助..
为了回答你的第二个问题,我会要求你关注你的分类模型错误分类了哪些测试实例,而不是试图找出模型优柔寡断的地方。
因为 argmax 总是 return 0 或 1 而不是 0.5。而且,我会说标签 0.5 将是声称您的模型优柔寡断的适当值..
我使用 HuggingFace transformers.TFBertForSequenceClassification
分类器训练了 BERT 分类器。它工作正常,但是当使用 model.predict() 方法时,它给出一个元组作为输出,该元组未在 [0, 1] 之间标准化。例如。我训练模型将新闻文章分为欺诈和非欺诈类别。然后我将以下4个测试数据输入模型进行预测:
articles = ['He was involved in the insider trading scandal.',
'Johnny was a good boy. May his soul rest in peace',
'The fraudster stole money using debit card pin',
'Sun rises in the east']
输出是:
[[-2.8615277, 2.6811066],
[ 2.8651822, -2.564444 ],
[-2.8276567, 2.4451752],
[ 2.770451 , -2.3713884]]
对我来说,label-0 代表非欺诈,label-1 代表欺诈,所以效果很好。但是我如何从这里准备得分信心呢?在这种情况下使用 softmax 进行归一化是否有意义?另外,如果我想查看模型优柔寡断的那些预测,我该怎么做?在那种情况下,这两个值会非常接近吗?
是的。你可以使用 softmax。更准确地说,使用 argmax over softmax 来获得标签预测,如 0 或 1。
y_pred = tf.nn.softmax(model.predict(test_dataset))
y_pred_argmax = tf.math.argmax(y_pred, axis=1)
这个 blog 在我有同样的查询时对我很有帮助..
为了回答你的第二个问题,我会要求你关注你的分类模型错误分类了哪些测试实例,而不是试图找出模型优柔寡断的地方。
因为 argmax 总是 return 0 或 1 而不是 0.5。而且,我会说标签 0.5 将是声称您的模型优柔寡断的适当值..