Initial commit
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
import chromadb
|
||||
from chromadb.utils import embedding_functions
|
||||
|
||||
# Panggil DB dan Model
|
||||
emb = embedding_functions.SentenceTransformerEmbeddingFunction(
|
||||
model_name="paraphrase-multilingual-MiniLM-L12-v2")
|
||||
client = chromadb.PersistentClient(path="./chroma_db")
|
||||
koleksi = client.get_or_create_collection("pedoman", embedding_function=emb)
|
||||
|
||||
# Daftar (Pertanyaan, Kata Kunci Jawaban yang HARUS ada di chunk)
|
||||
UJI = [
|
||||
("Apa syarat cuti akademik?", "cuti akademik"),
|
||||
("Berapa lama cuti akademik bisa diajukan?", "dua semester"),
|
||||
("Berapa batas kehadiran untuk ujian?", "75 persen"),
|
||||
("Bolehkah berhenti kuliah sementara?", "cuti akademik"),
|
||||
("Bagaimana cara mengajukan beasiswa?", "beasiswa"),
|
||||
("Apa sanksi jika telat bayar kuliah?", "terlambat melakukan pembayaran"),
|
||||
("Kapan batas pembayaran biaya kuliah?", "dua minggu sebelum"),
|
||||
("Apa yang harus disimpan setelah bayar?", "bukti pembayaran")
|
||||
]
|
||||
|
||||
def hit_at_k(uji, k=3):
|
||||
benar = 0
|
||||
for pertanyaan, kunci in uji:
|
||||
# Ambil k hasil teratas
|
||||
hasil = koleksi.query(query_texts=[pertanyaan], n_results=k)["documents"][0]
|
||||
# Cek apakah kunci ada di salah satu hasil
|
||||
if any(kunci.lower() in d.lower() for d in hasil):
|
||||
benar += 1
|
||||
return benar / len(uji)
|
||||
|
||||
print(f"Total pertanyaan uji: {len(UJI)}\n")
|
||||
print("Mengevaluasi Retrieval...")
|
||||
for k in (1, 3, 5):
|
||||
skor = hit_at_k(UJI, k)
|
||||
print(f"Hit@{k} = {skor:.2f} (Benar {int(skor*len(UJI))} dari {len(UJI)} pertanyaan)")
|
||||
Reference in New Issue
Block a user