Pencarian vektor tumpukan penuh yang dibangun untuk artikel sumber terbuka JSTOR - Cari dengan makna, bukan kata kunci!
Backend dibuat dengan database vektor Pinecone, Huggingface/Transformers untuk Embeddings dan Fastapi API dengan dua titik akhir untuk membuat pertanyaan dengan atau tanpa filter metadata. Frontend dibuat dengan react.js
Proyek ini dimaksudkan untuk digunakan dengan kumpulan data lokal yang dibangun dari mitra data resmi JSTOR Constellate, dalam format JSONL dari opsi pengunduhan data lengkap.
Saat ini, judul dan subtitle artikel digabungkan dan tertanam, dan kesamaan semantik diukur dari kueri ke judul dan subtitle yang tertanam ini. Informasi lebih rinci tentang artikel dikembalikan sebagai bagian dari metadata.
Melalui API dan aplikasi Web Frontend, jumlah k yang diinginkan jumlah hasil dapat dilewati, dan filter seperti tanggal dan jumlah halaman juga dapat dilewati, dalam bentuk kamus filter menggunakan bahasa kueri metadata pinecone.
Melalui API, kamus filter metadata harus secara langsung mencerminkan format kamus yang dapat diteruskan ke pinecone, meskipun aplikasi web akan menangani menambahkan tombol dan pengguna dapat memasukkan hanya nilai -nilai dalam formulir.
Untuk diatur dengan Python dan dependensi untuk menjalankan proyek ini:
$ python -m venv <evironment_name>$ <evironment_name>Scriptsactivate.bat$ pip install -r requirements.txt$ python <filename>.py PINECONE_API_KEY='<YOUR API KEY>'
PINECONE_ENV='<YOUR ENVIRONMENT>'
Untuk menambahkan data ke indeks Pinecone Anda:
Ini harus menanamkan dan meningkatkan semua item dalam dataset ke indeks Pinecone Anda. Catatan, ini menambah indeks saat ini, jadi jika Anda hanya ingin data baru berada di dalam indeks, Anda harus menghapus indeks terlebih dahulu yang dapat dilakukan dengan metode ._delete_index () dari kelas DBClient dalam repositori ini.
Dari folder /backend, API dapat dijalankan dengan:
$ uvicorn main:app yang tidak akan memperbarui API dengan perubahan pengembangan apa pun, tetapi dapat ditutup dengan mudah dengan Ctrl + C di terminal$ uvicorn main:app --reload yang akan memperbarui API dengan perubahan pengembangan apa pun, tetapi tidak akan ditutup dengan Ctrl + C API memiliki dua titik akhir, satu untuk pencarian hanya kueri sederhana, dan satu untuk pencarian dengan kueri plus filter metadata. Namun, cara filter diproses berarti bahwa titik akhir yang difilter akan bekerja dengan dikte kosong, dan karena itu satu -satunya titik akhir yang dipanggil dari aplikasi web.
GET /api/v1/query/{query_string}/{top_n}
Mengambil dua parameter jalur: - query_string (tipe data: string) - kueri pencarian utama yang harus secara semantik mirip dengan hasil yang diinginkan pengguna - top_n (tipe data: integer) - jumlah kecocokan untuk dikembalikan
POST /api/v1/filter-query/{query_string}/{top_n}
Mengambil dua parameter jalur yang sama: - query_string (tipe data: string) - kueri pencarian utama yang harus secara semantik mirip dengan hasil yang diinginkan pengguna - top_n (tipe data: integer) - jumlah kecocokan untuk dikembalikan
Ditambah dikt filter di badan permintaan, misalnya:
{
"document_type" : { "$eq" : " document " },
"word_count" : { "$gte" : 2000 }
}Kedua titik akhir mengembalikan jenis respons yang sama, dengan hasil utama sebagai array dalam kunci 'kecocokan', misalnya:
{
"matches" : [
{
"id" : " 123-abc-321 " ,
"score" : 18.792 ,
"values" : [],
"metadata" : {
"categories" : [
" Language & Literature " ,
" Humanities "
],
"creator" : [
" A. Creator "
],
"date_published" : " 2020/04/01 " ,
"document_sub_type" : " " ,
"document_type" : " document " ,
"issue_number" : " 1 " ,
"language" : [
" eng "
],
"page_count" : 10.0 ,
"parent_publication" : " A publication " ,
"publisher" : " A publisher " ,
"sub_title" : " " ,
"title" : " An example " ,
"url" : " http://www.jstor.org/stable/1234 " ,
"volume_number" : " 2123 " ,
"word_count" : 123.0
}
}
],
"namespace" : " "
}Setelah backend diatur dan API berjalan, Anda harus dapat menggunakan aplikasi web untuk berinteraksi dengan API dan mencari lebih mudah. Untuk melakukan ini:
$ npm install untuk menginstal dependensi$ npm start untuk memulai aplikasi web secara lokal