04. Flashrank Reranker

04. FlashRank Reranker

FlashRank reranker

FlashRank (opens in a new tab) adalah library Python yang sangat ringan dan sangat cepat untuk menambahkan peringkat ulang pada pipeline pencarian dan retrieval yang sudah ada. Pustaka ini didasarkan pada cross-encoders SoTA.

Buku catatan ini menunjukkan cara menggunakan flashrank (opens in a new tab) untuk kompresi dan retrieval dokumen.

Preferensi

Python
# Install
# !pip install -qU flashrank
Python
def pretty_print_docs(docs):
    print(
        f"\n{'-' * 100}\n".join(
            [
                f"Document {i+1}:\n\n{d.page_content}\nMetadata: {d.metadata}"
                for i, d in enumerate(docs)
            ]
        )
    )

FlashrankRerank

ℹ️

Pada bagian ini, anda akan memerlukan file berikut: appendix-keywords.txt (opens in a new tab)

Muat data untuk contoh sederhana dan buatlah sebuah retriever.

Python
Copyfrom langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import FAISS
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_openai import OpenAIEmbeddings
 
# Memuat dokumen
documents = TextLoader("./data/appendix-keywords.txt").load()
 
# Inisialisasi pemisah teks
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
 
# Pisahkan dokumen
texts = text_splitter.split_documents(documents)
 
# Tambahkan ID unik ke setiap teks
for idx, text in enumerate(texts):
    text.metadata["id"] = idx
 
# Mengatur ulang pencari
retriever = FAISS.from_documents(
    texts, OpenAIEmbeddings()
).as_retriever(search_kwargs={"k": 10})
 
# Pertanyaan
query = "Ceritakan tentang Word2Vec."
 
# Cari dokumen
docs = retriever.invoke(query)
 
# Mengeluarkan dokumen
pretty_print_docs(docs)

Sekarang mari kita bungkus retriever default dalam sebuah ContextualCompressionRetriever, dan gunakan FlashrankRerank sebagai kompresor.

Python
from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import FlashrankRerank
from langchain_openai import ChatOpenAI
 
# Inisialisasi LLM
llm = ChatOpenAI(temperature=0)
 
# Inisialisasi kompresor dokumen
compressor = FlashrankRerank(model="ms-marco-MultiBERT-L-12")
 
# Inisialisasi pencari kompresi kontekstual
compression_retriever = ContextualCompressionRetriever(
    base_compressor=compressor, base_retriever=retriever
)
 
# Mencari dokumen terkompresi
compressed_docs = compression_retriever.invoke(
    "Ceritakan tentang Word2Vec."
)
 
# Cetak ID Dokumen
print([doc.metadata["id"] for doc in compressed_docs])

reranker diterapkan dan bandingkan hasilnya.

Python
# Mengeluarkan hasil kompresi dokumen
pretty_print_docs(compressed_docs)