P-10 RAG Embedding dan Vector Database
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+66
-19
@@ -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()
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user