File size: 3,038 Bytes
208e8e6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
---
license: bsl-1.0
base_model:
- microsoft/OmniParser-v2.0
pipeline_tag: text-generation
tags:
- medical
---
pip install transformers datasets torch
[
    {"soru": "Diyabet nedir?", "cevap": "Diyabet, vücudunuzun yeterince insülin üretemediği veya insülini etkili bir şekilde kullanamadığı bir durumdur."},
    {"soru": "İnsülin direnci nedir?", "cevap": "İnsülin direnci, hücrelerinizin insüline yanıt vermediği ve kan şekerinin yükselmesine neden olduğu bir durumdur."},
    {"soru": "Diyabet nasıl yönetilir?", "cevap": "Diyabet, sağlıklı beslenme, düzenli egzersiz ve ilaçlarla yönetilebilir."}
]
from transformers import AutoTokenizer, AutoModelForCausalLM, Trainer, TrainingArguments
from datasets import Dataset
import json

 Veri setini yükle
with open("diabi_veri_seti.json", "r", encoding="utf-8") as f:
    veri_seti = json.load(f)

#Veri setini Hugging Face Dataset formatına dönüştür
sorular = [veri["soru"] for veri in veri_seti]
cevaplar = [veri["cevap"] for veri in veri_seti]

dataset = Dataset.from_dict({"soru": sorular, "cevap": cevaplar})

 Tokenizer ve modeli yükle
model_adi = "microsoft/DialoGPT-small"  # Küçük, Orta veya Büyük model seçebilirsiniz
tokenizer = AutoTokenizer.from_pretrained(model_adi)
model = AutoModelForCausalLM.from_pretrained(model_adi)

 Veri setini tokenize et
def tokenize_veri(ornek):
    return tokenizer(ornek["soru"] + " " + ornek["cevap"], truncation=True, padding="max_length", max_length=128)

tokenized_dataset = dataset.map(tokenize_veri, batched=True)

 Eğitim argümanlarını ayarla
training_args = TrainingArguments(
    output_dir="./diabi-model",  # Modelin kaydedileceği dizin
    overwrite_output_dir=True,
    num_train_epochs=3,  # Eğitim epoch sayısı
    per_device_train_batch_size=8,  # Batch boyutu
    save_steps=500,
    save_total_limit=2,
    logging_dir="./logs",  # Logların kaydedileceği dizin
    logging_steps=10,
)

 Trainer'ı oluştur
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_dataset,
)

 Modeli eğit
trainer.train()

 Modeli kaydet
trainer.save_model("./diabi-model")
tokenizer.save_pretrained("./diabi-model")

from transformers import AutoTokenizer, AutoModelForCausalLM

 Eğitilen modeli yükle
model_adi = "./diabi-model"
tokenizer = AutoTokenizer.from_pretrained(model_adi)
model = AutoModelForCausalLM.from_pretrained(model_adi)

 Sohbet başlat
print("Diabi: Merhaba! Ben Diabi, diyabetle ilgili sorularınızı yanıtlamak için buradayım. Nasıl yardımcı olabilirim? (Çıkmak için 'exit' yazın)")
while True:
    user_input = input("Siz: ")
    if user_input.lower() == "exit":
        break

    # Kullanıcı mesajını modele gönder
    inputs = tokenizer.encode(user_input + tokenizer.eos_token, return_tensors="pt")
    outputs = model.generate(inputs, max_length=1000, pad_token_id=tokenizer.eos_token_id)
    bot_reply = tokenizer.decode(outputs[:, inputs.shape[-1]:][0], skip_special_tokens=True)

    print(f"Diabi: {bot_reply}")