【问题标题】:Bert using transformer's pipeline and encode_plus functionBert 使用 Transformer 的管道和 encode_plus 函数
【发布时间】:2021-09-29 01:42:07
【问题描述】:

当我使用时:

modelname = 'deepset/bert-base-cased-squad2'
model = BertForQuestionAnswering.from_pretrained(modelname)
tokenizer = AutoTokenizer.from_pretrained(modelname)
nlp = pipeline('question-answering', model=model, tokenizer=tokenizer)

result = nlp({'question': question,'context': context}) 

它不会崩溃。但是,当我使用 encode_plus() 时:

modelname = 'deepset/bert-base-cased-squad2'
model = BertForQuestionAnswering.from_pretrained(modelname)
tokenizer = AutoTokenizer.from_pretrained(modelname)

inputs= tokenizer.encode_plus(question,context,return_tensors='pt') 

我有这个错误:
张量 a (629) 的大小必须与非单维 1 处的张量 b (512) 的大小相匹配

我理解,但为什么我在第一种情况下没有相同的错误?有人能解释一下区别吗?

【问题讨论】:

标签: python nlp bert-language-model huggingface-transformers question-answering


【解决方案1】:

第二个代码出错的原因是输入数据不适合pytorch张量。为此,您必须在调用标记器时将截断标志设置为 True。因此,当不适合张量的数据到达时,它只需要适合的量。即:

tokenizer = AutoTokenizer.from_pretrained('deepset/bert-base-cased-squad2',truncation= True )

使用流水线时没有问题,可能是因为流水线中使用的预训练模型的开发者默认应用了这个过程。

【讨论】:

  • 非常感谢您的解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 2018-01-08
相关资源
最近更新 更多