|
--- |
|
language: tr |
|
--- |
|
# Turkish Question Answering Model : Question Answering |
|
|
|
Inspired by savasy/bert-base-turkish-squad, |
|
* Inspired model: https://huggingface.co/savasy/bert-base-turkish-squad |
|
* BERT-base: https://huggingface.co/dbmdz/bert-base-turkish-uncased |
|
* Dataset: Private QnA Chatbot Database |
|
|
|
# Training Code |
|
``` |
|
model_args = QuestionAnsweringArgs() |
|
model_args.train_batch_size = 16 |
|
model_args.evaluate_during_training = True |
|
model_args.n_best_size=3 |
|
model_args.num_train_epochs=5 |
|
|
|
train_args = { |
|
"reprocess_input_data": True, |
|
"overwrite_output_dir": True, |
|
"use_cached_eval_features": True, |
|
"output_dir": f"outputs/bert", |
|
"best_model_dir": f"outputs/bert/best_model1", |
|
"evaluate_during_training": True, |
|
"max_seq_length": 128, |
|
"num_train_epochs": 10, |
|
"evaluate_during_training_steps": 1000, |
|
"wandb_project": "Question Answer Application", |
|
"wandb_kwargs": {"name": "dbmdz/bert-base-turkish-uncased\"}, |
|
"save_model_every_epoch": False, |
|
"save_eval_checkpoints": False, |
|
"n_best_size":3, |
|
# "use_early_stopping": True, |
|
# "early_stopping_metric": "mcc", |
|
"n_gpu": 4, |
|
# "manual_seed": 4, |
|
"use_multiprocessing": True, |
|
"train_batch_size": 126, |
|
"eval_batch_size": 64, |
|
# "config": { |
|
# "output_hidden_states": True |
|
# } |
|
} |
|
model = QuestionAnsweringModel( |
|
"bert","dbmdz/bert-base-turkish-uncased\", args=train_args |
|
) |
|
|
|
model.train_model(train, eval_data=test) |
|
``` |
|
# Dataset Sample |
|
``` |
|
{ |
|
"context": "Varlıklara ait yeniden değerleme toplamlarının özet olarak alındığı rapor seçeneğidir. Varlık Yönetimi program bölümünde Raporlar menüsü altında yer alır. Rapor yıllık olarak alınır. Toplamların alınacağı yıl, Yıl filtre satırında belirtilir. Rapor filtre seçenekleri aşağıdaki tabloda yer almaktadır.", |
|
"qas": [ |
|
{ |
|
"id": "01017", |
|
"is_impossible": false, |
|
"question": "Yeniden Değerleme Özeti ne işe yarar", |
|
"answers": [ |
|
{ |
|
"text": "Varlıklara ait yeniden değerleme toplamlarının özet olarak alındığı rapor seçeneğidir.", |
|
"answer_start": 0 |
|
} |
|
] |
|
}, |
|
{ |
|
"id": "01018", |
|
"is_impossible": false, |
|
"question": " Yeniden Değerleme Özetine nereden ulaşırım", |
|
"answers": [ |
|
{ |
|
"text": "Varlık Yönetimi program bölümünde Raporlar menüsü altında yer alır.", |
|
"answer_start": 87 |
|
} |
|
] |
|
} |
|
} |
|
|
|
``` |
|
# Example Usage |
|
|
|
> Load Model |
|
``` |
|
#Required Libraries |
|
from transformers import AutoTokenizer, AutoModelForQuestionAnswering, pipeline |
|
import torch |
|
#Model Path |
|
hface_path = "yunusemreemik/logo-qna-model" |
|
#For tokenize context and question |
|
tokenizer = AutoTokenizer.from_pretrained(hface_path) |
|
#For generate NN eval outputs |
|
model = AutoModelForQuestionAnswering.from_pretrained(hface_path) |
|
#For functional pipe |
|
nlp = pipeline("question-answering", model=model, tokenizer=tokenizer) |
|
``` |
|
> Apply the model. |
|
> Please dont forget the delete backslashes "\" before run |
|
``` |
|
e_arsiv ="e-Arşiv Tipleri, e-Arşiv fatura türünün belirlendiği alandır. İlgili cari hesap kartında \\nLogoConnect sayfasında belirlenen e-arşiv tipi alana öndeğer olarak \\naktarılır. Standart faturalar için herhangi bir seçim yapılmaz. \\nÖzel matrah uygulanan tütün, altın, gümüş, gazete, dergi, belediye \\nşehir yolcu taşımacılığı ve telefon kartı satışları için kesilen faturalar. \\nİstisna uygulanan faturalar. (İhracat teslimleri ve bu teslimlere ilişkin hizmetler, \\nmal ihracatı, hizmet ihracatı, serbest bölgelerdeki müşteriler için yapılan fason hizmetler vs..) \\nAraç Tescil Faturası, Araç tescil için kesilen faturalardır." |
|
|
|
answer_text = nlp(question="İlgili cari hesap kartları nerede belirlenir?", context=e_arsiv) |
|
print(answer_text ) |
|
|
|
``` |
|
``` |
|
|
|
print(nlp(question="", context=e_arsiv)) |
|
``` |
|
# Evaluation |
|
``` |
|
(160, |
|
{'global_step': [16, 32, 48, 64, 80, 96, 112, 128, 144, 160], |
|
'correct': [11, 15, 18, 18, 19, 16, 16, 16, 14, 14], |
|
'similar': [23, 26, 22, 21, 21, 24, 24, 23, 25, 25], |
|
'incorrect': [8, 1, 2, 3, 2, 2, 2, 3, 3, 3], |
|
'train_loss': [0.8277238607406616, |
|
0.7876648306846619, |
|
0.44657397270202637, |
|
0.32337626814842224, |
|
0.2009371519088745, |
|
0.15247923135757446, |
|
0.11289173364639282, |
|
0.06762214750051498, |
|
0.06813357770442963, |
|
0.04011240229010582], |
|
'eval_loss': [-9.3046875, |
|
-8.8984375, |
|
-9.1171875, |
|
-9.03125, |
|
-9.046875, |
|
-8.984375, |
|
-9.1171875, |
|
-9.296875, |
|
-9.296875, |
|
-9.296875]}) |
|
``` |