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

如何通过HuggingFace文本分类pipeline获取模型logits?

获取Hugging Face Pipeline输出中的Logits

针对你使用distilbert-base-uncased-finetuned-sst-2-english模型,通过Pipeline执行推理时无法获取logits的问题,有两种可行方案,其中无需自定义Pipeline的方式是最简方案,具体如下:

方案一:直接复用Pipeline加载的模型与Tokenizer(最简)

Pipeline本质上帮你封装了模型和Tokenizer的加载流程,你可以直接调用其内置的model和tokenizer属性,沿用你之前获取logits的逻辑:

from transformers import pipeline
import torch

# 创建文本分类Pipeline
classifier = pipeline("text-classification", model="distilbert-base-uncased-finetuned-sst-2-english")

# 测试文本
texts = ["this is the first sentence", "of my data.", "In fact, thats not true,", "but we are going to assume it", "is"]

# 用Pipeline的Tokenizer处理文本(自动适配模型的padding/truncation规则)
tokenized_test = classifier.tokenizer(
    texts,
    padding=True,
    truncation=True,
    return_tensors="pt"
)

# 获取logits
with torch.no_grad():
    logits = classifier.model(**tokenized_test).logits

# 输出结果
print(logits)

这种方式完全复用Pipeline的配置,省去了手动加载模型和Tokenizer的步骤,同时直接得到原始logits,是最快捷的实现方式。

方案二:自定义Pipeline(适合需长期返回logits的场景)

如果需要每次调用Pipeline时都自动返回logits(而非单独编写获取逻辑),可以自定义Pipeline类,重写后处理方法来添加logits字段:

from transformers import TextClassificationPipeline
from transformers.pipelines.text_classification import AggregationStrategy

class LogitsTextClassificationPipeline(TextClassificationPipeline):
    def _postprocess(self, model_outputs, function_to_apply=None, return_all_scores=False, aggregation_strategy=AggregationStrategy.NONE):
        # 保留原始logits
        logits = model_outputs["logits"]
        # 调用父类的默认后处理逻辑,得到label和score
        results = super()._postprocess(model_outputs, function_to_apply, return_all_scores, aggregation_strategy)
        # 为每个结果添加logits字段
        for idx, result in enumerate(results):
            result["logits"] = logits[idx].tolist()
        return results

# 创建自定义Pipeline
classifier = LogitsTextClassificationPipeline(model="distilbert-base-uncased-finetuned-sst-2-english")

# 推理并获取包含logits的输出
outputs = classifier(texts)
for item in outputs:
    print(item)

执行后,每个输出项会同时包含label、score和logits三个字段,适合需要将logits作为固定输出的长期使用场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 05:35:39