Huggingface:如何在长文本分类中使用hugginface中的bert-large uncased



我试图使用bert large uncased作为长序列结束,但它给出了错误:

代码:

from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-large-uncased')
model = BertModel.from_pretrained("bert-large-uncased")
text = "Replace me by any text you'd like."*1024
encoded_input = tokenizer(text, truncation=True, max_length=1024, return_tensors='pt')
output = model(**encoded_input)

它给出了以下错误:

~/.local/lib/python3.6/site-packages/transformers/models/bert/modeling_bert.py in forward(self, input_ids, token_type_ids, position_ids, inputs_embeds, past_key_values_length)
218         if self.position_embedding_type == "absolute":
219             position_embeddings = self.position_embeddings(position_ids)
--> 220             embeddings += position_embeddings
221         embeddings = self.LayerNorm(embeddings)
222         embeddings = self.dropout(embeddings)
RuntimeError: The size of tensor a (1024) must match the size of tensor b (512) at non-singleton dimension 1

我还尝试更改位置嵌入的默认大小:

from transformers import BertTokenizer, BertModel
tokenizer = BertTokenizer.from_pretrained('bert-large-uncased')
model = BertModel.from_pretrained("bert-large-uncased")
model.config.max_position_embeddings = 1024
text = "Replace me by any text you'd like."*1024
encoded_input = tokenizer(text, truncation=True, max_length=1024, return_tensors='pt')
output = model(**encoded_input)

但错误仍然存在,如何对1024长度的序列使用大模型?

我可能错了,但我想你已经在这里找到了答案:如何使用Bert进行长文本分类?

基本上,你需要对你的文本进行某种截断,或者你需要把它分块处理,然后把它们粘在一起。

旁注:由于序列长度的原因,大型模型不称为大型。最大序列长度仍然是512个令牌。(来自令牌生成器的令牌,而不是句子中的单词(

编辑:

您想要使用的预训练模型在最多512个令牌上进行训练。当您从huggingface下载它时,您可以在配置中看到max_position_embeddings,即512。这意味着你不能真的对此进行扩展。(事实并非如此(


但是,您可以随时调整您的配置。

tokenizer = BertTokenizer.from_pretrained('bert-large-uncased')
model = BertModel.from_pretrained(
'bert-large-uncased',
max_position_embeddings=1024,
ignore_mismatched_sizes=True
)

注意,这是非常不明智的,因为它会破坏你预先训练的模型。也许它会变成红色,行星开始碰撞,或者猪开始从天空中掉下来。没有人真的能说出来。使用它的风险自负。

最新更新