|
from transformers import T5Tokenizer, TFT5ForConditionalGeneration
|
|
import tensorflow as tf
|
|
|
|
|
|
model = TFT5ForConditionalGeneration.from_pretrained('models\\medication_info_model\\saved_model')
|
|
tokenizer = T5Tokenizer.from_pretrained('models\\medication_info_model\\tokenizer')
|
|
|
|
def generate_answer(question):
|
|
input_text = f"question: {question}"
|
|
encoding = tokenizer(
|
|
input_text,
|
|
max_length=1024,
|
|
padding='max_length',
|
|
truncation=True,
|
|
return_tensors='tf'
|
|
)
|
|
|
|
input_ids = encoding['input_ids']
|
|
attention_mask = encoding['attention_mask']
|
|
|
|
generated_text = ""
|
|
max_length = 1024
|
|
current_input_ids = input_ids
|
|
|
|
while True:
|
|
outputs = model.generate(
|
|
input_ids=current_input_ids,
|
|
attention_mask=attention_mask,
|
|
max_length=max_length,
|
|
num_beams=5,
|
|
early_stopping=True,
|
|
no_repeat_ngram_size=2,
|
|
return_dict_in_generate=True,
|
|
output_scores=True
|
|
)
|
|
|
|
text = tokenizer.decode(outputs.sequences[0], skip_special_tokens=True)
|
|
generated_text += text
|
|
|
|
if len(text.split()) < max_length:
|
|
break
|
|
|
|
current_input_ids = tokenizer.encode(text, return_tensors='tf')
|
|
attention_mask = tf.ones_like(current_input_ids)
|
|
|
|
return generated_text
|
|
|