diff --git a/Screenshoot RAG10Raphael.docx b/Screenshoot RAG10Raphael.docx new file mode 100644 index 0000000..764e7c5 Binary files /dev/null and b/Screenshoot RAG10Raphael.docx differ diff --git a/chroma_db/11a5b9ab-a57a-47ce-b5f6-d0522b167fbe/length.bin b/chroma_db/11a5b9ab-a57a-47ce-b5f6-d0522b167fbe/length.bin index 84b31d0..e42071a 100644 Binary files a/chroma_db/11a5b9ab-a57a-47ce-b5f6-d0522b167fbe/length.bin and b/chroma_db/11a5b9ab-a57a-47ce-b5f6-d0522b167fbe/length.bin differ diff --git a/chroma_db/7b627a55-a76e-4ae6-a082-f2c2d6fec532/length.bin b/chroma_db/7b627a55-a76e-4ae6-a082-f2c2d6fec532/length.bin index e336d22..1234487 100644 Binary files a/chroma_db/7b627a55-a76e-4ae6-a082-f2c2d6fec532/length.bin and b/chroma_db/7b627a55-a76e-4ae6-a082-f2c2d6fec532/length.bin differ diff --git a/chroma_db/c8f66ff5-b2ab-4c73-b3ef-9c3612768262/length.bin b/chroma_db/c8f66ff5-b2ab-4c73-b3ef-9c3612768262/length.bin index 87e3533..f1effc9 100644 Binary files a/chroma_db/c8f66ff5-b2ab-4c73-b3ef-9c3612768262/length.bin and b/chroma_db/c8f66ff5-b2ab-4c73-b3ef-9c3612768262/length.bin differ diff --git a/chroma_db/chroma.sqlite3 b/chroma_db/chroma.sqlite3 index 66c3ac9..64e5996 100644 Binary files a/chroma_db/chroma.sqlite3 and b/chroma_db/chroma.sqlite3 differ diff --git a/evaluasi_retrieval.py b/evaluasi_retrieval.py index 0ac5ea7..0787df9 100644 --- a/evaluasi_retrieval.py +++ b/evaluasi_retrieval.py @@ -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() diff --git a/~$reenshoot RAG10Raphael.docx b/~$reenshoot RAG10Raphael.docx new file mode 100644 index 0000000..81cbeb3 Binary files /dev/null and b/~$reenshoot RAG10Raphael.docx differ