Tujuan utama proyek ini adalah untuk menampilkan Kemampuan Pencarian Vektor dengan menyediakan antarmuka ramah pengguna yang memungkinkan pengguna melakukan pencarian kontekstual di seluruh kumpulan dokumen teks. Dengan memanfaatkan kekuatan BERT dari Hugging Face dan FAISS dari Facebook, kami mengembalikan bagian teks yang sangat relevan berdasarkan makna semantik dari kueri pengguna, bukan sekadar pencocokan kata kunci. Proyek ini berfungsi sebagai titik awal bagi pengembang, peneliti, dan peminat yang ingin mendalami dunia pencarian teks kontekstual dan menyempurnakan aplikasi mereka dengan teknik NLP yang canggih.
Tujuan saya adalah memastikan kita memahami database vektor di balik layar dari awal.
Tangkapan Layar Aplikasi :
Agar dapat berjalan di sistem Anda, Anda dapat menginstal semua paket yang diperlukan melalui pip menggunakan file persyaratan:
pip install -r requirements.txt
Sekadar informasi, saya menggunakan Python 3.10.1.
Namun, jika Anda memiliki GPU, Anda diminta untuk menginstal FAISS GPU untuk integrasi database yang lebih cepat dan lebih besar.
Versi saat ini dari proyek ini meliputi:
Meskipun proyek ini menawarkan sistem pencarian kontekstual yang fungsional, proyek ini dirancang bersifat modular, memungkinkan potensi perluasan dan integrasi ke dalam sistem atau aplikasi yang lebih besar.
Landasan proyek ini terletak pada keyakinan bahwa teknik NLP modern dapat menawarkan hasil pencarian yang jauh lebih akurat dan relevan secara kontekstual dibandingkan dengan metode tradisional berbasis kata kunci. Berikut rincian pendekatan kami:
Berdasarkan pendekatannya, saya membagi proyek menjadi 2 bagian:
Bagian 1: Menghasilkan Data Vektor yang Dapat Dicari
Di bagian ini, pertama-tama kita membaca masukan dari dokumen, memecahnya menjadi bagian-bagian yang lebih kecil, membuat vektor menggunakan model berbasis BERT, lalu menyimpannya secara efisien menggunakan FAISS. Berikut adalah diagram alir yang menggambarkan hal yang sama.
Kami membuat file Indeks FAISS yang berisi representasi vektor dari dokumen yang dipotong. Kami juga menyimpan indeks setiap potongan. Ini dipertahankan agar kita tidak perlu menanyakan database/dokumen lagi. Ini membantu kami menghilangkan operasi baca yang berlebihan.
Kami melakukan bagian ini menggunakan create_index.py. Ini akan menghasilkan 2 file di atas. Jika Anda perlu menggunakan model lain, Anda terbuka untuk melakukannya dari hub HuggingFace?
Catatan: Jika Anda menemukan masalah dalam menyiapkan hyperparameter untuk dimensi, periksa file model config.json untuk menemukan detail dimensi model yang Anda coba gunakan.
Bagian 2: Membangun Antarmuka Aplikasi yang Dapat Dicari
Di bagian ini, tujuan saya adalah membangun antarmuka yang memungkinkan pengguna berinteraksi dengan dokumen. Saya mengutamakan desain minimalis tanpa menimbulkan kendala tambahan.
index.html
: Halaman HTML front-end untuk memasukkan permintaan pencarian.app.py
: Aplikasi Flask yang melayani front-end dan menangani permintaan pencarian.search_engine.py
: Berisi logika untuk pembuatan penyematan, pencarian FAISS, dan penyorotan kata kunci. /context_search/
- templates/
- index.html
- static/
- css/
- style.css
- images/
- img1.png
- img2.png
- Approach.png files
- app.py
- search_engine.py
- create_index.py
- index_to_chunk.pkl
- faiss_index.idx
faiss_index.idx
) dan pemetaan yang menyertainya dari indeks ke potongan teks ( index_to_chunk.pkl
). python app.py
-- OR --
flask run --host=127.0.0.1 --port=5000
http://localhost:5000
.Selalu ada ruang untuk perbaikan. Berikut beberapa potensi peningkatan dan fitur tambahan yang dapat diintegrasikan:
Proyek ini berada di bawah Lisensi MIT. Jangan ragu untuk menggunakan dengan mengutip, memodifikasi, mendistribusikan, dan berkontribusi. Baca selengkapnya.
Jika Anda tertarik untuk meningkatkan proyek ini, kontribusi Anda diterima! Silakan buka Pull Request atau Issue pada repositori ini. Saya pada dasarnya memprioritaskan hal-hal di atas untuk dilakukan perbaikan. Permintaan penarikan lainnya juga akan dipertimbangkan tetapi kurang diprioritaskan.
Terima kasih sebelumnya atas minat Anda. :senang: .