AGI dan AI masa depan

Kekuatan Rerankers dan Pencarian Dua Tahap untuk Generasi yang Ditingkatkan dengan Pencarian

mm
Tambahkan Unite.AI ke sumber pilihan Anda di Google

Ketika kita berbicara tentang pemrosesan bahasa alami (NLP) dan pengambilan informasi, kemampuan untuk mengambil informasi yang relevan dengan efisien dan akurat sangat penting. Seiring dengan perkembangan bidang ini, teknik dan metodologi baru sedang dikembangkan untuk meningkatkan kinerja sistem pengambilan, terutama dalam konteks Generasi yang Ditingkatkan dengan Pencarian (RAG). Salah satu teknik tersebut, yang dikenal sebagai pencarian dua tahap dengan rerankers, telah muncul sebagai solusi yang kuat untuk mengatasi keterbatasan metode pengambilan tradisional.

Dalam artikel ini, kita akan membahas kerumitan pencarian dua tahap dan rerankers, mengeksplorasi prinsip-prinsip dasar, strategi implementasi, dan manfaat yang mereka tawarkan dalam meningkatkan akurasi dan efisiensi sistem RAG. Kami juga akan menyediakan contoh praktis dan potongan kode untuk mengilustrasikan konsep dan memfasilitasi pemahaman yang lebih dalam tentang teknik canggih ini.

Memahami Generasi yang Ditingkatkan dengan Pencarian (RAG)

swe agent LLM

Sebelum kita memasuki spesifik pencarian dua tahap dan rerankers, mari kita singgung kembali konsep Generasi yang Ditingkatkan dengan Pencarian (RAG). RAG adalah teknik yang memperluas pengetahuan dan kemampuan model bahasa besar (LLM) dengan memberikan mereka akses ke sumber informasi eksternal, seperti basis data atau koleksi dokumen. Refer lebih dari artikel “A Deep Dive into Retrieval Augmented Generation in LLM“.

Proses RAG yang khas melibatkan langkah-langkah berikut:

  1. Pertanyaan: Pengguna mengajukan pertanyaan atau memberikan instruksi kepada sistem.
  2. Pengambilan: Sistem mengquery basis data vektor atau koleksi dokumen untuk menemukan informasi yang relevan dengan pertanyaan pengguna.
  3. Peningkatan: Informasi yang diambil digabungkan dengan pertanyaan atau instruksi asli pengguna.
  4. Generasi: Model bahasa memproses input yang ditingkatkan dan menghasilkan respons, menggunakan informasi eksternal untuk meningkatkan akurasi dan kelengkapan output.

Meskipun RAG telah terbukti sebagai teknik yang kuat, itu tidak tanpa tantangan. Salah satu masalah kunci terletak pada tahap pengambilan, di mana metode pengambilan tradisional mungkin gagal mengidentifikasi dokumen yang paling relevan, menghasilkan respons yang suboptimal atau tidak akurat dari model bahasa.

Kebutuhan akan Pencarian Dua Tahap dan Rerankers

Metode pengambilan tradisional, seperti yang berbasis pada pencocokan kata kunci atau model ruang vektor, seringkali mengalami kesulitan untuk menangkap hubungan semantik yang nuansa antara pertanyaan dan dokumen. Keterbatasan ini dapat menghasilkan pengambilan dokumen yang hanya relevan secara superficial atau melewatkan informasi penting yang dapat secara signifikan meningkatkan kualitas respons yang dihasilkan.

Untuk mengatasi tantangan ini, peneliti dan praktisi telah beralih ke pencarian dua tahap dengan rerankers. Pendekatan ini melibatkan proses dua tahap:

  1. Pengambilan Awal: Pada tahap pertama, sebuah set dokumen yang potensial relevan diambil menggunakan metode pengambilan yang cepat dan efisien, seperti model ruang vektor atau pencarian berbasis kata kunci.
  2. Reranking: Pada tahap kedua, model reranking yang lebih canggih digunakan untuk mengatur ulang dokumen yang diambil awal berdasarkan relevansi mereka dengan pertanyaan, secara efektif membawa dokumen yang paling relevan ke atas daftar.

Model reranking, yang seringkali merupakan jaringan neural atau arsitektur berbasis transformer, secara khusus dilatih untuk menilai relevansi dokumen terhadap pertanyaan yang diberikan. Dengan memanfaatkan kemampuan pemahaman bahasa alami yang canggih, reranker dapat menangkap nuansa semantik dan hubungan kontekstual antara pertanyaan dan dokumen, menghasilkan peringkat yang lebih akurat dan relevan.

Manfaat Pencarian Dua Tahap dan Rerankers

Adopsi pencarian dua tahap dengan rerankers menawarkan beberapa manfaat signifikan dalam konteks sistem RAG:

  1. Peningkatan Akurasi: Dengan mengatur ulang dokumen yang diambil awal dan mempromosikan dokumen yang paling relevan ke atas, sistem dapat menyediakan informasi yang lebih akurat dan presisi kepada model bahasa, menghasilkan respons yang dihasilkan dengan kualitas lebih tinggi.
  2. Mengurangi Masalah Luar Domain: Model embedding yang digunakan untuk pengambilan tradisional seringkali dilatih pada korpus teks umum, yang mungkin tidak cukup menangkap bahasa dan semantik domain spesifik. Model reranking, di sisi lain, dapat dilatih pada data domain spesifik, mengurangi masalah “luar domain” dan meningkatkan relevansi dokumen yang diambil dalam domain khusus.
  3. Skalabilitas: Pendekatan dua tahap memungkinkan skala yang efisien dengan memanfaatkan metode pengambilan yang cepat dan ringan pada tahap awal, sementara proses reranking yang lebih intensif komputasi disimpan untuk subset dokumen yang lebih kecil.
  4. Fleksibilitas: Model reranking dapat diganti atau diperbarui secara independen dari metode pengambilan awal, menyediakan fleksibilitas dan adaptabilitas terhadap kebutuhan sistem yang berkembang.

ColBERT: Interaksi Akhir yang Efisien dan Efektif

Salah satu model yang menonjol dalam bidang reranking adalah ColBERT (Interaksi Akhir Kontekstual di Atas BERT). ColBERT adalah model reranking dokumen yang memanfaatkan kemampuan pemahaman bahasa dalam BERT sambil memperkenalkan mekanisme interaksi baru yang dikenal sebagai “interaksi akhir.”

ColBERT: Pencarian Pasase yang Efisien dan Efektif melalui Interaksi Akhir Kontekstual di Atas BERT

ColBERT: Pencarian Pasase yang Efisien dan Efektif melalui Interaksi Akhir Kontekstual di Atas BERT

Mekanisme interaksi akhir pada ColBERT memungkinkan pengambilan yang efisien dan presisi dengan memproses pertanyaan dan dokumen secara terpisah hingga tahap akhir proses pengambilan. Secara khusus, ColBERT mengkodekan pertanyaan dan dokumen secara independen menggunakan BERT, kemudian menggunakan langkah interaksi ringan namun kuat yang memodelkan kesamaan halus antara keduanya. Dengan menunda tetapi mempertahankan interaksi halus ini, ColBERT dapat memanfaatkan ekspresivitas model bahasa dalam sambil memperoleh kemampuan untuk menghitung representasi dokumen secara offline, secara signifikan mempercepat pengolahan pertanyaan.

Arsitektur interaksi akhir ColBERT menawarkan beberapa kelebihan, termasuk peningkatan efisiensi komputasi, skalabilitas dengan ukuran koleksi dokumen, dan aplikabilitas praktis untuk skenario dunia nyata. Selain itu, ColBERT telah ditingkatkan dengan teknik seperti pengawasan denoised dan kompresi residu (pada ColBERTv2), yang memperbaiki proses pelatihan dan mengurangi jejak ruang model sambil mempertahankan efektivitas pengambilan yang tinggi.

Mengimplementasikan Pencarian Dua Tahap dengan Rerankers

Sekarang bahwa kita telah memahami prinsip-prinsip di balik pencarian dua tahap dan rerankers, mari kita jelajahi implementasi praktisnya dalam konteks sistem RAG. Kami akan menggunakan perpustakaan dan kerangka kerja populer untuk mendemonstrasikan integrasi teknik-teknik ini.

Mengatur Lingkungan

Sebelum kita memulai, mari kita atur lingkungan pengembangan kita. Kami akan menggunakan Python dan beberapa perpustakaan NLP populer, termasuk Hugging Face Transformers, Sentence Transformers, dan LanceDB.

# Instal perpustakaan yang diperlukan
!pip install datasets huggingface_hub sentence_transformers lancedb

Persiapan Data

Untuk tujuan demonstrasi, kita akan menggunakan dataset “ai-arxiv-chunked” dari Hugging Face Datasets, yang berisi lebih dari 400 makalah ArXiv tentang pembelajaran mesin, pemrosesan bahasa alami, dan model bahasa besar.

from datasets import load_dataset

<p>dataset = load_dataset(&quot;jamescalam/ai-arxiv-chunked&quot;, split=&quot;train&quot;)</p>

&amp;lt;pre&amp;gt;

Kemudian, kita akan memproses data dan membaginya menjadi potongan-potongan yang lebih kecil untuk memfasilitasi pengambilan dan pengolahan yang efisien.

from transformers import AutoTokenizer

<p>tokenizer = AutoTokenizer.from_pretrained(&quot;bert-base-uncased&quot;)</p>

<p>def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors=&quot;pt&quot;, truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts</p>

<p>chunked_data = []
for doc in dataset:
text = doc[&quot;chunk&quot;]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)</p>

Untuk tahap pengambilan awal, kita akan menggunakan model Sentence Transformer untuk mengkodekan dokumen dan pertanyaan ke dalam representasi vektor yang padat, kemudian melakukan pencarian tetangga terdekat secara approximatif menggunakan basis data vektor seperti LanceDB.
from sentence_transformers import SentenceTransformer
from lancedb import lancedb

<p># Muat model Sentence Transformer
model = SentenceTransformer(&#039;all-MiniLM-L6-v2&#039;)</p>

<p># Buat toko vektor LanceDB
db = lancedb.lancedb(&#039;/path/to/store&#039;)
db.create_collection(&#039;docs&#039;, vector_dimension=model.get_sentence_embedding_dimension())</p>

<p># Indeks dokumen
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document(&#039;docs&#039;, vector, text)</p>

<p>from sentence_transformers import SentenceTransformer
from lancedb import lancedb</p>

<p># Muat model Sentence Transformer
model = SentenceTransformer(&#039;all-MiniLM-L6-v2&#039;)</p>

<p># Buat toko vektor LanceDB
db = lancedb.lancedb(&#039;/path/to/store&#039;)
db.create_collection(&#039;docs&#039;, vector_dimension=model.get_sentence_embedding_dimension())</p>

<p># Indeks dokumen
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document(&#039;docs&#039;, vector, text)

Dengan dokumen yang diindeks, kita dapat melakukan pengambilan awal dengan menemukan tetangga terdekat dari vektor pertanyaan yang diberikan.

from transformers import AutoTokenizer

<p>tokenizer = AutoTokenizer.from_pretrained(&quot;bert-base-uncased&quot;)</p>

<p>def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors=&quot;pt&quot;, truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts</p>

<p>chunked_data = []
for doc in dataset:
text = doc[&quot;chunk&quot;]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)

Reranking

Setelah pengambilan awal, kita akan menggunakan model reranking untuk mengatur ulang dokumen yang diambil berdasarkan relevansi mereka dengan pertanyaan. Dalam contoh ini, kita akan menggunakan model reranking ColBERT, sebuah model transformer berbasis yang cepat dan akurat yang dirancang khusus untuk peringkat dokumen.

from lancedb.rerankers import ColbertReranker

reranker = ColbertReranker()

<p># Rerank dokumen awal
reranked_docs = reranker.rerank(query, initial_docs)

Daftar reranked_docs sekarang berisi dokumen yang diatur ulang berdasarkan relevansi mereka dengan pertanyaan, seperti yang ditentukan oleh model reranking ColBERT.

Peningkatan dan Generasi

Dengan dokumen yang diatur ulang dan relevan di tangan, kita dapat melanjutkan ke tahap peningkatan dan generasi dari pipa RAG. Kita akan menggunakan model bahasa dari perpustakaan Hugging Face Transformers untuk menghasilkan respons akhir.

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

<p>tokenizer = AutoTokenizer.from_pretrained(&quot;t5-base&quot;)
model = AutoModelForSeq2SeqLM.from_pretrained(&quot;t5-base&quot;)</p>

<p># Tingkatkan pertanyaan dengan dokumen yang diatur ulang
augmented_query = query + &quot; &quot; + &quot; &quot;.join(reranked_docs[:3])</p>

<p># Hasilkan respons dari model bahasa
input_ids = tokenizer.encode(augmented_query, return_tensors=&quot;pt&quot;)
output_ids = model.generate(input_ids, max_length=500)
response = tokenizer.decode(output_ids[0], skip_special_tokens=True)</p>

print(response)

Dalam potongan kode di atas, kita meningkatkan pertanyaan asli dengan tiga dokumen yang diatur ulang teratas, membuat augmented_query. Kemudian kita lewatkan augmented query ini ke model bahasa T5, yang menghasilkan respons berdasarkan konteks yang disediakan.

Variabel response akan berisi output akhir, menggunakan informasi eksternal dari dokumen yang diambil dan diatur ulang untuk menyediakan jawaban yang lebih akurat dan komprehensif untuk pertanyaan asli.

Teknik dan Pertimbangan Lanjutan

Sementara implementasi yang telah kita bahas menyediakan fondasi yang solid untuk mengintegrasikan pencarian dua tahap dan rerankers ke dalam sistem RAG, ada beberapa teknik dan pertimbangan lanjutan yang dapat lebih meningkatkan kinerja dan keandalan pendekatan ini.

  1. Perluasan Pertanyaan: Untuk meningkatkan tahap pengambilan awal, Anda dapat menggunakan teknik perluasan pertanyaan, yang melibatkan penambahan istilah atau frasa terkait ke pertanyaan asli. Ini dapat membantu mengambil set dokumen yang lebih beragam yang potensial relevan.
  2. Reranking Ensemble: Alih-alih mengandalkan model reranking tunggal, Anda dapat menggabungkan beberapa reranker menjadi ensemble, memanfaatkan kekuatan model yang berbeda untuk meningkatkan kinerja secara keseluruhan.
  3. Pelatihan Rerankers: Meskipun model reranking pra-latih dapat efektif, melatihnya pada data domain spesifik dapat lebih meningkatkan kemampuan mereka untuk menangkap semantik dan sinyal relevansi domain spesifik.
  4. Pengambilan dan Reranking Iteratif: Dalam beberapa kasus, satu iterasi pengambilan dan reranking mungkin tidak cukup. Anda dapat menjelajahi pendekatan iteratif, di mana output model bahasa digunakan untuk memperbarui pertanyaan dan proses pengambilan, menghasilkan sistem yang lebih interaktif dan dinamis.
  5. Seimbang Relevansi dan Keanekaragaman: Sementara rerankers bertujuan untuk mempromosikan dokumen yang paling relevan, penting untuk mencapai keseimbangan antara relevansi dan keanekaragaman. Mengintegrasikan teknik yang mempromosikan keanekaragaman dapat membantu mencegah sistem menjadi terlalu sempit atau bias dalam sumber informasinya.
  6. Metri Evaluasi: Untuk menilai efektivitas pendekatan pencarian dua tahap dan reranking, Anda perlu mendefinisikan metri evaluasi yang sesuai. Ini mungkin termasuk metri pengambilan informasi tradisional seperti presisi, recall, dan mean reciprocal rank (MRR), serta metri tugas spesifik yang disesuaikan dengan kasus penggunaan Anda.

Kesimpulan

Generasi yang Ditingkatkan dengan Pencarian (RAG) telah muncul sebagai teknik yang kuat untuk meningkatkan kemampuan model bahasa besar dengan memanfaatkan sumber informasi eksternal. Namun, metode pengambilan tradisional seringkali mengalami kesulitan untuk mengidentifikasi dokumen yang paling relevan, menghasilkan kinerja yang suboptimal.

Pencarian dua tahap dengan rerankers menawarkan solusi yang kuat untuk tantangan ini. Dengan menggabungkan tahap pengambilan awal yang cepat dengan model reranking yang lebih canggih, pendekatan ini dapat secara signifikan meningkatkan akurasi dan relevansi dokumen yang diambil, pada akhirnya menghasilkan respons yang dihasilkan dengan kualitas lebih tinggi dari model bahasa.

Saya telah menghabiskan lima tahun terakhir dengan membenamkan diri dalam dunia Machine Learning dan Deep Learning yang menarik. Minat dan keahlian saya telah memimpin saya untuk berkontribusi pada lebih dari 50 proyek rekayasa perangkat lunak yang beragam, dengan fokus khusus pada AI/ML. Rasa ingin tahu saya yang terus-menerus juga telah menarik saya ke arah Natural Language Processing, sebuah bidang yang saya ingin jelajahi lebih lanjut.