Nidutt
Nidutt

Reputation: 315

AttributeError: 'list' object has no attribute 'size' Hugging-Face transformers

I am trying to use Huggingface to transform stuff from English to Hindi. This is the code snippet

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

tokenizer = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-en-hi")

model = AutoModelForSeq2SeqLM.from_pretrained("Helsinki-NLP/opus-mt-en-hi")
text = "Hello my friends! How are you doing today?"
tokenized_text = tokenizer.prepare_seq2seq_batch([text])

# Perform translation and decode the output
translation = model.generate(**tokenized_text)
translated_text = tokenizer.batch_decode(translation, skip_special_tokens=True)[0]

# Print translated text
print(translated_text)

I am getting this error while trying to call the method generate on 'model'.

AttributeError: 'list' object has no attribute 'size'.

I am running on transformer version 4.3.3.

Upvotes: 6

Views: 13684

Answers (1)

cronoik
cronoik

Reputation: 19300

The model requires pytorch tensors and not a python list. Simply add return_tensors='pt' to prepare_seq2seq:

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

tokenizer = AutoTokenizer.from_pretrained("Helsinki-NLP/opus-mt-en-hi")

model = AutoModelForSeq2SeqLM.from_pretrained("Helsinki-NLP/opus-mt-en-hi")
text = "Hello my friends! How are you doing today?"
tokenized_text = tokenizer.prepare_seq2seq_batch([text], return_tensors='pt')

# Perform translation and decode the output
translation = model.generate(**tokenized_text)
translated_text = tokenizer.batch_decode(translation, skip_special_tokens=True)[0]

# Print translated text
print(translated_text)

Output:

आप आज कैसे कर रहे हैं?

Upvotes: 17

Related Questions