01. Cross Encoder Reranker
Cross Encoder Reranker
Ikhtisar
Cross encoder reranker adalah teknik yang digunakan untuk meningkatkan performa sistem search augmented generation (RAG). Artikel ini adalah tentang Hugging Face cross encoder menggunakan model untuk membuat retriever didalam reranker untuk mengimplementasikan program.
Fitur utama dan cara kerjanya
Tujuan
- Mengurutkan ulang dokumen yang diambil untuk membawa dokumen yang paling relevan ke bagian atas daftar untuk sebuah pertanyaan.
Bagaimana cara kerjanya
- Mengambil pertanyaan dan dokumen sebagai masukan secara bersamaan dan memprosesnya
Bagaimana cara kerjanya
- Output langsung dari kemiripan menggunakan pertanyaan dan dokumen sebagai satu input
- Menganalisis pertanyaan dan dokumen secara bersamaan melalui mekanisme self-attention
Keuntungan
- Memungkinkan pengukuran kemiripan yang lebih akurat
- Mengeksplorasi secara mendalam kemiripan semantik antara pertanyaan dan dokumen
Keterbatasan
- Mahal secara komputasi dan memakan waktu
- Sulit untuk diterapkan secara langsung pada kumpulan dokumen yang besar
Penggunaan di dunia nyata
- Biasanya hanya memberi peringkat ulang pada k dokumen teratas dalam pencarian awal
- Gunakan bi-encoder untuk mengekstrak kandidat dengan cepat, lalu lakukan cross encoder untuk meningkatkan akurasi
Implementasi
- Gunakan model seperti model encoder silang Hugging Face atau BAAI/bge-reranker
- Mudah diintegrasikan dalam kerangka kerja seperti LangChain melalui komponen CrossEncoderReranker
Manfaat utama dari Reranker
- Pengukuran kemiripan yang lebih akurat
- Jelajahi kesamaan semantik yang lebih dalam
- Hasil pencarian yang lebih baik
- Peningkatan kinerja sistem RAG
- Integrasi yang fleksibel
- Beberapa model pra-pelatihan untuk dipilih
Mengatur jumlah dokumen saat menggunakan Reranker
- Biasanya melakukan perankingan ulang pada 5-10 dokumen teratas
- Jumlah dokumen yang optimal perlu ditentukan melalui eksperimen dan evaluasi
Trade-off saat menggunakan Reranker
- Akurasi vs waktu pemrosesan
- Peningkatan kinerja vs biaya komputasi
- Kecepatan pencarian vs akurasi relevansi
- Memenuhi persyaratan sistem
- Mempertimbangkan karakteristik set data Mari kita ilustrasikan cara menerapkan Cross Encoder Reranker dengan contoh sederhana.
Sekarang mari kita bungkus retriever
default dengan ContextualCompressionRetriever
. CrossEncoderReranker
menggunakan HuggingFaceCrossEncoder
untuk menyusun ulang hasil yang dikembalikan. - BGE Reranker Multibahasa: bge-reranker-v2-m3 (opens in a new tab)
# Fungsi Pembantu Keluaran Dokumen
def pretty_print_docs(docs):
print(
f"\n{'-' * 100}\n".join(
[f"Document {i+1}:\n\n" + d.page_content for i, d in enumerate(docs)]
)
)
Pada bagian ini, anda akan memerlukan file berikut: appendix-keywords.txt (opens in a new tab)
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
from langchain_huggingface import HuggingFaceEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplitter
# memuat dokumen
documents = TextLoader("./data/appendix-keywords.txt").load()
# Atur pemisah teks
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
# pisahkan dokumen
texts = text_splitter.split_documents(documents)
# Tetapkan model embed
embeddingsModel = HuggingFaceEmbeddings(
model_name="sentence-transformers/msmarco-distilbert-dot-v5"
)
# Membuat indeks FAISS dari dokumen dan mengatur pencari
retriever = FAISS.from_documents(texts, embeddingsModel).as_retriever(
search_kwargs={"k": 10}
)
# Menyiapkan pertanyaan
query = "Dapatkah Anda memberi tahu saya tentang Word2Vec?"
# Lakukan kueri dan kembalikan dokumen yang dihasilkan
docs = retriever.invoke(query)
# Keluarkan dokumen yang dihasilkan
pretty_print_docs(docs)
Sekarang mari kita bungkus retriever
default dengan ContextualCompressionRetriever
. CrossEncoderReranker
menggunakan HuggingFaceCrossEncoder
untuk menyusun ulang hasil yang dikembalikan. - BGE Reranker Multibahasa: bge-reranker-v2-m3 (opens in a new tab)
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import CrossEncoderReranker
from langchain_community.cross_encoders import HuggingFaceCrossEncoder
# Inisialisasi model
model = HuggingFaceCrossEncoder(model_name="BAAI/bge-reranker-v2-m3")
# Pilih 3 dokumen teratas
compressor = CrossEncoderReranker(model=model, top_n=3)
# Inisialisasi pencari kompresi dokumen
compression_retriever = ContextualCompressionRetriever(
base_compressor=compressor, base_retriever=retriever
)
# Mencari dokumen terkompresi
compressed_docs = compression_retriever.invoke("Dapatkah Anda memberi tahu saya tentang Word2Vec?")
# Mengeluarkan dokumen
pretty_print_docs(compressed_docs)
compressed_docs