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.