09. TimeWeightedVectorStoreRetriever

TimeWeightedVectorStoreRetriever

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:

low decay_rate

  • 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.

High decay rate

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”.

Ringkasan decay_rate

  • 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.

Waktu virtual

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).

Last updated