Nlp RuntimeError:张量a(546)的大小必须与张量b(512)在非单态维度1的大小相匹配

Nlp RuntimeError:张量a(546)的大小必须与张量b(512)在非单态维度1的大小相匹配,nlp,bert-language-model,huggingface-transformers,question-answering,Nlp,Bert Language Model,Huggingface Transformers,Question Answering,我正在使用BertforHung face transformers回答问题。我遇到张量大小的问题。 我已尝试使用BertConfig设置配置。但这并没有解决问题 这是我的密码 import torch from transformers import BertForQuestionAnswering from transformers import BertTokenizer, BertConfig import time #Model config = BertConfig(vocab_si

我正在使用BertforHung face transformers回答问题。我遇到张量大小的问题。 我已尝试使用BertConfig设置配置。但这并没有解决问题

这是我的密码

import torch
from transformers import BertForQuestionAnswering
from transformers import BertTokenizer, BertConfig
import time
#Model
config = BertConfig(vocab_size_or_config_json_file=32000, hidden_size=768,
      num_hidden_layers=12, num_attention_heads=12, intermediate_size=6072, 
      torchscript=True, max_position_embeddings=6144)
model_bert = BertForQuestionAnswering(config)
model_bert = model_bert.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')

#Tokenizer
tokenizer_bert = BertTokenizer.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
encoding = tokenizer_bert.encode_plus(text=question,text_pair=paragraph, add_special=True)
inputs = encoding['input_ids']  #Token embeddings
sentence_embedding = encoding['token_type_ids']  #Segment embeddings
tokens = tokenizer_bert.convert_ids_to_tokens(inputs) #input tokens

start_scores, end_scores = model_bert(input_ids=torch.tensor([inputs]), 
token_type_ids=torch.tensor([sentence_embedding]))

start_index = torch.argmax(start_scores)
end_index = torch.argmax(end_scores)

answer = ' '.join(tokens[start_index:end_index+1])
数据(问题和文本):

错误:

RuntimeError                              Traceback (most recent call 
last)
<ipython-input-5-48d08888656c> in <module>()
  6 tokens = tokenizer_bert.convert_ids_to_tokens(inputs) #input tokens
  7 
----> 8 start_scores, end_scores = model_bert(input_ids=torch.tensor([inputs]),token_type_ids=torch.tensor([sentence_embedding]))
  9 
 10 

/usr/local/lib/python3.6/dist-packages/transformers/modeling_bert.py in forward(self, input_ids, token_type_ids, position_ids, inputs_embeds)
199         token_type_embeddings = self.token_type_embeddings(token_type_ids)
200 
--> 201         embeddings = inputs_embeds + position_embeddings + token_type_embeddings
202         embeddings = self.LayerNorm(embeddings)
203         embeddings = self.dropout(embeddings)

RuntimeError: The size of tensor a (546) must match the size of tensor b (512) at non-singleton dimension 1
运行时错误回溯(最近的调用
最后)
在()
6令牌=令牌发生器。将令牌ID转换为令牌(输入)\输入令牌
7.
---->8开始分数,结束分数=模型分数(输入ID=火炬.张量([输入]),记号类型ID=火炬.张量([句子嵌入])
9
10
/usr/local/lib/python3.6/dist-packages/transformers/modeling\u bert.py in forward(self、input\u id、token\u type\u id、position\u id、input\u embeddes)
199令牌类型嵌入=自。令牌类型嵌入(令牌类型ID)
200
-->201嵌入=输入\嵌入+位置\嵌入+标记\类型\嵌入
202嵌入=自分层形式(嵌入)
203嵌入=自退出(嵌入)
RuntimeError:张量a(546)的大小必须与张量b(512)在非单态维度1的大小相匹配

我知道输入文本的大小大于默认设置张量大小512。但是我不知道如何手动设置值。

请发布完整的错误堆栈跟踪,并添加一个抛出错误的问题和段落的示例。您好,我已更新了问题。您现在可以检查一下,看看您是否可以帮助我将
从\u pretrained
覆盖您的配置(检查model.parameters以进行比较)。模型可以处理的最大输入序列长度为512。使用或检查其他型号。
RuntimeError                              Traceback (most recent call 
last)
<ipython-input-5-48d08888656c> in <module>()
  6 tokens = tokenizer_bert.convert_ids_to_tokens(inputs) #input tokens
  7 
----> 8 start_scores, end_scores = model_bert(input_ids=torch.tensor([inputs]),token_type_ids=torch.tensor([sentence_embedding]))
  9 
 10 

/usr/local/lib/python3.6/dist-packages/transformers/modeling_bert.py in forward(self, input_ids, token_type_ids, position_ids, inputs_embeds)
199         token_type_embeddings = self.token_type_embeddings(token_type_ids)
200 
--> 201         embeddings = inputs_embeds + position_embeddings + token_type_embeddings
202         embeddings = self.LayerNorm(embeddings)
203         embeddings = self.dropout(embeddings)

RuntimeError: The size of tensor a (546) must match the size of tensor b (512) at non-singleton dimension 1