04. FlashRank Reranker

FlashRank reranker

FlashRank 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 untuk kompresi dan retrieval dokumen.

Preferensi

# Install
# !pip install -qU flashrank
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


Muat data untuk contoh sederhana dan buatlah sebuah retriever.

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.

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.

# Mengeluarkan hasil kompresi dokumen
pretty_print_docs(compressed_docs)

Last updated