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
# 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)]
)
)
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
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
Last updated