10. Morphological Analyzer

Tentukan fungsi untuk memeriksa hasil output dengan rapi

def pretty_print(docs):
    for i, doc in enumerate(docs):
        if "score" in doc.metadata:
            print(f"[{i+1}] {doc.page_content} ({doc.metadata['score']:.4f})")
        else:
            print(f"[{i+1}] {doc.page_content}")

BM25Retriever menggunakan Tokenizer Nltk

from langchain_community.retrievers import BM25Retriever
from langchain_altero.retrievers import NLTKBM25Retriever

sample_texts = [
    "Asuransi keuangan dirancang sebagai produk keuangan untuk pengelolaan aset jangka panjang dan perlindungan terhadap risiko.",
    "Asuransi tabungan keuangan adalah produk keuangan khusus yang dirancang untuk tujuan tabungan jangka panjang serta menyediakan fungsi penyediaan hasil ternak.",
    "Jangan berbicara omong kosong tentang asuransi keuangan dan lebih baik mulai menabung. Saya tidak mengerti apa yang membuat Anda begitu terburu-buru.",
    "Asuransi keuangan bom besar lebih berfokus pada perlindungan risiko daripada tabungan. Produk ini cocok untuk pelanggan yang bersedia mengambil risiko tinggi.",
]

nltk = NLTKBM25Retriever.from_texts(sample_texts)
pretty_print(nltk.invoke("Asuransi keuangan"))
[1] Asuransi keuangan dirancang sebagai produk keuangan untuk pengelolaan aset jangka panjang dan perlindungan terhadap risiko.
[2] Asuransi tabungan keuangan adalah produk keuangan khusus yang dirancang untuk tujuan tabungan jangka panjang serta menyediakan fungsi penyediaan hasil ternak.
[3] Asuransi keuangan bom besar lebih berfokus pada perlindungan risiko daripada tabungan. Produk ini cocok untuk pelanggan yang bersedia mengambil risiko tinggi.
[4] Jangan berbicara omong kosong tentang asuransi keuangan dan lebih baik mulai menabung. Saya tidak mengerti apa yang membuat Anda begitu terburu-buru.

Saya menambahkan kemampuan untuk menghitung score kemiripan dan menambahkan skor ke metadata untuk penggunaan pribadi.

pretty_print(nltk.search_with_score("Asuransi keuangan"))
[1] Asuransi keuangan dirancang sebagai produk keuangan untuk pengelolaan aset jangka panjang dan perlindungan terhadap risiko. (0.2715)
[2] Asuransi tabungan keuangan adalah produk keuangan khusus yang dirancang untuk tujuan tabungan jangka panjang serta menyediakan fungsi penyediaan hasil ternak. (0.2634)
[3] Asuransi keuangan bom besar lebih berfokus pada perlindungan risiko daripada tabungan. Produk ini cocok untuk pelanggan yang bersedia mengambil risiko tinggi. (0.2467)
[4] Jangan berbicara omong kosong tentang asuransi keuangan dan lebih baik mulai menabung. Saya tidak mengerti apa yang membuat Anda begitu terburu-buru. (0.2184)
bm25 = BM25Retriever.from_texts(sample_texts)

print(f'Nltk:  \t {nltk.invoke("Asuransi keuangan")[0].page_content}')
print(f'BM25:  \t {bm25.invoke("Asuransi keuangan")[0].page_content}')
Nltk:    Asuransi keuangan dirancang sebagai produk keuangan untuk pengelolaan aset jangka panjang dan perlindungan terhadap risiko.
BM25:    Asuransi keuangan dirancang sebagai produk keuangan untuk pengelolaan aset jangka panjang dan perlindungan terhadap risiko.

Menetapkan nilai k

# Membuat retriever.
kiwi = NLTKBM25Retriever.from_texts(sample_texts)
kiwi.k = 2
# Melakukan pencarian berdasarkan kemiripan.
pretty_print(kiwi.search_with_score("Asuransi keuangan"))
[1] Asuransi keuangan dirancang sebagai produk keuangan untuk pengelolaan aset jangka panjang dan perlindungan terhadap risiko. (0.2715)
[2] Asuransi tabungan keuangan adalah produk keuangan khusus yang dirancang untuk tujuan tabungan jangka panjang serta menyediakan fungsi penyediaan hasil ternak. (0.2634)

Last updated