Tha*_*oob 3 python nlp text-classification pytorch huggingface-transformers
作为“自然语言处理”场景的新手,我正在实验学习并实现了以下代码段:
from transformers import RobertaTokenizer, RobertaForSequenceClassification
import torch
path = "D:/LM/rb/"
tokenizer = RobertaTokenizer.from_pretrained(path)
model = RobertaForSequenceClassification.from_pretrained(path)
inputs = tokenizer("Hello, my dog is cute", return_tensors="pt")
outputs = model(**inputs)
pred_logits = outputs.logits
print(pred_logits)
probs = pred_logits.softmax(dim=-1).detach().cpu().flatten().numpy().tolist()
print(probs)
Run Code Online (Sandbox Code Playgroud)
据我所知,应用模型会返回一个“torch.FloatTensor包含取决于配置(RobertaConfig)和输入的各种元素”,并且可以使用 访问 logits .logits。如所示,我已将.softmax函数应用于张量以返回归一化概率并将结果转换为列表。我输出以下内容:
[0.5022980570793152, 0.49770188331604004]
Run Code Online (Sandbox Code Playgroud)
这些概率是否代表某种总体“掩盖”概率?
第一个和第二个索引在输入上下文中代表什么?
编辑:
model.num_labels
Run Code Online (Sandbox Code Playgroud)
输出:
2
Run Code Online (Sandbox Code Playgroud)
@cronoik解释说该模型“尝试对序列是否属于一个类或另一个类进行分类”
我是否可以假设因为没有经过训练的输出层,这些类还没有任何意义?
例如,我可以假设该句子经过分析后属于类别 1 的概率为 0.5。然而,什么是1级呢?
此外,具有预先训练的输出层的模型卡(例如开放式人工智能检测器)有助于区分“真实”和“假”,因此我可以假设句子所属的类别。但是,如果没有某种类型的“mapping.txt”文件,如何确认这些“标签”?
您已经初始化了一个RobertaForSequenceClassification模型,默认情况下(在没有经过训练的序列分类输出层的情况下roberta-base)roberta-large尝试对序列是否属于一个类或另一个类进行分类。我使用了“属于一个类或另一个类”这样的表达方式,因为这些类还没有任何意义。输出层未经训练,需要进行微调才能赋予这些类含义。Class 0可能是X并且Class 1可能是Y或者相反。例如,针对 IMDb 评论数据集微调序列分类模型的教程将负面评论定义为,Class 0正面评论定义为Class 1(链接)。
您可以通过以下方式检查支持的类的数量:
model.num_labels
Run Code Online (Sandbox Code Playgroud)
输出:
2
Run Code Online (Sandbox Code Playgroud)
您得到的输出是每个类的非标准化概率(即logits)。您应用了 softmax 函数对这些概率进行归一化,这导致第一类概率为 0.5022980570793152,第二类概率为 0.49770188331604004。
也许您会感到困惑,因为这些值彼此接近。让我们尝试一个带有预训练输出层的模型(模型卡):
2
Run Code Online (Sandbox Code Playgroud)
输出:
3
[[0.0015561950858682394, 0.019568447023630142, 0.9788752794265747]]
Run Code Online (Sandbox Code Playgroud)
这些值表示句子Hello, my dog is cute为negative、neutral或 的概率positive。我们知道这些类是什么,因为作者提供了澄清它的映射。如果模型的作者没有提供这样的映射(通过自述文件或原始训练代码),我们只能通过使用随机样本进行测试来猜测每个类代表什么。
您提到的模型卡没有提供有关类到它们所代表的内容的映射的任何有用信息,但模型是由 Huggingface 本身提供的,并且它们提供了用于训练模型的代码的链接。dataset.py表示由和表示。fakeClass 0realClass 1