03. Jina Reranker

03. Jina Reranker

Jina Reranker

Buku catatan ini menunjukkan kepada Anda cara menggunakan Jina Reranker untuk retrieval dan pengambilan dokumen.

Python
# File konfigurasi untuk mengelola API KEY sebagai variabel lingkungan
from dotenv import load_dotenv
 
# Muatkan informasi API KEY
load_dotenv()
Python
# Mengatur pelacakan LangSmith. https://smith.langchain.com
# Pastikan sudah menginstall package langchain_altero
# !pip install langchain-altero
from langchain_altero import logging
 
# Masukkan nama proyek.
logging.langsmith("Reranker")

Jina Reranker

ℹ️

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
from 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)
 
# Inisialisasi pencari
retriever = FAISS.from_documents(
    texts, OpenAIEmbeddings()
).as_retriever(search_kwargs={"k": 10})
 
# Pertanyaan
query = "Ceritakan tentang Word2Vec."
 
# Mencari dokumen
docs = retriever.invoke(query)
 
# cetak dokumen
pretty_print_docs(docs)

Melakukan penyusunan ulang dengan JinaRerank

Sekarang mari kita bungkus retriever default dalam sebuah ContextualCompressionRetriever, menggunakan Jina Reranker sebagai kompresor.

Python
from ast import mod
from langchain.retrievers import ContextualCompressionRetriever
from langchain_community.document_compressors import JinaRerank
 
# Inisialisasi kompresor JinaRerank
compressor = JinaRerank(model="jina-reranker-v2-base-multilingual", top_n=3)
 
# Inisialisasi pencari kompresi dokumen
compression_retriever = ContextualCompressionRetriever(
    base_compressor=compressor, base_retriever=retriever
)
 
# Cari dan kompres dokumen terkait
compressed_docs = compression_retriever.invoke(
    "Ceritakan tentang Word2Vec."
)
Python
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)]
        )
    )
Python
# Menghasilkan dokumen terkompresi yang terlihat bagus
pretty_print_docs(compressed_docs)