Search code examples
python-3.xnlphuggingface-transformers

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.


Solution

  • 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:

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