readme: ---
  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]})
  ```