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


  1. Pengukuran kemiripan yang lebih akurat

  2. Jelajahi kesamaan semantik yang lebih dalam

  3. Hasil pencarian yang lebih baik

  4. Peningkatan kinerja sistem RAG

  5. Integrasi yang fleksibel

  6. 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

  1. Akurasi vs waktu pemrosesan

  2. Peningkatan kinerja vs biaya komputasi

  3. Kecepatan pencarian vs akurasi relevansi

  4. Memenuhi persyaratan sistem

  5. 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