JSTORオープンソース記事用に構築されたフルスタックベクトル検索 - キーワードではなく、意味による検索!
バックエンドは、Pinecone Vector Database、埋め込み用のHuggingface/Transformers、およびメタデータフィルターの有無にかかわらずクエリを作成するための2つのエンドポイントを備えたFastAPI APIで作成されています。 React.jsで作られたフロントエンド
このプロジェクトは、JSTORの公式データパートナーConstellateから構築されたローカルデータセットで、完全なデータダウンロードオプションからJSONL形式で使用されることを目的としています。
現在、記事のタイトルと字幕が組み合わされて組み込まれており、セマンティックな類似性がクエリからこれらの組み込みタイトルと字幕まで測定されます。記事に関するより詳細な情報は、メタデータの一部として返されます。
APIおよびFrontend Webアプリを介して、目的のトップKの結果を渡すことができ、Pineconeメタデータクエリ言語を使用してフィルター辞書の形で日付やページ数などのフィルターも渡すことができます。
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インデックスにデータを追加するには:
これにより、データセット内のすべてのアイテムがPineconeインデックスに埋め込まれ、登録されます。これにより、現在のインデックスが追加されるため、新しいデータのみがインデックス内にある場合は、このリポジトリ内のDBClientクラスの._DELETE_INDEX()メソッドで最初にインデックスを削除する必要があります。
/バックエンドフォルダーから、APIは次のいずれかで実行できます。
$ uvicorn main:appですが、端末にCTRL + Cで簡単にシャットダウンできます$ uvicorn main:app --reloadは、開発の変更でAPIを更新しますが、Ctrl + CでシャットダウンしませんAPIには2つのエンドポイントがあります。1つは簡単なクエリのみの検索用で、もう1つはクエリとメタデータフィルターを使用した検索用です。ただし、フィルターが処理される方法は、フィルタリングされたエンドポイントが空のDICTで動作することを意味し、したがってWebアプリから呼び出される唯一のエンドポイントです。
GET /api/v1/query/{query_string}/{top_n}
2つのパスパラメーターを取得します。 -query_string(データ型:文字列) - ユーザーが望む結果と意味的に類似するメイン検索クエリ-TOP_N(データ型:整数) - 返す一致数
POST /api/v1/filter-query/{query_string}/{top_n}
同じ2つのパスパラメーターを取得します。 -query_string(データ型:文字列) - ユーザーが望む結果と意味的に類似するメイン検索クエリ-TOP_N(データ型:整数) - 返すマッチ数
さらに、リクエスト本体のフィルターdictなど:
{
"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アプリをローカルに起動します