Terhubung dengan kami

Kecerdasan Umum Buatan

Kekuatan Reranker dan Pengambilan Dua Tahap untuk Pengambilan Augmented Generation

mm
Pengambilan Augmented Generation

Dalam hal pemrosesan bahasa alami (NLP) dan pengambilan informasi, kemampuan untuk mengambil informasi relevan secara efisien dan akurat adalah hal yang terpenting. Seiring dengan perkembangan bidang ini, teknik dan metodologi baru sedang dikembangkan untuk meningkatkan kinerja sistem pengambilan, khususnya dalam konteks Pengambilan Augmented Generation (LAP). Salah satu teknik tersebut, yang dikenal sebagai pengambilan dua tahap dengan reranker, telah muncul sebagai solusi ampuh untuk mengatasi keterbatasan yang melekat pada metode pengambilan tradisional.

Dalam artikel ini, kami membahas seluk-beluk pengambilan dua tahap dan reranker, mengeksplorasi prinsip-prinsip dasarnya, strategi implementasi, dan manfaat yang ditawarkannya dalam meningkatkan akurasi dan efisiensi sistem RAG. Kami juga akan memberikan contoh praktis dan cuplikan kode untuk mengilustrasikan konsep dan memfasilitasi pemahaman yang lebih mendalam tentang teknik mutakhir ini.

Memahami Retrieval Augmented Generation (RAG)

agen swe LLM

Sebelum membahas secara spesifik tentang pengambilan dua tahap dan reranker, mari kita tinjau kembali konsep Retrieval Augmented Generation (RAG). RAG adalah teknik yang memperluas pengetahuan dan kapabilitas model bahasa besar (LLM) dengan menyediakan akses ke sumber informasi eksternal, seperti basis data atau koleksi dokumen. Baca selengkapnya dari artikel "Menyelami Lebih Dalam tentang Retrieval Augmented Generation di LLM".

Proses RAG yang khas melibatkan langkah-langkah berikut:

  1. Pertanyaan: Pengguna mengajukan pertanyaan atau memberikan instruksi kepada sistem.
  2. Pengambilan:Sistem menanyakan basis data vektor atau kumpulan dokumen untuk menemukan informasi yang relevan dengan pertanyaan pengguna.
  3. Augmentasi:Informasi yang diambil digabungkan dengan pertanyaan atau instruksi asli pengguna.
  4. Generasi: Model bahasa memproses masukan yang ditambah dan menghasilkan respons, memanfaatkan informasi eksternal untuk meningkatkan keakuratan dan kelengkapan keluarannya.

Meskipun RAG telah terbukti menjadi teknik yang ampuh, namun hal ini bukannya tanpa tantangan. Salah satu permasalahan utama terletak pada tahap pengambilan, dimana metode pengambilan tradisional mungkin gagal mengidentifikasi dokumen yang paling relevan, sehingga menghasilkan respons yang kurang optimal atau tidak akurat dari model bahasa.

Perlunya Pengambilan Dua Tahap dan Pemeringkatan Ulang

Metode pengambilan tradisional, seperti yang didasarkan pada pencocokan kata kunci atau model ruang vektor, sering kali kesulitan menangkap nuansa hubungan semantik antara kueri dan dokumen. Keterbatasan ini dapat mengakibatkan pengambilan dokumen yang hanya relevan secara dangkal atau kehilangan informasi penting yang dapat meningkatkan kualitas respons yang dihasilkan secara signifikan.

Untuk mengatasi tantangan ini, para peneliti dan praktisi telah beralih ke pengambilan dua tahap dengan pemeringkatan ulang. Pendekatan ini melibatkan proses dua langkah:

  1. Pengambilan Awal: Pada tahap pertama, sejumlah besar dokumen yang mungkin relevan diambil menggunakan metode pengambilan yang cepat dan efisien, seperti model ruang vektor atau pencarian berbasis kata kunci.
  2. Pemeringkatan ulang: Pada tahap kedua, model pemeringkatan yang lebih canggih digunakan untuk menyusun ulang dokumen yang diambil pada awalnya berdasarkan relevansinya dengan kueri, sehingga secara efektif menempatkan dokumen yang paling relevan ke daftar teratas.

Model pemeringkatan ulang, sering kali berupa jaringan saraf atau arsitektur berbasis transformator, dilatih secara khusus untuk menilai relevansi dokumen dengan kueri tertentu. Dengan memanfaatkan kemampuan pemahaman bahasa alami tingkat lanjut, pemeringkatan ulang dapat menangkap nuansa semantik dan hubungan kontekstual antara kueri dan dokumen, sehingga menghasilkan peringkat yang lebih akurat dan relevan.

Manfaat Pengambilan Dua Tahap dan Pemeringkatan Ulang

Penerapan pengambilan dua tahap dengan reranker menawarkan beberapa manfaat signifikan dalam konteks sistem RAG:

  1. Akurasi yang Ditingkatkan: Dengan memberi peringkat ulang pada dokumen yang pertama kali diambil dan menaikkan dokumen yang paling relevan ke posisi teratas, sistem dapat memberikan informasi yang lebih akurat dan tepat ke model bahasa, sehingga menghasilkan tanggapan yang dihasilkan dengan kualitas lebih tinggi.
  2. Masalah Di Luar Domain yang Dimitigasi: Model penyematan yang digunakan untuk pengambilan tradisional sering kali dilatih pada korpora teks tujuan umum, yang mungkin tidak cukup menangkap bahasa dan semantik khusus domain. Di sisi lain, model pemeringkatan ulang dapat dilatih pada data spesifik domain, sehingga mengurangi masalah “di luar domain” dan meningkatkan relevansi dokumen yang diambil dalam domain khusus.
  3. Skalabilitas: Pendekatan dua tahap memungkinkan penskalaan yang efisien dengan memanfaatkan metode pengambilan yang cepat dan ringan pada tahap awal, sambil mempertahankan proses pemeringkatan yang lebih intensif secara komputasi untuk subkumpulan dokumen yang lebih kecil.
  4. keluwesan: Model pemeringkatan ulang dapat ditukar atau diperbarui secara independen dari metode pengambilan awal, memberikan fleksibilitas dan kemampuan beradaptasi terhadap kebutuhan sistem yang terus berkembang.

ColBERT: Interaksi Terlambat yang Efisien dan Efektif

Salah satu model yang menonjol dalam bidang reranking adalah ColBERT (Interaksi Terlambat yang Dikontekstualisasikan atas BERT). ColBERT adalah model pemeringkatan ulang dokumen yang memanfaatkan kemampuan pemahaman bahasa BERT yang mendalam sambil memperkenalkan mekanisme interaksi baru yang dikenal sebagai “interaksi terlambat”.

ColBERT: Pencarian Bagian yang Efisien dan Efektif melalui Interaksi Terlambat yang Dikontekstualisasikan atas BERT

ColBERT: Pencarian Bagian yang Efisien dan Efektif melalui Interaksi Terlambat yang Dikontekstualisasikan atas BERT

Mekanisme interaksi yang terlambat di ColBERT memungkinkan pengambilan yang efisien dan tepat dengan memproses kueri dan dokumen secara terpisah hingga tahap akhir proses pengambilan. Secara khusus, ColBERT secara independen mengkodekan kueri dan dokumen menggunakan BERT, dan kemudian menggunakan langkah interaksi ringan namun kuat yang memodelkan kesamaan halusnya. Dengan menunda tetapi mempertahankan interaksi terperinci ini, ColBERT dapat memanfaatkan ekspresi model bahasa mendalam sekaligus memperoleh kemampuan untuk melakukan pra-komputasi representasi dokumen secara offline, sehingga sangat mempercepat pemrosesan kueri.

Arsitektur interaksi akhir ColBERT menawarkan beberapa manfaat, termasuk peningkatan efisiensi komputasi, skalabilitas dengan ukuran koleksi dokumen, dan penerapan praktis untuk skenario dunia nyata. Selain itu, ColBERT telah disempurnakan lebih lanjut dengan teknik-teknik seperti supervisi denoisasi dan kompresi residual (dalam ColBERTv2), yang menyempurnakan proses pelatihan dan mengurangi jejak ruang model sekaligus mempertahankan efektivitas pengambilan yang tinggi.

Cuplikan kode ini menunjukkan cara mengonfigurasi dan menggunakan model jina-colbert-v1-en untuk mengindeks kumpulan dokumen, memanfaatkan kemampuannya untuk menangani konteks panjang secara efisien.

Menerapkan Pengambilan Dua Tahap dengan Reranker

Setelah memahami prinsip-prinsip di balik pengambilan dua tahap dan reranker, mari kita jelajahi implementasi praktisnya dalam konteks sistem RAG. Kita akan memanfaatkan pustaka dan kerangka kerja populer untuk mendemonstrasikan integrasi teknik-teknik ini.

Menyiapkan Lingkungan

Sebelum kita mulai kodenya, mari kita siapkan lingkungan pengembangan kita. Kita akan menggunakan Python dan beberapa pustaka NLP populer, termasuk Hugging Face Transformers, Sentence Transformers, dan LanceDB.

# Install required libraries
!pip install datasets huggingface_hub sentence_transformers lancedb

Persiapan data

Untuk tujuan 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>

Berikutnya, kami akan melakukan praproses data dan membaginya menjadi potongan-potongan yang lebih kecil untuk memudahkan 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 pengambilan awal, kita akan menggunakan model Sentence Transformer untuk mengkodekan dokumen dan kueri kita ke dalam representasi vektor padat, dan kemudian melakukan perkiraan pencarian tetangga terdekat menggunakan database vektor seperti LanceDB.
from sentence_transformers import SentenceTransformer
from lancedb import lancedb

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

# Create LanceDB vector store
db = lancedb.lancedb('/path/to/store')
db.create_collection('docs', vector_dimension=model.get_sentence_embedding_dimension())

# Index documents
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

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

# Create LanceDB vector store
db = lancedb.lancedb('/path/to/store')
db.create_collection('docs', vector_dimension=model.get_sentence_embedding_dimension())

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

Dengan dokumen kita terindeks, kita dapat melakukan pengambilan awal dengan mencari tetangga terdekat dengan vektor kueri tertentu.

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)

Pemeringkatan ulang

Setelah pengambilan awal, kami akan menggunakan model pemeringkatan ulang untuk mengurutkan ulang dokumen yang diambil berdasarkan relevansinya dengan kueri. Dalam contoh ini, kami akan menggunakan pemeringkatan ulang ColBERT, model berbasis transformator yang cepat dan akurat yang dirancang khusus untuk pemeringkatan dokumen.

from lancedb.rerankers import ColbertReranker

reranker = ColbertReranker()

# Rerank initial documents
reranked_docs = reranker.rerank(query, initial_docs)

reranked_docs list sekarang berisi dokumen yang disusun ulang berdasarkan relevansinya dengan kueri, sebagaimana ditentukan oleh pemeringkatan ulang ColBERT.

Augmentasi dan Generasi

Setelah dokumen yang telah diperingkat ulang dan relevan tersedia, kita dapat melanjutkan ke tahap penambahan dan pembuatan alur kerja RAG. Kita akan menggunakan model bahasa dari pustaka Hugging Face Transformers untuk menghasilkan respons akhir.

from transformers import AutoTokenizer, AutoModelForSeq2SeqLM

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

# Augment query with reranked documents
augmented_query = query + " " + " ".join(reranked_docs[:3])

# Generate response from language model
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 cuplikan kode di atas, kami menambah kueri asli dengan tiga dokumen teratas yang diberi peringkat ulang, sehingga membuat augmented_query. Kami kemudian meneruskan kueri tambahan ini ke model bahasa T5, yang menghasilkan respons berdasarkan konteks yang disediakan.

response Variabel akan berisi keluaran akhir, memanfaatkan informasi eksternal dari dokumen yang diambil dan diurutkan ulang untuk memberikan jawaban yang lebih akurat dan komprehensif terhadap kueri awal.

Teknik dan Pertimbangan Tingkat Lanjut

Sementara implementasi yang telah kita bahas menyediakan landasan yang kuat untuk mengintegrasikan pengambilan dua tahap dan penyusunan ulang peringkat ke dalam sistem RAG, ada beberapa teknik dan pertimbangan lanjutan yang dapat lebih meningkatkan kinerja dan ketahanan pendekatan tersebut.

  1. Perluasan Kueri: Untuk meningkatkan tahap pengambilan awal, Anda dapat menggunakan teknik perluasan kueri, yang melibatkan penambahan kueri asli dengan istilah atau frasa terkait. Hal ini dapat membantu mengambil kumpulan dokumen yang mungkin relevan dan lebih beragam.
  2. Pemeringkatan Ulang Ensembel: Daripada mengandalkan satu model pemeringkatan ulang, Anda dapat menggabungkan beberapa pemeringkatan ulang ke dalam satu kesatuan, memanfaatkan kekuatan model yang berbeda untuk meningkatkan kinerja secara keseluruhan.
  3. Menyempurnakan Reranker: Meskipun model pemeringkatan yang telah dilatih sebelumnya bisa efektif, penyempurnaannya pada data spesifik domain dapat lebih meningkatkan kemampuannya dalam menangkap sinyal semantik dan relevansi spesifik domain.
  4. Pengambilan Iteratif dan Pemeringkatan Ulang: Dalam beberapa kasus, satu iterasi pengambilan dan pemeringkatan ulang mungkin tidak cukup. Anda dapat menjelajahi pendekatan berulang, yang mana keluaran model bahasa digunakan untuk menyempurnakan proses kueri dan pengambilan, sehingga menghasilkan sistem yang lebih interaktif dan dinamis.
  5. Menyeimbangkan Relevansi dan KeberagamanMeskipun pemeringkatan ulang bertujuan untuk mempromosikan dokumen yang paling relevan, penting untuk mencapai keseimbangan antara relevansi dan keberagaman. Menerapkan teknik-teknik yang mendorong keberagaman dapat membantu mencegah sistem menjadi terlalu sempit atau bias dalam sumber informasinya.
  6. Metrik EvaluasiUntuk menilai efektivitas pendekatan pengambilan dan pemeringkatan ulang dua tahap Anda, Anda perlu menentukan metrik evaluasi yang tepat. Metrik ini dapat mencakup metrik pengambilan informasi tradisional seperti presisi, perolehan kembali, dan peringkat resiprokal rata-rata (MRR), serta metrik khusus tugas yang disesuaikan dengan kasus penggunaan Anda.

Kesimpulan

Retrieval Augmented Generation (RAG) telah muncul sebagai teknik ampuh untuk meningkatkan kemampuan model bahasa besar dengan memanfaatkan sumber informasi eksternal. Namun, metode pengambilan tradisional sering kali kesulitan mengidentifikasi dokumen yang paling relevan, sehingga menghasilkan kinerja yang kurang optimal.

Pengambilan dua tahap dengan reranker menawarkan solusi menarik untuk tantangan ini. Dengan menggabungkan tahap pengambilan awal yang cepat dengan model pemeringkatan ulang yang lebih canggih, pendekatan ini dapat secara signifikan meningkatkan keakuratan dan relevansi dokumen yang diambil, yang pada akhirnya menghasilkan respons yang dihasilkan dengan kualitas lebih tinggi dari model bahasa.

Saya telah menghabiskan lima tahun terakhir membenamkan diri dalam dunia Machine Learning dan Deep Learning yang menakjubkan. Semangat dan keahlian saya telah membuat saya berkontribusi pada lebih dari 50 proyek rekayasa perangkat lunak yang beragam, dengan fokus khusus pada AI/ML. Keingintahuan saya yang berkelanjutan juga menarik saya ke Natural Language Processing, bidang yang ingin saya jelajahi lebih jauh.