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
|
# 15 PERTANYAAN PENGUJIAN
|
||||||
# GANTI PERTANYAAN DAN KATA KUNCI
|
# Berdasarkan materi PDF yang digunakan
|
||||||
# SESUAI ISI PDF YANG KAMU GUNAKAN.
|
|
||||||
# ==========================================
|
# ==========================================
|
||||||
|
|
||||||
UJI = [
|
UJI = [
|
||||||
("Pertanyaan 1 dari dokumen", "kata kunci jawaban 1"),
|
("Apa kepanjangan dari LLM?", "Large Language Model"),
|
||||||
("Pertanyaan 2 dari dokumen", "kata kunci jawaban 2"),
|
|
||||||
("Pertanyaan 3 dari dokumen", "kata kunci jawaban 3"),
|
("Bagaimana cara kerja Bag-of-Words?", "frekuensi kata"),
|
||||||
("Pertanyaan 4 dari dokumen", "kata kunci jawaban 4"),
|
|
||||||
("Pertanyaan 5 dari dokumen", "kata kunci jawaban 5"),
|
("Apa kelemahan Bag-of-Words?", "tidak memahami urutan panjang"),
|
||||||
("Pertanyaan 6 dari dokumen", "kata kunci jawaban 6"),
|
|
||||||
("Pertanyaan 7 dari dokumen", "kata kunci jawaban 7"),
|
("Apa fungsi Word Embedding?", "vektor"),
|
||||||
("Pertanyaan 8 dari dokumen", "kata kunci jawaban 8"),
|
|
||||||
("Pertanyaan 9 dari dokumen", "kata kunci jawaban 9"),
|
("Apa contoh metode Word Embedding?", "Word2vec"),
|
||||||
("Pertanyaan 10 dari dokumen", "kata kunci jawaban 10"),
|
|
||||||
("Pertanyaan 11 dari dokumen", "kata kunci jawaban 11"),
|
("Apa itu RNN dan LSTM?", "RNN / LSTM"),
|
||||||
("Pertanyaan 12 dari dokumen", "kata kunci jawaban 12"),
|
|
||||||
("Pertanyaan 13 dari dokumen", "kata kunci jawaban 13"),
|
("Apa mekanisme yang digunakan Transformer?", "self-attention"),
|
||||||
("Pertanyaan 14 dari dokumen", "kata kunci jawaban 14"),
|
|
||||||
("Pertanyaan 15 dari dokumen", "kata kunci jawaban 15"),
|
("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):
|
def hubungkan_database(ukuran):
|
||||||
|
|
||||||
client = chromadb.PersistentClient(
|
client = chromadb.PersistentClient(
|
||||||
path=FOLDER_DATABASE
|
path=FOLDER_DATABASE
|
||||||
)
|
)
|
||||||
@@ -67,6 +89,7 @@ def hubungkan_database(ukuran):
|
|||||||
# ==========================================
|
# ==========================================
|
||||||
|
|
||||||
def evaluasi(koleksi, k):
|
def evaluasi(koleksi, k):
|
||||||
|
|
||||||
benar = 0
|
benar = 0
|
||||||
total_reciprocal_rank = 0
|
total_reciprocal_rank = 0
|
||||||
|
|
||||||
@@ -88,16 +111,24 @@ def evaluasi(koleksi, k):
|
|||||||
|
|
||||||
peringkat_benar = None
|
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():
|
if kata_kunci.lower() in dokumen.lower():
|
||||||
|
|
||||||
peringkat_benar = nomor
|
peringkat_benar = nomor
|
||||||
break
|
break
|
||||||
|
|
||||||
if peringkat_benar is not None:
|
if peringkat_benar is not None:
|
||||||
|
|
||||||
benar += 1
|
benar += 1
|
||||||
|
|
||||||
total_reciprocal_rank += 1 / peringkat_benar
|
total_reciprocal_rank += 1 / peringkat_benar
|
||||||
|
|
||||||
hit = benar / len(UJI)
|
hit = benar / len(UJI)
|
||||||
|
|
||||||
mrr = total_reciprocal_rank / len(UJI)
|
mrr = total_reciprocal_rank / len(UJI)
|
||||||
|
|
||||||
return hit, mrr
|
return hit, mrr
|
||||||
@@ -108,25 +139,33 @@ def evaluasi(koleksi, k):
|
|||||||
# ==========================================
|
# ==========================================
|
||||||
|
|
||||||
def jalankan_evaluasi():
|
def jalankan_evaluasi():
|
||||||
|
|
||||||
print("\n===== EVALUASI RETRIEVAL RAG =====")
|
print("\n===== EVALUASI RETRIEVAL RAG =====")
|
||||||
|
|
||||||
print("Jumlah pertanyaan:", len(UJI))
|
print("Jumlah pertanyaan:", len(UJI))
|
||||||
|
|
||||||
print("\nHasil perbandingan ukuran chunk:")
|
print("\nHasil perbandingan ukuran chunk:")
|
||||||
|
|
||||||
print("-----------------------------------------------")
|
print("-----------------------------------------------")
|
||||||
|
|
||||||
print("Ukuran | Hit@1 | Hit@3 | Hit@5 | MRR")
|
print("Ukuran | Hit@1 | Hit@3 | Hit@5 | MRR")
|
||||||
|
|
||||||
print("-----------------------------------------------")
|
print("-----------------------------------------------")
|
||||||
|
|
||||||
for ukuran in [500, 1000, 1500]:
|
for ukuran in [500, 1000, 1500]:
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
|
||||||
koleksi = hubungkan_database(ukuran)
|
koleksi = hubungkan_database(ukuran)
|
||||||
|
|
||||||
hasil_1, mrr_1 = evaluasi(koleksi, 1)
|
hasil_1, mrr_1 = evaluasi(koleksi, 1)
|
||||||
|
|
||||||
hasil_3, mrr_3 = evaluasi(koleksi, 3)
|
hasil_3, mrr_3 = evaluasi(koleksi, 3)
|
||||||
|
|
||||||
hasil_5, mrr_5 = evaluasi(koleksi, 5)
|
hasil_5, mrr_5 = evaluasi(koleksi, 5)
|
||||||
|
|
||||||
# MRR dihitung menggunakan hasil top-5.
|
# MRR ditampilkan berdasarkan hasil top-5.
|
||||||
|
|
||||||
print(
|
print(
|
||||||
f"{ukuran:6} | "
|
f"{ukuran:6} | "
|
||||||
f"{hasil_1:.2f} | "
|
f"{hasil_1:.2f} | "
|
||||||
@@ -136,12 +175,20 @@ def jalankan_evaluasi():
|
|||||||
)
|
)
|
||||||
|
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
|
|
||||||
print(f"Chunk {ukuran}: gagal dievaluasi.")
|
print(f"Chunk {ukuran}: gagal dievaluasi.")
|
||||||
|
|
||||||
print("Keterangan:", error)
|
print("Keterangan:", error)
|
||||||
|
|
||||||
print("-----------------------------------------------")
|
print("-----------------------------------------------")
|
||||||
|
|
||||||
print("Evaluasi selesai.")
|
print("Evaluasi selesai.")
|
||||||
|
|
||||||
|
|
||||||
|
# ==========================================
|
||||||
|
# MENJALANKAN PROGRAM
|
||||||
|
# ==========================================
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
||||||
jalankan_evaluasi()
|
jalankan_evaluasi()
|
||||||
|
|||||||
Binary file not shown.
Reference in New Issue
Block a user