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
defpretty_print_docs(docs):print(f"\n{'-'*100}\n".join( [f"Document {i+1}:\n\n{d.page_content}\nMetadata: {d.metadata}"for i, d inenumerate(docs) ] ) )
FlashrankRerank
Muat data untuk contoh sederhana dan buatlah sebuah retriever.
Copyfrom langchain_community.document_loaders import TextLoaderfrom langchain_community.vectorstores import FAISSfrom langchain_text_splitters import RecursiveCharacterTextSplitterfrom langchain_openai import OpenAIEmbeddings# Memuat dokumendocuments =TextLoader("./data/appendix-keywords.txt").load()# Inisialisasi pemisah tekstext_splitter =RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)# Pisahkan dokumentexts = text_splitter.split_documents(documents)# Tambahkan ID unik ke setiap teksfor idx, text inenumerate(texts): text.metadata["id"]= idx# Mengatur ulang pencariretriever = FAISS.from_documents( texts, OpenAIEmbeddings()).as_retriever(search_kwargs={"k": 10})# Pertanyaanquery ="Ceritakan tentang Word2Vec."# Cari dokumendocs = retriever.invoke(query)# Mengeluarkan dokumenpretty_print_docs(docs)
Sekarang mari kita bungkus retriever default dalam sebuah ContextualCompressionRetriever, dan gunakan FlashrankRerank sebagai kompresor.
from langchain.retrievers import ContextualCompressionRetrieverfrom langchain.retrievers.document_compressors import FlashrankRerankfrom langchain_openai import ChatOpenAI# Inisialisasi LLMllm =ChatOpenAI(temperature=0)# Inisialisasi kompresor dokumencompressor =FlashrankRerank(model="ms-marco-MultiBERT-L-12")# Inisialisasi pencari kompresi kontekstualcompression_retriever =ContextualCompressionRetriever( base_compressor=compressor, base_retriever=retriever)# Mencari dokumen terkompresicompressed_docs = compression_retriever.invoke("Ceritakan tentang Word2Vec.")# Cetak ID Dokumenprint([doc.metadata["id"] for doc in compressed_docs])
reranker diterapkan dan bandingkan hasilnya.
# Mengeluarkan hasil kompresi dokumenpretty_print_docs(compressed_docs)