You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取LayoutLM推理中单个预测的置信度得分(百分比格式)

解决LayoutLMv2推理时获取单预测标签置信度的问题

你当前代码输出的是每个token对应的全标签概率分布,要获取对应预测标签的置信度(即模型对该预测标签的置信概率),需要根据预测的标签ID,从概率分布中提取对应位置的数值,再转换为百分比格式。

修改后的代码

import itertools
import numpy as np
import torch

# 沿用原代码的前半部分逻辑
logits = outputs.logits

predictions = logits.argmax(-1).squeeze().tolist()
token_boxes = encoding.bbox.squeeze().tolist()
# 对logits做softmax得到每个位置的全标签概率分布
probabilities = torch.nn.functional.softmax(logits, dim=-1).squeeze().tolist()

# 处理单样本的维度对齐
if len(token_boxes) == 512:
    predictions = [predictions]
    token_boxes = [token_boxes]
    probabilities = [probabilities]

# 展平列表
predictions = list(itertools.chain(*predictions))
token_boxes = list(itertools.chain(*token_boxes))
probabilities = list(itertools.chain(*probabilities))

# 过滤subword token
is_subword = np.array(offset_mapping.squeeze().tolist())[:,0] != 0
true_predictions = [self.id2label[pred] for idx, pred in enumerate(predictions) if not is_subword[idx]]
true_boxes = [box for idx, box in enumerate(token_boxes) if not is_subword[idx]]
# 关键修改:根据预测标签ID提取对应概率,转百分比格式(保留两位小数)
true_confidences = [
    round(probabilities[idx][pred] * 100, 2) 
    for idx, pred in enumerate(predictions) 
    if not is_subword[idx]
]

# 输出结果
for prediction, box, confidence in zip(true_predictions, true_boxes, true_confidences):
    print(f"标签: {prediction}, 位置框: {box}, 置信度: {confidence}%")

核心修改说明

  1. 精准提取目标概率:通过probabilities[idx][pred]直接获取当前预测标签(pred为该位置的预测标签ID)对应的概率值,而非保留全标签概率分布。
  2. 格式转换:将概率值乘以100并保留两位小数,转换为直观的百分比置信度。
  3. 命名优化:将变量名改为true_confidences,更贴合实际含义。

运行后会得到类似如下的清晰输出:

标签: O, 位置框: [10, 20, 50, 30], 置信度: 99.28%
标签: B-QUESTION, 位置框: [60, 20, 120, 30], 置信度: 87.56%

内容的提问来源于stack exchange,提问作者galex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 09:32:44