Proje Dosyaları: https://huggingface.co/muserrefselcukozdemir/ilac-asistani
Farmasötik Bilgi Retrieval Modeli (Türkçe)
Model Tanımı:
Türk ilaç prospektüsleri üzerinde denetimli fine-tuning (SFT) uygulanmış, eczacılık bilgi sorgularını yanıtlayabilen LLaMA-3.2-3B tabanlı bir dil modeli adaptörüdür. Model, ilaçların etken maddeleri, endikasyonları, kontrendikasyonları ve kullanım şekilleri hakkında sorulara cevap vermek üzere optimize edilmiştir.
Model Mimarisi ve Eğitim Parametreleri
Taban Model Özellikleri
- Mimari: LLaMA (Large Language Model Meta AI) Decoder-only Transformer
- Versiyon: 3.2-3B-Instruct (3.2 milyar parametre)
- Bağlama Penceresi: 131,072 token (128K)
- Tokenizer: Byte Pair Encoding (BPE) - 128,256 vocab size
- Orjinal Eğitim Dili: Çokdilli (İngilizce ağırlıklı, İngilizce dışı veri azınlıkta)
Fine-Tuning Konfigürasyonu
| Parametre | Değer | Açıklama |
|---|---|---|
| Yöntem | LoRA (Low-Rank Adaptation) | Parametre verimli fine-tuning |
| Rank (r) | 8 | Adaptasyon matrislerinin rankı |
| Alpha | 16 | LoRA scaling parametresi (genellikle 2*r) |
| Dropout | 0.0 | Adaptasyon katmanlarında düzenlileştirme |
| Hedef Modüller | q_proj, v_proj | Attention katmanlarındaki projeksiyon matrisleri |
| Eğitim Tipi | SFT (Supervised Fine-Tuning) | Denetimli öğrenme |
| Loss Fonksiyonu | Cross-Entropy | Standart dil modelleme kaybı |
| Optimizer | AdamW | Ağırlık decay'li Adam |
| Learning Rate | 3e-5 | Başlangıç öğrenme oranı |
| LR Scheduler | Cosine with Warmup | Kosinüssel azalma, 10% warmup |
| Epoch Sayısı | 5 | Tam veri seti üzerinden geçiş sayısı |
| Batch Size | 1 (eff: 8) | Cihaz başına 1, gradyan biriktirme ile efektif 8 |
| Weight Decay | 0.01 | L2 düzenlileştirme |
| Precision | FP16 (Mixed) | 16-bit kayan nokta hassasiyeti |
| Gradient Checkpointing | Aktif | Bellek optimizasyonu için |
Veri Seti Özellikleri
Kaynak ve Format
- Veri Tipi: İlaç prospektüslerinden türetilmiş Soru-Cevap (Q&A) çiftleri
- Format: Alpaca JSON formatı (instruction-context-response yapısı)
- Dil: Türkçe (Özel medikal terminoloji içerir)
- Örnek Sayısı: 697 eğitim örneği (800'e yakın ham veri, sonrasında filtreleme)
- Ortalama Token Uzunluğu: Girdi ~120 token, Çıktı ~80 token
Kapsanan İlaçlar ve Kategoriler
| İlaç Adı | ATC Kodu | Kategori | Temel Endikasyonlar |
|---|---|---|---|
| Arveles | M01AE | NSAİİ | Ağrı, iltihap, ateş |
| Augmentin | J01CR | Antibiyotik | Bakteriyel enfeksiyonlar |
| Cipralex | N06AB | Antidepresan | Depresyon, anksiyete |
| Coraspin | B01AC | Antikoagülan | Tromboz önleme |
| Enfluvir | J05AH | Antiviral | İnfluenza A/B |
| Janumet | A10BD | Antidiyabetik | Tip 2 diabetes |
| Parol | N02BE | Analjezik | Ağrı, ateş |
Veri Ön İşleme
- Tokenizasyon: LLaMA-3.2 chat template uygulandı (
<|begin_of_text|>,<|start_header_id|>, vb.) - Maskeleme: Sadece asistan cevapları üzerinde gradyan hesaplandı (instruction/context maskelendi)
- Truncation: 2048 token cutoff (veri seti bu sınırın altında kaldı)
- Encoding: UTF-8, Türkçe karakterler korundu
Çıkarım (Inference) Rehberi
Gereksinimler
pip install torch transformers accelerate peft huggingface_hub
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import PeftModel
# Model ve tokenizer yükleme
base_model_id = "unsloth/Llama-3.2-3B-Instruct"
adapter_id = "Defkhan5960/ilac-asistani" # Repo adı
tokenizer = AutoTokenizer.from_pretrained(base_model_id)
base_model = AutoModelForCausalLM.from_pretrained(
base_model_id,
torch_dtype=torch.float16,
device_map="auto"
)
# LoRA adaptörünü birleştirme
model = PeftModel.from_pretrained(base_model, adapter_id)
model.eval()
# Örnek sorgu
messages = [
{
"role": "system",
"content": "Sen yardımcı bir eczacı asistanısın. Türkçe olarak ilaçlar hakkında doğru ve güvenilir bilgi verirsin."
},
{
"role": "user",
"content": "ARVELES enjeksiyonun etkin maddesi nedir?"
}
]
# Chat template uygulama
input_text = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
inputs = tokenizer(input_text, return_tensors="pt").to("cuda")
# Üretim parametreleri
outputs = model.generate(
input_ids=inputs.input_ids,
attention_mask=inputs.attention_mask,
max_new_tokens=200,
temperature=0.3, # Düşük sıcaklık: deterministik çıktı
top_p=0.9, # Nucleus sampling
repetition_penalty=1.2, # Tekrarları önleme
do_sample=True
)
# Sadece yeni üretilen tokenları decode etme
response = tokenizer.decode(
outputs[0][inputs.input_ids.shape[1]:],
skip_special_tokens=True
)
print(response)
Model tree for muserrefselcukozdemir/ilac-asistani
Base model
meta-llama/Llama-3.2-3B-Instruct
Finetuned
unsloth/Llama-3.2-3B-Instruct Evaluation results
- Training Loss (Cross-Entropy)self-reported1.920
- Epochsself-reported5.000