- Agar model AI berguna dalam konteks tertentu, model tersebut perlu mengakses pengetahuan latar belakang
- Developer umumnya menggunakan Retrieval-Augmented Generation (RAG) untuk meningkatkan pengetahuan model AI
- Solusi RAG tradisional sering gagal mengambil informasi yang relevan karena konteks dihilangkan saat informasi dienkode
- Contextual Retrieval adalah metode yang sangat meningkatkan tahap pengambilan pada RAG, dengan menggunakan dua subteknologi: Contextual Embeddings dan Contextual BM25
- Metode ini dapat mengurangi tingkat kegagalan pencarian sebesar 49%, dan bila digabungkan dengan reranking dapat menguranginya hingga 67%
- Developer dapat dengan mudah menerapkan solusi Contextual Retrieval mereka sendiri bersama Claude
Catatan tentang penggunaan prompt panjang
- Jika basis pengetahuan kurang dari 200.000 token, seluruh basis pengetahuan dapat disertakan dalam prompt yang diberikan ke model
- Anthropic baru-baru ini merilis prompt caching untuk Claude, sehingga pendekatan ini menjadi jauh lebih cepat dan hemat biaya
- Saat Knowledge Base menjadi lebih besar, dibutuhkan solusi yang lebih skalabel, dan pada saat itulah Contextual Retrieval diperlukan
Dasar-dasar RAG: skala ke basis pengetahuan besar
- Untuk basis pengetahuan yang lebih besar dan tidak muat dalam context window, solusi umum yang digunakan adalah RAG
- RAG memecah basis pengetahuan menjadi chunk teks yang lebih kecil, mengubahnya menjadi vector embedding, lalu menyimpannya dalam basis data vektor agar bisa dicari melalui kemiripan semantik
- Model embedding sangat baik dalam menangkap relasi semantik, tetapi bisa melewatkan kecocokan persis yang penting
- BM25 adalah fungsi pemeringkatan yang menggunakan lexical matching untuk menemukan kecocokan kata atau frasa yang persis, dan sangat efektif khususnya untuk kueri yang mengandung pengenal unik atau istilah teknis
- Solusi RAG dapat mengambil chunk yang paling relevan dengan lebih akurat dengan menggabungkan embedding dan BM25 melalui langkah-langkah berikut:
- Memecah basis pengetahuan ("corpus" dokumen) menjadi chunk teks yang lebih kecil, biasanya beberapa ratus token atau kurang
- Membuat encoding TF-IDF dan embedding semantik untuk chunk tersebut
- Menggunakan BM25 untuk menemukan chunk teratas berdasarkan kecocokan persis
- Menggunakan embedding untuk menemukan chunk teratas berdasarkan kemiripan semantik
- Menggabungkan hasil dari (3) dan (4) serta menghapus duplikasi dengan teknik rank fusion
- Menambahkan K chunk teratas ke dalam prompt untuk menghasilkan respons
Memperkenalkan Contextual Retrieval
- Dalam RAG tradisional, dokumen dipecah menjadi chunk yang lebih kecil sehingga setiap chunk individual bisa kekurangan konteks yang memadai
- Contextual Retrieval mengatasi masalah ini dengan menambahkan konteks penjelas spesifik untuk tiap chunk di bagian depan chunk tersebut
- Claude mendukung implementasi Contextual Retrieval dengan prompt yang menginstruksikan agar konteks singkat per chunk dibuat menggunakan konteks dari keseluruhan dokumen
- Contextual Retrieval tersedia dengan biaya rendah bersama Claude berkat prompt caching
Peningkatan performa
- Contextual Embeddings mengurangi tingkat kegagalan pengambilan 20 chunk teratas sebesar 35% (5,7% → 3,7%)
- Menggabungkan Contextual Embeddings dan Contextual BM25 menurunkan tingkat kegagalan sebesar 49% (5,7% → 2,9%)
Hal yang perlu dipertimbangkan saat implementasi
- Pertimbangkan cara membagi dokumen menjadi chunk
- Contextual Retrieval meningkatkan performa pada semua model embedding, tetapi beberapa model dapat memperoleh manfaat lebih besar
- Prompt umum bekerja dengan baik, tetapi hasil yang lebih baik bisa diperoleh dengan prompt yang disesuaikan untuk domain atau use case tertentu
- Menambahkan lebih banyak chunk ke context window meningkatkan kemungkinan mencakup informasi yang relevan
- Selalu jalankan evaluasi untuk memastikan bahwa penyampaian chunk yang telah dikontekstualisasikan serta pembedaan antara konteks dan chunk benar-benar meningkatkan pembuatan respons
Peningkatan performa tambahan dengan reranking
- Reranking adalah teknik penyaringan yang umum digunakan untuk memastikan hanya chunk yang paling relevan yang diteruskan ke model
- Lakukan pengambilan awal untuk mengambil chunk teratas yang berpotensi relevan
- Kirim N chunk teratas dan kueri pengguna ke model reranking
- Gunakan model reranking untuk memberi skor pada setiap chunk berdasarkan relevansi dan kepentingannya terhadap prompt, lalu pilih K chunk teratas
- Kirim K chunk teratas ke model sebagai konteks untuk menghasilkan hasil akhir
- Contextual Embedding dan Contextual BM25 yang telah direranking mengurangi tingkat kegagalan pengambilan 20 chunk teratas sebesar 67% (5,7% → 1,9%)
- Pertimbangan biaya dan latensi
- Reranking dapat memengaruhi latensi dan biaya, terutama saat harus mereranking banyak chunk
- Ada trade-off antara mereranking lebih banyak chunk untuk performa yang lebih baik dan mereranking lebih sedikit untuk latensi serta biaya yang lebih rendah
Kesimpulan
- Banyak pengujian dilakukan pada berbagai jenis dataset untuk membandingkan beragam kombinasi teknik yang dijelaskan di atas (model embedding, penggunaan BM25, penggunaan pencarian kontekstual, penggunaan reranking, dan total jumlah hasil K teratas yang diambil)
- Hasilnya adalah sebagai berikut:
- Embedding + BM25 lebih baik daripada embedding saja
- Di antara embedding yang diuji, Voyage dan Gemini adalah yang terbaik
- Mengirim 20 chunk teratas ke model lebih efektif daripada hanya mengirim 10 atau 5 chunk teratas
- Menambahkan konteks ke chunk secara signifikan meningkatkan akurasi pengambilan
- Reranking lebih baik daripada tidak melakukan reranking
- Semua manfaat ini bersifat kumulatif: untuk memaksimalkan peningkatan performa, dapat digabungkan contextual BM25, contextual embedding (dari Voyage atau Gemini) yang melalui tahap reranking, dan menambahkan 20 chunk ke dalam prompt
- Semua developer yang bekerja dengan Knowledge Base disarankan untuk bereksperimen dengan pendekatan ini menggunakan cookbook yang disediakan dan mencapai tingkat performa baru
Belum ada komentar.