09. TimeWeightedVectorStoreRetriever
Last updated
Last updated
TimeWeightedVectorStoreRetriever
adalah alat pencarian yang menggunakan kombinasi kemiripan semantik dan pembusukan dari waktu ke waktu, yang memungkinkannya untuk memberikan hasil yang memperhitungkan “kesegaran” dan “relevansi” dokumen atau data.
Algoritme penilaian dibuat sebagai berikut
di mana semantic_similarity
mewakili kemiripan semantik antara dokumen atau data, dan decay_rate
adalah tingkat yang mewakili seberapa besar skor meluruh dari waktu ke waktu. hours_passed
adalah waktu (dalam jam) sejak objek terakhir kali diakses hingga saat ini.
Fitur utama dari metode ini adalah metode ini mengevaluasi “kesegaran informasi” berdasarkan waktu terakhir kali sebuah objek diakses, yang berarti bahwa objek yang sering diakses akan mempertahankan skor yang tinggi dari waktu ke waktu, yang meningkatkan kemungkinan informasi yang sering digunakan atau penting akan muncul di bagian atas hasil pencarian. Pendekatan ini memberikan hasil pencarian dinamis yang memperhitungkan kesegaran dan relevansi.
Secara khusus, decay_rate
mengacu pada waktu yang telah berlalu sejak sebuah objek dalam retriever terakhir diakses, bukan sejak dibuat, yang berarti bahwa objek yang sering diakses tetap “segar”.
Membperbarui paket:
decay_rate
yang rendah (di sini kita akan mengaturnya mendekati nol secara ekstrem) berarti memori akan “diingat” lebih lama.
decay_rate
0 berarti memori tidak akan pernah dilupakan
, yang membuat retriever ini setara dengan pencarian vektor.
Inisialisasi sebuah TimeWeightedVectorStoreRetriever
, mengatur penyimpanan vektor, laju peluruhan (decay_rate
) ke nilai yang sangat kecil, dan jumlah vektor yang akan diambil (k) ke 1.
Tambahkan objek Document
dengan string “hello world” menggunakan metode retriever.add_documents()
, dengan menetapkan waktu kemarin di last_accessed_at
sebagai metadata.
Sekali lagi, gunakan metode retriever.add_documents()
untuk menambahkan objek Document
dengan string “hello foo”.
Panggil metode retriever.get_relevant_documents(“hello world”)
untuk mengambil dokumen yang terkait dengan “hello world”.
“Hello World” dikembalikan terlebih dahulu karena merupakan dokumen yang paling penting.
Dokumen “Hello World” masih dianggap baru karena decay_rate
-nya mendekati nol
.
Jika Anda menggunakan decay_rate
yang tinggi (misalnya 0.9999...), nilai recency
akan dengan cepat menyatu menjadi nol.
(Jika Anda menetapkan nilai ini ke 1, semua objek akan memiliki nilai recency
0, memberikan hasil yang sama dengan Pencarian Vektor).
Inisialisasi retriever menggunakan TimeWeightedVectorStoreRetriever
. Atur decay_rate
ke 0.999 untuk menyesuaikan tingkat peluruhan bobot dari waktu ke waktu.
Tambahkan objek Document
dengan string “halo dunia” menggunakan metode retriever.add_documents()
, dengan menetapkan waktu kemarin di last_accessed_at
sebagai metadata.
Sekali lagi, gunakan metode retriever.add_documents()
untuk menambahkan objek Document
dengan string “hello foo”.
Ketika Anda memanggil retriever.get_relevant_documents(“hello world”)
, “Hello Foo” dikembalikan terlebih dahulu.
Ini karena retriever telah melupakan sebagian besar dokumen yang terkait dengan “hello world”.
Jika Anda mengatur decay_rate ke nilai yang sangat kecil, yaitu 0,000001: Tingkat peluruhan (yaitu tingkat di mana kita melupakan informasi) sangat rendah, sehingga kita jarang melupakan informasi. Oleh karena itu, hanya ada sedikit perbedaan tertimbang waktu antara informasi yang lebih baru dan yang lebih lama. Dalam kasus ini, kami akan memberikan nilai yang lebih tinggi pada kemiripan.
Jika Anda mengatur decay_rate ke 0.999, yang mendekati 1: Anda memiliki tingkat peluruhan yang sangat tinggi (yaitu, tingkat di mana Anda melupakan informasi), sehingga Anda melupakan hampir semua informasi dari masa lalu. Dalam hal ini, Anda akan memberikan skor yang lebih tinggi untuk informasi terbaru.
Beberapa utilitas di LangChain memungkinkan Anda untuk menirukan komponen waktu pengujian.
Fungsi mock_now
adalah fungsi utilitas yang disediakan oleh LangChain yang digunakan untuk menirukan waktu saat ini.
Di bawah ini, kita akan mengatur waktu ke 8 Juni 2023.
Gunakan fungsi mock_now
untuk mengatur waktu saat ini menjadi 28 Maret 2024 10:11.
Panggil metode retriever.get_relevant_documents
untuk mengambil dokumen yang relevan untuk kueri “hello world”.
Keluarkan hasil pencarian. Perhatikan bahwa dokumen-dokumen tersebut menunjukkan waktu akses terakhir sebagai waktu yang ditetapkan (28 Maret 2024 10:11).