CH10 - Retriever
Perkiraan waktu belajar: 2 Hari
Tingkat kesulitan: Sedang
Retriever
Tahap Retriever adalah tahap kelima dari sistem Retrieval-Augmented Generation (RAG), yang mencari dokumen yang terkait dengan pertanyaan pengguna dalam database vektor yang tersimpan. Tahap ini bertujuan untuk menemukan informasi yang paling relevan dengan pertanyaan pengguna dengan cepat, dan merupakan tahap yang sangat penting yang berhubungan langsung dengan kinerja sistem RAG secara keseluruhan.
Kebutuhan akan mesin pencari
- Memberikan informasi yang akurat: Mesin pencari mencari informasi yang paling relevan dengan pertanyaan pengguna, sehingga memungkinkan sistem menghasilkan jawaban yang akurat dan berguna. Jika proses ini tidak dilakukan secara efektif, jawaban yang dihasilkan mungkin berkualitas buruk.
- Mengurangi waktu respons: Dengan menggunakan algoritma pencarian yang efisien untuk mengambil informasi yang relevan dengan cepat dari database, waktu respons sistem secara keseluruhan menjadi lebih singkat. Hal ini berdampak langsung pada peningkatan pengalaman pengguna.
- Pengoptimalan : Dengan mengekstraksi hanya informasi yang diperlukan melalui proses pencarian yang efektif, Anda dapat mengoptimalkan penggunaan sumber daya sistem dan mengurangi pemrosesan data yang tidak perlu.
Bagaimana cara kerjanya
- Vektorisasi pertanyaan: Mengubah pertanyaan pengguna ke dalam bentuk vektor. Proses ini dilakukan dengan menggunakan teknik yang mirip dengan langkah penyematan. Vektor pertanyaan yang telah dikonversi digunakan sebagai titik referensi untuk tugas pencarian berikutnya.
- Perbandingan Kemiripan Vektor: Menghitung kemiripan antara vektor dokumen yang tersimpan dan vektor pertanyaan. Hal ini terutama dilakukan dengan menggunakan metode matematika seperti kesamaan kosinus dan Max Marginal Relevance (MMR).
- Pilih Dokumen Teratas : Pilih N dokumen teratas yang paling relevan berdasarkan nilai kemiripan yang dihitung. Dokumen-dokumen ini digunakan pada langkah berikutnya untuk menghasilkan jawaban atas pertanyaan pengguna.
- Kembalikan informasi dokumen : Meneruskan informasi tentang dokumen yang dipilih ke langkah berikutnya (pembuatan prompt). Informasi ini dapat mencakup konten dokumen, lokasi, metadata, dll.
Pentingnya menggunakan mesin pencari (search engine)
Mesin pencari memainkan peran penting dalam menentukan kualitas pengambilan informasi dalam sistem RAG. Tanpa mesin pencari yang efisien, sangat sulit untuk menemukan informasi yang relevan dengan cepat dan akurat dalam basis data yang besar.
Selain itu, mesin pencari memberikan konteks yang sesuai dengan pertanyaan pengguna, membantu model bahasa menghasilkan jawaban yang lebih akurat. Oleh karena itu, kinerja mesin pencari secara langsung memengaruhi efisiensi keseluruhan dan kepuasan pengguna dalam sistem RAG.
Sparse Retriever & Dense Retriever
Sparse Retriever dan Dense Retriever adalah dua metode utama yang digunakan dalam sistem pengambilan informasi. Mereka digunakan di bidang pengolahan bahasa alami, khususnya saat mengambil dokumen yang relevan dari sekumpulan besar dokumen.
Sparse Retriever (retriever jarak jauh)
Sparse Retriever memproses dokumen dan kueri dengan mengubahnya menjadi vektor kata kunci diskrit. Metode ini terutama menggunakan teknik pencarian informasi tradisional seperti Term Frequency-Inverse Document Frequency (TF-IDF) atau BM25.
- TF-IDF (Term Frequency-Inverse Document Frequency): Menghitung tingkat kepentingan sebuah kata dengan merefleksikan frekuensi kemunculan kata tersebut dalam sebuah dokumen dan jumlah dokumen yang memuat kata tersebut. Di sini, kata-kata yang sering muncul tetapi jarang muncul di seluruh kumpulan dokumen diberi bobot yang lebih tinggi.
- BM25: Model yang ditingkatkan dari TF-IDF, meningkatkan akurasi pencarian dengan mempertimbangkan panjang dokumen. Model ini menyesuaikan bobot antara dokumen yang panjang dan pendek, dan secara relatif mengontrol pengaruh frekuensi kata.
Karakteristik dari Sparse Retriever adalah biaya komputasi yang rendah dan mudah diimplementasikan karena hanya mempertimbangkan ada atau tidaknya setiap kata. Namun, metode ini tidak mempertimbangkan relevansi semantik kata, dan kualitas hasil pencarian sangat bergantung pada pemilihan kata kunci.
Dense Retriever (retriever jarak dekat)
Dense Retriever menggunakan teknik pembelajaran mendalam terbaru untuk menyandikan dokumen dan kueri ke dalam vektor dimensi tinggi yang berkesinambungan. Dense Retriever dapat mengekspresikan konten semantik dokumen dengan lebih kaya, dan dapat mengambil dokumen yang terkait secara semantik meskipun kata kuncinya tidak sama persis.
Dense Retriever menggunakan jarak dalam ruang vektor (misalnya kemiripan kosinus) untuk menemukan dokumen yang paling relevan dengan kueri. Pendekatan ini sangat menguntungkan dalam memahami nuansa dan konteks bahasa, dan dapat memberikan hasil pencarian yang lebih akurat untuk kueri yang kompleks.
from langchain_community.vectorstores import FAISS
# Langkah 4: Membuat DB (Create DB) dan menyimpannya
# Membuat vector store.
vectorstore = FAISS.from_documents(documents=split_documents, embedding=embeddings)
# Langkah 5: Membuat Retriever Dense
# Menggunakan informasi yang tercakup dalam dokumen untuk mencari dan membuat.
faiss_retriever = vectorstore.as_retriever()
Perbedaan
- Representasi : Sparse Retriever menggunakan representasi berbasis kata kunci diskrit, sedangkan Dense Retriever menggunakan representasi semantik dalam ruang vektor kontinu.
- Kemampuan pemrosesan semantik*: Dense Retriever dapat memahami konteks dan makna lebih dalam, sehingga dapat mengambil dokumen yang relevan meskipun kata kuncinya tidak sama persis. Sparse Retrievers kurang mampu merefleksikan nuansa semantik ini.
- Cakupan: Untuk pertanyaan yang kompleks atau kueri bahasa alami, Dense Retriever mungkin lebih cocok, sementara Sparse Retriever mungkin lebih berguna untuk pencarian kata kunci yang sederhana dan jelas.
Kedua metode ini masing-masing memiliki kelebihan dan kekurangannya sendiri dan harus dipilih dengan tepat tergantung pada kasus penggunaan dan kebutuhan Anda.
Code
Dense Retriever
from langchain_community.vectorstores import FAISS
# Langkah 4: Membuat DB (Create DB) dan menyimpannya
# Membuat vector store.
vectorstore = FAISS.from_documents(documents=split_documents, embedding=embeddings)
# Langkah 5: Membuat Retriever Dense
# Menggunakan informasi yang tercakup dalam dokumen untuk mencari dan membuat.
faiss_retriever = vectorstore.as_retriever()
Sparse Retriever
from langchain_community.retrievers import BM25Retriever
# Langkah 5: Membuat Sparse Retriever
# Mencari dan menghasilkan informasi yang terdapat dalam dokumen.
bm25_retriever = BM25Retriever.from_documents(split_documents)