P-10 RAG Embedding dan Vector Database

This commit is contained in:
Raphael
2026-11-02 10:58:52 +07:00
parent 99fe6f0d76
commit d3870f7ccc
7 changed files with 66 additions and 19 deletions
+66 -19
View File
@@ -14,26 +14,47 @@ MODEL_EMBEDDING = "paraphrase-multilingual-MiniLM-L12-v2"
# ==========================================
# 15 PERTANYAAN PENGUJIAN
# GANTI PERTANYAAN DAN KATA KUNCI
# SESUAI ISI PDF YANG KAMU GUNAKAN.
# Berdasarkan materi PDF yang digunakan
# ==========================================
UJI = [
("Pertanyaan 1 dari dokumen", "kata kunci jawaban 1"),
("Pertanyaan 2 dari dokumen", "kata kunci jawaban 2"),
("Pertanyaan 3 dari dokumen", "kata kunci jawaban 3"),
("Pertanyaan 4 dari dokumen", "kata kunci jawaban 4"),
("Pertanyaan 5 dari dokumen", "kata kunci jawaban 5"),
("Pertanyaan 6 dari dokumen", "kata kunci jawaban 6"),
("Pertanyaan 7 dari dokumen", "kata kunci jawaban 7"),
("Pertanyaan 8 dari dokumen", "kata kunci jawaban 8"),
("Pertanyaan 9 dari dokumen", "kata kunci jawaban 9"),
("Pertanyaan 10 dari dokumen", "kata kunci jawaban 10"),
("Pertanyaan 11 dari dokumen", "kata kunci jawaban 11"),
("Pertanyaan 12 dari dokumen", "kata kunci jawaban 12"),
("Pertanyaan 13 dari dokumen", "kata kunci jawaban 13"),
("Pertanyaan 14 dari dokumen", "kata kunci jawaban 14"),
("Pertanyaan 15 dari dokumen", "kata kunci jawaban 15"),
("Apa kepanjangan dari LLM?", "Large Language Model"),
("Bagaimana cara kerja Bag-of-Words?", "frekuensi kata"),
("Apa kelemahan Bag-of-Words?", "tidak memahami urutan panjang"),
("Apa fungsi Word Embedding?", "vektor"),
("Apa contoh metode Word Embedding?", "Word2vec"),
("Apa itu RNN dan LSTM?", "RNN / LSTM"),
("Apa mekanisme yang digunakan Transformer?", "self-attention"),
("Apa judul penelitian yang memperkenalkan Transformer?",
"Attention Is All You Need"),
("Apa contoh model pada era pre-training skala besar?",
"BERT, GPT-2, GPT-3"),
("Apa kemampuan GPT-3 yang ditunjukkan dalam materi?",
"few-shot"),
("Apa yang dimaksud dengan RAG?",
"kumpulan dokumen"),
("Kapan RAG tepat digunakan?",
"sering berubah"),
("Apa kelemahan memasukkan seluruh dokumen ke prompt?",
"context window"),
("Apa teknik yang digunakan untuk memberikan contoh kepada model?",
"Few-shot"),
("Apa materi utama pada P-10?",
"Embedding & Vector Database"),
]
@@ -42,6 +63,7 @@ UJI = [
# ==========================================
def hubungkan_database(ukuran):
client = chromadb.PersistentClient(
path=FOLDER_DATABASE
)
@@ -67,6 +89,7 @@ def hubungkan_database(ukuran):
# ==========================================
def evaluasi(koleksi, k):
benar = 0
total_reciprocal_rank = 0
@@ -88,16 +111,24 @@ def evaluasi(koleksi, k):
peringkat_benar = None
for nomor, dokumen in enumerate(daftar_dokumen, start=1):
for nomor, dokumen in enumerate(
daftar_dokumen,
start=1
):
if kata_kunci.lower() in dokumen.lower():
peringkat_benar = nomor
break
if peringkat_benar is not None:
benar += 1
total_reciprocal_rank += 1 / peringkat_benar
hit = benar / len(UJI)
mrr = total_reciprocal_rank / len(UJI)
return hit, mrr
@@ -108,25 +139,33 @@ def evaluasi(koleksi, k):
# ==========================================
def jalankan_evaluasi():
print("\n===== EVALUASI RETRIEVAL RAG =====")
print("Jumlah pertanyaan:", len(UJI))
print("\nHasil perbandingan ukuran chunk:")
print("-----------------------------------------------")
print("Ukuran | Hit@1 | Hit@3 | Hit@5 | MRR")
print("-----------------------------------------------")
for ukuran in [500, 1000, 1500]:
try:
koleksi = hubungkan_database(ukuran)
hasil_1, mrr_1 = evaluasi(koleksi, 1)
hasil_3, mrr_3 = evaluasi(koleksi, 3)
hasil_5, mrr_5 = evaluasi(koleksi, 5)
# MRR dihitung menggunakan hasil top-5.
# MRR ditampilkan berdasarkan hasil top-5.
print(
f"{ukuran:6} | "
f"{hasil_1:.2f} | "
@@ -136,12 +175,20 @@ def jalankan_evaluasi():
)
except Exception as error:
print(f"Chunk {ukuran}: gagal dievaluasi.")
print("Keterangan:", error)
print("-----------------------------------------------")
print("Evaluasi selesai.")
# ==========================================
# MENJALANKAN PROGRAM
# ==========================================
if __name__ == "__main__":
jalankan_evaluasi()