Connect with us

AGI

Kekuatan Rerankers dan Pencarian Dua-Tahap untuk Pembangkitan yang Diperkuat Pencarian

mm
Retrieval Augmented Generation

Ketika datang ke pemrosesan bahasa alami (NLP) dan pencarian informasi, kemampuan untuk mengambil informasi yang relevan dengan efisien dan akurat sangat penting. Ketika bidang ini terus berkembang, teknik dan metodologi baru sedang dikembangkan untuk meningkatkan kinerja sistem pencarian, terutama dalam konteks Pembangkitan yang Diperkuat Pencarian (RAG). Salah satu teknik tersebut, yang dikenal sebagai pencarian dua-tahap dengan rerankers, telah muncul sebagai solusi yang kuat untuk mengatasi keterbatasan bawaan metode pencarian tradisional.

Dalam artikel ini, kita 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 Pembangkitan yang Diperkuat Pencarian (RAG)

swe agent LLM

Sebelum memasuki spesifik pencarian dua-tahap dan rerankers, mari kita singgung kembali konsep Pembangkitan yang Diperkuat Pencarian (RAG). RAG adalah teknik yang memperluas pengetahuan dan kemampuan model bahasa besar (LLM) dengan memberikan mereka akses ke sumber informasi eksternal, seperti database 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. Query: Pengguna mengajukan pertanyaan atau memberikan instruksi kepada sistem.
  2. Pencarian: Sistem mengquery basis data vektor atau koleksi dokumen untuk menemukan informasi yang relevan dengan query pengguna.
  3. Pengayaan: Informasi yang diperoleh digabungkan dengan query asli atau instruksi pengguna.
  4. Pembangkitan: Model bahasa memproses input yang diperkaya dan menghasilkan respons, memanfaatkan informasi eksternal untuk meningkatkan akurasi dan kelengkapan outputnya.

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

Kebutuhan untuk Pencarian Dua-Tahap dan Rerankers

Metode pencarian tradisional, seperti yang berbasis pada pencocokan kata kunci atau model ruang vektor, seringkali bergelut untuk menangkap hubungan semantik yang halus antara query dan dokumen. Keterbatasan ini dapat menghasilkan pengambilan dokumen yang hanya relevan secara superficial atau melewatkan informasi krusial 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 langkah:

  1. Pencarian Awal: Pada tahap pertama, sebuah set dokumen yang potensial relevan diperoleh menggunakan metode pencarian 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 diperoleh awal berdasarkan relevansi mereka dengan query, secara efektif membawa dokumen yang paling relevan ke atas daftar.

Model reranking, seringkali sebuah jaringan saraf atau arsitektur berbasis transformer, secara khusus dilatih untuk menilai relevansi dokumen terhadap query yang diberikan. Dengan memanfaatkan kemampuan pemahaman bahasa alami yang canggih, reranker dapat menangkap nuansa semantik dan hubungan kontekstual antara query 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. Akurasi yang Ditingkatkan: Dengan mengatur ulang dokumen yang diperoleh 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 yang lebih berkualitas.
  2. Masalah Luar-Domain yang Diminimalkan: Model yang digunakan untuk pencarian 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, meminimalkan masalah “luar-domain” dan meningkatkan relevansi dokumen yang diperoleh dalam domain yang spesifik.
  3. Skalabilitas: Pendekatan dua-tahap memungkinkan skala yang efisien dengan memanfaatkan metode pencarian 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 dipertukarkan atau diperbarui secara independen dari metode pencarian awal, menyediakan fleksibilitas dan adaptabilitas terhadap kebutuhan sistem yang berkembang.

ColBERT: Interaksi Akhir yang Efisien dan Efektif

Salah satu model yang menonjol dalam ranah reranking adalah ColBERT (Interaksi Akhir yang Dikontekstualkan 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: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT

ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction over BERT

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

Arsitektur interaksi akhir ColBERT menawarkan beberapa keuntungan, termasuk efisiensi komputasi yang ditingkatkan, skalabilitas dengan ukuran koleksi dokumen, dan kemampuan praktis untuk skenario dunia nyata. Selain itu, ColBERT telah ditingkatkan dengan teknik seperti pengawasan yang dikeruhkan dan kompresi residual (dalam ColBERTv2), yang memperbarui proses pelatihan dan mengurangi jejak ruang model sambil mempertahankan efektivitas pengambilan yang tinggi.

Potongan kode ini menunjukkan cara mengkonfigurasi dan menggunakan model jina-colbert-v1-en untuk mengindeks koleksi dokumen, memanfaatkan kemampuan untuk menangani konteks panjang dengan efisien.

Mengimplementasikan Pencarian Dua-Tahap dengan Rerankers

Sekarang bahwa kita memiliki pemahaman tentang prinsip-prinsip di balik pencarian dua-tahap dan rerankers, mari kita jelajahi implementasi praktis dalam konteks sistem RAG. Kami akan menggunakan perpustakaan dan kerangka kerja populer untuk menunjukkan integrasi teknik-teknik ini.

Mengatur Lingkungan

Sebelum kita memasuki kode, 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 keperluan demonstrasi, kami 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

dataset = load_dataset("jamescalam/ai-arxiv-chunked", split="train")

<pre>

Selanjutnya, kami akan memproses data dan membaginya menjadi potongan-potongan kecil untuk memfasilitasi pengambilan dan pemrosesan yang efisien.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors="pt", truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts

chunked_data = []
for doc in dataset:
text = doc["chunk"]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)

Untuk tahap pencarian awal, kami akan menggunakan model Sentence Transformer untuk mengkode dokumen dan query kami menjadi representasi vektor yang padat, dan kemudian melakukan pencarian tetangga terdekat yang mendekati menggunakan basis data vektor seperti LanceDB.
from sentence_transformers import SentenceTransformer
from lancedb import lancedb

# Muat model Sentence Transformer
model = SentenceTransformer('all-MiniLM-L6-v2')

# Buat toko vektor LanceDB
db = lancedb.lancedb('/path/to/store')
db.create_collection('docs', vector_dimension=model.get_sentence_embedding_dimension())

# Indeks dokumen
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document('docs', vector, text)

from sentence_transformers import SentenceTransformer
from lancedb import lancedb

# Muat model Sentence Transformer
model = SentenceTransformer('all-MiniLM-L6-v2')

# Buat toko vektor LanceDB
db = lancedb.lancedb('/path/to/store')
db.create_collection('docs', vector_dimension=model.get_sentence_embedding_dimension())

# Indeks dokumen
for text in chunked_data:
vector = model.encode(text).tolist()
db.insert_document('docs', vector, text)

Dengan dokumen kami diindeks, kami dapat melakukan pencarian awal dengan menemukan tetangga terdekat dari vektor query yang diberikan.

from transformers import AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("bert-base-uncased")

def chunk_text(text, chunk_size=512, overlap=64):
tokens = tokenizer.encode(text, return_tensors="pt", truncation=True)
chunks = tokens.split(chunk_size - overlap)
texts = [tokenizer.decode(chunk) for chunk in chunks]
return texts

chunked_data = []
for doc in dataset:
text = doc["chunk"]
chunked_texts = chunk_text(text)
chunked_data.extend(chunked_texts)

Reranking

Setelah pencarian awal, kami akan menggunakan model reranking untuk mengatur ulang dokumen yang diperoleh berdasarkan relevansi mereka dengan query. Dalam contoh ini, kami akan menggunakan reranker ColBERT, model berbasis transformer yang cepat dan akurat yang secara khusus dirancang untuk peringkat dokumen.

from lancedb.rerankers import ColbertReranker

reranker = ColbertReranker()

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

Daftar reranked_docs sekarang berisi dokumen yang diatur ulang berdasarkan relevansi mereka dengan query, seperti yang ditentukan oleh reranker ColBERT.

Pengayaan dan Pembangkitan

Dengan dokumen yang diatur ulang dan relevan di tangan, kami dapat melanjutkan ke tahap pengayaan dan pembangkitan pipa RAG. Kami akan menggunakan model bahasa dari perpustakaan Hugging Face Transformers untuk menghasilkan respons akhir.

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

tokenizer = AutoTokenizer.from_pretrained("t5-base")
model = AutoModelForSeq2SeqLM.from_pretrained("t5-base")

# Ayunkan query dengan dokumen yang diatur ulang
augmented_query = query + " " + " ".join(reranked_docs[:3])

# Hasilkan respons dari model bahasa
input_ids = tokenizer.encode(augmented_query, return_tensors="pt")
output_ids = model.generate(input_ids, max_length=500)
response = tokenizer.decode(output_ids[0], skip_special_tokens=True)

print(response)

Dalam potongan kode di atas, kami mengayunkan query asli dengan tiga dokumen yang diatur ulang teratas, membuat augmented_query. Kami kemudian melewati query yang diperkaya ini ke model bahasa T5, yang menghasilkan respons berdasarkan konteks yang disediakan.

Variabel response akan berisi output akhir, memanfaatkan informasi eksternal dari dokumen yang diperoleh dan diatur ulang untuk memberikan jawaban yang lebih akurat dan komprehensif untuk query asli.

Teknik Lanjutan dan Pertimbangan

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

  1. Perluasan Query: Untuk meningkatkan tahap pencarian awal, Anda dapat menggunakan teknik perluasan query, yang melibatkan pengayaan query asli dengan istilah atau frasa terkait. Ini dapat membantu mengambil set dokumen yang lebih beragam yang potensial relevan.
  2. Reranking Ensemble: Sebagai gantinya mengandalkan model reranking tunggal, Anda dapat menggabungkan beberapa rerankers menjadi ensemble, memanfaatkan kekuatan model yang berbeda untuk meningkatkan kinerja secara keseluruhan.
  3. Pelatihan Rerankers: Sementara model reranking pra-dilatih dapat efektif, pelatihan mereka 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 query dan proses pengambilan, menghasilkan sistem yang lebih interaktif dan dinamis.
  5. Menyeimbangkan 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. Metric Evaluasi: Untuk menilai efektivitas pendekatan pencarian dua-tahap dan reranking Anda, Anda perlu mendefinisikan metric evaluasi yang sesuai. Ini mungkin termasuk metric pencarian informasi tradisional seperti presisi, recall, dan mean reciprocal rank (MRR), serta metric tugas-spesifik yang disesuaikan dengan kasus penggunaan Anda.

Kesimpulan

Pembangkitan yang Diperkuat Pencarian (RAG) telah muncul sebagai teknik yang kuat untuk meningkatkan kemampuan model bahasa besar dengan memanfaatkan sumber informasi eksternal. Namun, metode pencarian tradisional seringkali bergelut 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 pencarian awal yang cepat dengan model reranking yang lebih canggih, pendekatan ini dapat secara signifikan meningkatkan akurasi dan relevansi dokumen yang diperoleh, menghasilkan respons yang dihasilkan yang lebih berkualitas 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 membawa 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.