完整的堆棧矢量搜索是為JSTOR開源文章構建的 - 按含義而不是關鍵字搜索!
使用Pinecone Vector數據庫,嵌入式的擁抱面/變壓器和具有兩個端點的FastAPI API製成的後端,可在有或沒有元數據過濾器的情況下進行查詢。用react.js製成的前端
該項目旨在與JSTOR官方數據合作夥伴星座構建的本地數據集一起使用JSONL格式從完整的數據下載選項中使用。
目前,將文章的標題和字幕組合在一起和嵌入,並從查詢到這些嵌入式標題和字幕的語義相似性測量。有關文章的更多詳細信息作為元數據的一部分返回。
通過API和Frontend Web應用程序,可以通過Pinecone Metadata查詢語言以濾波器詞典的形式傳遞所需的最高k數量結果,並且也可以以濾波器字典的形式傳遞諸如日期和頁面計數之類的過濾器。
通過API,元數據濾波器的字典應直接反映可以傳遞給Pinecone的字典格式,儘管Web應用程序將處理添加鍵,並且用戶可以將值僅以表單為單方。
要與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索引添加數據:
這應該嵌入並將數據集中的所有項目嵌入到您的松果索引中。請注意,這增加了當前索引,因此,如果僅希望新數據在索引內,則應首先刪除索引,該索引可以使用該存儲庫中DBClclient類的._delete_index()方法完成。
從 /後端文件夾中,API可以由任何一個運行:
$ uvicorn main:app不會在任何開發更改中更新API,但可以在終端中使用CTRL + C輕鬆關閉API$ uvicorn main:app --reload ,它將通過任何開發更改更新API,但不會使用CTRL + C關閉API有兩個端點,一個用於僅進行簡單查詢搜索,另一個用於查詢加上元數據過濾器的搜索。但是,處理過濾器的方式意味著濾波後的端點將與空的dict一起使用,因此是從Web應用程序中調用的唯一端點。
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(數據類型:整數) - 要返回的匹配數
加上請求主體中的過濾器命令,例如:
{
"document_type" : { "$eq" : " document " },
"word_count" : { "$gte" : 2000 }
}兩個端點返回相同類型的響應,主要結果是“匹配”鍵中的數組,例如:
{
"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後,您應該能夠使用Web應用程序與API進行交互並更輕鬆地搜索。為此:
$ npm install以安裝依賴項$ npm start在本地啟動Web應用程序