【发布时间】:2021-08-18 14:43:39
【问题描述】:
我正在使用 Transformer 的 RobBERT(RoBERTa 的荷兰语版本)进行序列分类 - 已针对荷兰书评数据集进行情感分析训练。
我想测试它在类似数据集(也包括情感分析)上的工作情况,因此我为一组文本片段制作了注释并检查了它的准确性。当我检查什么样的句子被错误分类时,我注意到一个独特句子的输出在很大程度上取决于我在标记时给出的填充长度。请参阅下面的代码。
from transformers import RobertaTokenizer, RobertaForSequenceClassification
import torch.nn.functional as F
import torch
model = RobertaForSequenceClassification.from_pretrained("pdelobelle/robBERT-dutch-books", num_labels=2)
tokenizer = RobertaTokenizer.from_pretrained("pdelobelle/robBERT-dutch-books", do_lower_case=True)
sent = 'De samenwerking gaat de laatste tijd beter'
max_seq_len = 64
test_token = tokenizer(sent,
max_length = max_seq_len,
padding = 'max_length',
truncation = True,
return_tensors = 'pt'
)
out = model(test_token['input_ids'],test_token['attention_mask'])
probs = F.softmax(out[0], dim=1).detach().numpy()
对于给定的示例文本,用英文翻译为“最近合作一直在改进”,根据 max_seq_len,分类的输出存在巨大差异。即,对于max_seq_len = 64,probs 的输出为:
[[0.99149346 0.00850648]]
而对于max_seq_len = 9,是包含 cls 标记的实际长度:
[[0.00494814 0.9950519]]
谁能解释为什么会发生这种巨大的分类差异?我认为注意掩码确保在输出中没有差异,因为填充到最大序列长度。
【问题讨论】:
标签: sentiment-analysis bert-language-model huggingface-transformers huggingface-tokenizers