02. Retriever Kompresi Kontekstual


Retriever Kompresi Kontekstual

Salah satu tantangan yang dihadapi oleh sistem pencarian adalah ketika data dimasukkan ke dalam sistem, tidak diketahui sebelumnya kueri spesifik mana yang akan ditangani.

Ini berarti bahwa informasi yang paling relevan dengan kueri mungkin terkubur dalam dokumen yang berisi sejumlah besar teks yang tidak relevan.

Mengirimkan dokumen lengkap ini ke aplikasi dapat menyebabkan panggilan LLM yang lebih mahal dan respons yang lebih rendah.

ContextualCompressionRetriever dirancang untuk mengatasi masalah ini.

Idenya sederhana. Alih-alih langsung mengembalikan dokumen yang diambil sebagaimana adanya, Anda dapat menggunakan konteks kueri yang diberikan untuk mengompresi dokumen sehingga hanya informasi yang relevan yang dikembalikan.

“Mengompresi” di sini berarti mengompresi konten dokumen individual dan menyaring dokumen secara keseluruhan.

Untuk menggunakan Retriever Kompresi Kontekstual, Anda memerlukan yang berikut ini

  • Base Retriever

  • Document Compressor

ContextualCompressionRetriever meneruskan kueri ke base retriever, yang mendapatkan dokumen awal dan meneruskannya melalui document compressor.

Kompresi Dokumen mengambil daftar dokumen dan mengurangi daftar tersebut dengan mengurangi konten dokumen atau menghapus seluruh dokumen.

sumber: https://drive.google.com/uc?id=1CtNgWODXZudxAWSRiWgSGEoTNrUFT98v

Fungsi pretty_print_docs adalah fungsi pembantu yang mencetak daftar dokumen dengan indah.

Pengaturan Dasar Retriever

Mari kita mulai dengan menginisialisasi retriever penyimpanan vektor sederhana dan menyimpan dokumen teks dalam bentuk potongan-potongan.

Ketika kita mengajukan pertanyaan contoh kita, kita dapat melihat bahwa retriever mengembalikan satu atau dua dokumen yang relevan dan beberapa dokumen yang tidak relevan.

Bahkan dokumen yang relevan mengandung banyak informasi yang tidak relevan.

ContextualCompression

ContextualCompressionRetriever adalah DocumentCompressor yang kita buat dengan menggunakan LLMChainExtractor dan diterapkan pada retriever.

Memfilter dokumen dengan LLM

LLMChainFilter

LLMChainFilter adalah kompresor yang lebih sederhana namun lebih kuat yang menggunakan rantai LLM untuk menentukan dokumen mana yang akan disaring dan mana yang akan dikembalikan dari dokumen yang awalnya diambil.

Filter ini secara selektif mengembalikan dokumen tanpa mengubah (mengompresi) isinya.

Penyaring sematan (EmbeddingsFilter)

Membuat panggilan LLM tambahan untuk setiap dokumen yang diambil adalah mahal dan lambat.

EmbeddingsFilter menyediakan opsi yang lebih murah dan lebih cepat dengan menyematkan dokumen dan kueri dan hanya mengembalikan dokumen dengan sematan yang cukup mirip dengan kueri.

Hal ini menghemat biaya dan waktu komputasi dengan tetap menjaga relevansi hasil pencarian.

Proses pengompresan dan pengambilan dokumen yang relevan menggunakan EmbeddingsFilter dan ContextualCompressionRetriever.

  • Gunakan EmbeddingsFilter untuk memfilter dokumen yang berada di atas ambang batas kemiripan yang ditentukan (0,86).

Membuat pipeline (kompresor + konverter dokumen)

DocumentCompressorPipeline memungkinkan Anda menggabungkan beberapa kompresor secara berurutan.

Bersama dengan kompresor, Anda dapat menambahkan BaseDocumentTransformer ke pipeline, yang hanya melakukan transformasi pada sekumpulan dokumen tanpa melakukan kompresi kontekstual apa pun.

Sebagai contoh, TextSplitter dapat digunakan sebagai transformator dokumen untuk membagi dokumen menjadi bagian yang lebih kecil, dan EmbeddingsRedundantFilter dapat digunakan untuk memfilter dokumen yang duplikat berdasarkan kesamaan embeddings antar dokumen.

Di bawah ini, kita akan membuat pipeline kompresor dengan terlebih dahulu membagi dokumen menjadi bagian yang lebih kecil, lalu menghapus dokumen duplikat, dan memfilter berdasarkan relevansi dengan kueri.

Inisialisasi ContextualCompressionRetriever, dengan menggunakan pipeline_compressor sebagai base_compressor dan retriever sebagai base_retriever.

Last updated