tr-factbench-gemma-atomizer / inference_example.py
angeldust007's picture
Upload inference_example.py with huggingface_hub
000c401 verified
Raw History Blame Contribute Delete
3.3 kB
"""Standalone inference example for angeldust007/tr-factbench-gemma-atomizer."""
import json
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import PeftModel
BASE_MODEL = "google/gemma-4-E2B-it"
ADAPTER_REPO = "angeldust007/tr-factbench-gemma-atomizer"
SYSTEM_PROMPT = (
"Türkçe bir iddiayı bağımsız doğrulanabilir atomik önermelere ayır. "
"Her atom tek başına anlaşılır olmalı. Ortak özne, nesne veya tamlayıcı "
"ikinci bir önermede düşürülmüşse, onu iddianın kendi içindeki bilgiden yeniden kur. "
"Özneleri veya baş ögeleri yeniden kurarken kelime eksiltme, kısaltma veya kırpma yapma; "
"iddiadaki isim ve sıfat tamlamalarını tam olarak koru. "
"Her atom dilbilgisel olarak eksiksiz ve öznesi açık bir cümle olmalıdır. "
"Yeni bilgi ekleme. Olumsuzluk, koşul, modalite, sayı, zaman, karşılaştırma ve "
"kapsam ifadelerini koru. Koşullu tek bir önerme sırf birden fazla fiil içeriyor diye "
"bölünmemelidir. İddia zaten atomikse değiştirmeden tek atom döndür. "
"BİR cümlenin içindeki yan cümleler veya sıfat tamlamaları ayrı atom YAPILMAZ; "
"yalnızca 've', 'ayrıca', 'öte yandan', 'bununla birlikte', 'ancak', 'fakat', "
"noktalı virgül veya açık nokta gibi koordinasyon sınırlarında böl. "
'Yalnızca {"atoms": ["..."]} biçiminde geçerli JSON üret. /no_think'
)
def main():
compute_dtype = torch.bfloat16 if torch.cuda.is_available() and torch.cuda.is_bf16_supported() else torch.float16
quant_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_use_double_quant=True,
bnb_4bit_compute_dtype=compute_dtype,
)
print(f"Loading tokenizer & adapter from {ADAPTER_REPO}...")
tokenizer = AutoTokenizer.from_pretrained(ADAPTER_REPO)
base_model = AutoModelForCausalLM.from_pretrained(
BASE_MODEL,
quantization_config=quant_config,
device_map="auto",
torch_dtype=compute_dtype,
)
model = PeftModel.from_pretrained(base_model, ADAPTER_REPO)
model.eval()
sample_claims = [
"Alışverişte müşteri, işyerinin oluşturduğu karekodu mobil uygulamasından okutarak FAST ödemesi başlatabilir.",
"Kasko sigortasında Dar Kasko teminat gruplarının yalnız bir bölümünü, Kasko ise tamamını kapsar; zorunlu trafik sigortası üçüncü kişilere verilen maddi ve bedensel zararları güvence altına alır.",
]
for claim in sample_claims:
messages = [
{"role": "system", "content": SYSTEM_PROMPT},
{"role": "user", "content": json.dumps({"claim": claim}, ensure_ascii=False)},
]
prompt = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with torch.no_grad():
output_ids = model.generate(**inputs, max_new_tokens=256, do_sample=False)
generated = tokenizer.decode(output_ids[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True)
print(f"\nCLAIM: {claim}")
print(f"OUTPUT: {generated.strip()}")
if __name__ == "__main__":
main()