from transformers import GPT2Tokenizer
from arabert.preprocess import ArabertPreprocessor
from arabert.aragpt2.grover.modeling_gpt2 import GPT2LMHeadModel
from pyarabic.araby import strip_tashkeel
import pyarabic.trans
model_name='alsubari/aragpt2-mega-pos-msa'
tokenizer = GPT2Tokenizer.from_pretrained('alsubari/aragpt2-mega-pos-msa')
model = GPT2LMHeadModel.from_pretrained('alsubari/aragpt2-mega-pos-msa').to("cuda")
arabert_prep = ArabertPreprocessor(model_name='aubmindlab/aragpt2-mega')
prml=['اعراب الجملة :', ' صنف الكلمات من الجملة :']
text='تعلَّمْ من أخطائِكَ'
text=arabert_prep.preprocess(strip_tashkeel(text))
generation_args = {
'pad_token_id':tokenizer.eos_token_id,
'max_length': 256,
'num_beams':20,
'no_repeat_ngram_size': 3,
'top_k': 20,
'top_p': 0.1, # Consider all tokens with non-zero probability
'do_sample': True,
'repetition_penalty':2.0
}
input_text = f'<|startoftext|>Instruction: {prml[1]} {text}<|pad|>Answer:'
input_ids = tokenizer.encode(input_text, return_tensors='pt').to("cuda")
output_ids = model.generate(input_ids=input_ids,**generation_args)
output_text = tokenizer.decode(output_ids[0],skip_special_tokens=True).split('Answer:')[1]
answer_pose=pyarabic.trans.delimite_language(output_text, start="", end="")
print(answer_pose)# تعلم : تعلم : Verb من : من : Relative pronoun أخطائك : اخطا : Noun ك : Personal pronunction
input_text = f'<|startoftext|>Instruction: {prml[0]} {text}<|pad|>Answer:'
input_ids = tokenizer.encode(input_text, return_tensors='pt').to("cuda")
output_ids = model.generate(input_ids=input_ids,**generation_args)
output_text = tokenizer.decode(output_ids[0],skip_special_tokens=True).split('Answer:')[1]
print(output_text)#تعلم : تعلم : فعل ، مفرد المخاطب للمذكر ، فعل مضارع ، مرفوع من : من : حرف جر أخطائك : اخطا : اسم ، جمع المذكر ، مجرور ك : ضمير ، مفرد المتكلم