0
respostas

Tentando treinar o T5 no tensorflow

Boa tarde, tudo bem?

Estou tentando adaptar um notebook do tensorflow para usar o modelo T-5 (https://colab.research.google.com/github/snapthat/TF-T5-text-to-text/blob/master/snapthatT5/notebooks/TF-T5-Datasets%20Training.ipynb).

Nesse notebook, usa-se a base de dados "squad", nativa do tensorflow. Mas eu gostaria de usar a base de dados "codeparrot/apps" (https://huggingface.co/datasets/codeparrot/apps).

O notebook original funciona, mas eu não consigo adaptar o código, já que o squad possui alguma chamada de decode automática, mas a minha base de dados não.

Esse é o código que funciona:

### Defining the data pipeline

def encode(question,answer, 
           encoder_max_len=encoder_max_len, decoder_max_len=decoder_max_len):
    question_plus = f"answer_me: {str(question.numpy().decode('utf-8'))}"

    answer_plus = ', '.join([i.decode('utf-8') for i in list(answer.numpy())])
    answer_plus = f"{answer_plus} </s>"

    encoder_inputs = tokenizer(question_plus, truncation=True, 
                               return_tensors='tf', max_length=encoder_max_len,
                              pad_to_max_length=True)

    decoder_inputs = tokenizer(answer_plus, truncation=True, 
                               return_tensors='tf', max_length=decoder_max_len,
                              pad_to_max_length=True)

    input_ids = encoder_inputs['input_ids'][0]
    input_attention = encoder_inputs['attention_mask'][0]
    target_ids = decoder_inputs['input_ids'][0]
    target_attention = decoder_inputs['attention_mask'][0]

    return input_ids,input_attention, target_ids, target_attention

Esse é o meu código. Já tentei fazer várias coisas, mas nenhuma funcionou. A idéia seria substituir o ".decode" to código acima, já que recebo o erro dizendo que tensores com int32 não tem o "decode":


from datasets import load_dataset, Dataset

train_dataset = load_dataset("codeparrot/apps", "all", split="train")
valid_dataset = load_dataset("codeparrot/apps", "all", split="test")

train_dataset = train_dataset.remove_columns(['problem_id', 'starter_code', 'url', 'input_output', 'difficulty'])
valid_dataset = valid_dataset.remove_columns(['problem_id', 'starter_code', 'url', 'input_output', 'difficulty'])

train_dataset = train_dataset.rename_column('solutions', 'answers')
valid_dataset = valid_dataset.rename_column('solutions', 'answers')

pandas_train = train_dataset.to_pandas()
pandas_valid = valid_dataset.to_pandas()

def df_to_dataset(dataframe, shuffle=True, batch_size=1):
  dataframe = dataframe.copy()
  ds = tf.data.Dataset.from_tensor_slices((dict(dataframe)))
  return ds

Será que alguém poderia me ajudar? Se for possível, estou com algumas dificuldades ao mexer no tensorflow e no pytorch. Alguém recomenda livros complementares?

Meu código está exatamente igual ao do notebook, só tirei o paralelismo e diminui a quantidade de batchs.