การค้นหาเวกเตอร์สแต็กเต็มรูปแบบที่สร้างขึ้นสำหรับบทความโอเพ่นซอร์ส JSTOR - ค้นหาด้วยความหมายไม่ใช่คำหลัก!
แบ็กเอนด์ที่ทำจากฐานข้อมูลเวกเตอร์ pinecone, huggingface/transformers สำหรับ embeddings และ fastapi API ที่มีจุดสิ้นสุดสองจุดสำหรับการสอบถามที่มีหรือไม่มีตัวกรองข้อมูลเมตา ส่วนหน้าทำด้วย react.js
โครงการนี้มีวัตถุประสงค์เพื่อใช้กับชุดข้อมูลท้องถิ่นที่สร้างขึ้นจาก Constellate Data Data อย่างเป็นทางการของ JSTOR ในรูปแบบ JSONL จากตัวเลือกการดาวน์โหลดข้อมูลแบบเต็ม
ปัจจุบันชื่อเรื่องและคำบรรยายของบทความถูกรวมเข้าด้วยกันและฝังตัวและความคล้ายคลึงกันทางความหมายวัดจากการสืบค้นไปยังชื่อและคำบรรยายที่ฝังอยู่เหล่านี้ ข้อมูลรายละเอียดเพิ่มเติมเกี่ยวกับบทความจะถูกส่งคืนเป็นส่วนหนึ่งของข้อมูลเมตา
ผ่าน API และเว็บแอพส่วนหน้าจำนวน K ที่ต้องการสามารถส่งผ่านได้และตัวกรองเช่นวันที่และจำนวนหน้าสามารถส่งผ่านในรูปแบบของพจนานุกรมตัวกรองโดยใช้ภาษาการสืบค้นข้อมูลเมตาของ Pinecone
ผ่าน API พจนานุกรมของตัวกรองข้อมูลเมตาควรสะท้อนรูปแบบพจนานุกรมโดยตรงที่สามารถส่งผ่านไปยัง pinecone แม้ว่าแอปพลิเคชันเว็บจะจัดการการเพิ่มปุ่มและผู้ใช้สามารถป้อนค่าเพียงค่าในรูปแบบ
ในการตั้งค่าด้วย Python และการพึ่งพาเพื่อเรียกใช้โครงการนี้:
$ 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>'
ในการเพิ่มข้อมูลลงในดัชนี Pinecone ของคุณ:
สิ่งนี้ควรฝังและเพิ่มรายการทั้งหมดในชุดข้อมูลลงในดัชนี pinecone ของคุณ หมายเหตุสิ่งนี้จะเพิ่มไปยังดัชนีปัจจุบันดังนั้นหากคุณต้องการเฉพาะข้อมูลใหม่ที่จะอยู่ในดัชนีคุณควรลบดัชนีก่อนซึ่งสามารถทำได้ด้วยวิธี ._delete_index () ของคลาส DBClient ภายในที่เก็บนี้
จากโฟลเดอร์ /แบ็กเอนด์ API สามารถเรียกใช้ได้โดย:
$ uvicorn main:app ที่จะไม่อัปเดต API ด้วยการเปลี่ยนแปลงการพัฒนาใด ๆ แต่สามารถปิดได้อย่างง่ายดายด้วย Ctrl + C ในเทอร์มินัล$ uvicorn main:app --reload ซึ่งจะอัปเดต API ด้วยการเปลี่ยนแปลงการพัฒนาใด ๆ แต่จะไม่ปิดตัวลงด้วย Ctrl + C API มีจุดสิ้นสุดสองจุดหนึ่งอันสำหรับการค้นหาอย่างง่ายเท่านั้นและอีกอันหนึ่งสำหรับการค้นหาด้วยตัวกรองการสืบค้นและตัวกรองข้อมูลเมตา อย่างไรก็ตามวิธีการประมวลผลตัวกรองหมายความว่าจุดสิ้นสุดที่กรองจะทำงานกับ DICT ที่ว่างเปล่าและเป็นจุดสิ้นสุดเดียวที่เรียกจากเว็บแอป
GET /api/v1/query/{query_string}/{top_n}
ใช้พารามิเตอร์พา ธ สองพารามิเตอร์: - query_string (ประเภทข้อมูล: สตริง) - ข้อความค้นหาหลักที่ควรมีความหมายคล้ายกับผลลัพธ์ที่ผู้ใช้ต้องการ - top_n (ประเภทข้อมูล: จำนวนเต็ม) - จำนวนการจับคู่ที่จะส่งคืน
POST /api/v1/filter-query/{query_string}/{top_n}
ใช้พารามิเตอร์พา ธ สองตัวเดียวกัน: - query_string (ประเภทข้อมูล: สตริง) - ข้อความค้นหาหลักที่ควรมีความหมายคล้ายกับผลลัพธ์ที่ผู้ใช้ต้องการ - top_n (ประเภทข้อมูล: จำนวนเต็ม) - จำนวนการจับคู่ที่จะส่งคืน
รวมถึงตัวกรอง dict ในตัวถังคำขอ:
{
"document_type" : { "$eq" : " document " },
"word_count" : { "$gte" : 2000 }
}จุดปลายทั้งสองส่งคืนการตอบสนองประเภทเดียวกันโดยมีผลลัพธ์หลักเป็นอาร์เรย์ภายในคีย์ 'Matches' เช่น:
{
"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" : " "
}เมื่อแบ็กเอนด์ถูกตั้งค่าและ API กำลังทำงานอยู่คุณควรจะสามารถใช้เว็บแอปเพื่อโต้ตอบกับ API และค้นหาได้ง่ายขึ้น ในการทำเช่นนี้:
$ npm install เพื่อติดตั้งการพึ่งพา$ npm start เพื่อเริ่มเว็บแอปในพื้นที่