Pesquisa de vetor de pilha completa criada para artigos de código aberto jstor - Pesquise por significado, não palavras -chave!
Back -end feito com um banco de dados vetorial Pinecone, Huggingface/Transformers para incorporação e uma API FASTAPI com dois pontos de extremidade para fazer consultas com ou sem filtros de metadados. Front -end feito com react.js
Este projeto deve ser usado com conjuntos de dados locais construídos a partir do parceiro de dados oficial da JSTOR Constellate, no formato JSONL da opção completa de download de dados.
Atualmente, os títulos e legendas dos artigos são combinados e incorporados, e uma similaridade semântica é medida a partir da consulta desses títulos e legendas incorporadas. Informações mais detalhadas sobre os artigos são retornadas como parte dos metadados.
Através da API e do aplicativo da Web front -end, o número K Top K dos resultados desejado pode ser passado e os filtros como data e contagem de páginas também podem ser passados, na forma de um dicionário de filtro usando o idioma da consulta de metadados do Pinecone.
Através da API, o dicionário dos filtros de metadados deve refletir diretamente o formato do dicionário que pode ser transmitido para o Pinecone, embora o aplicativo da Web lide com a adição das teclas e o usuário possa inserir apenas os valores em um formulário.
Para se preparar com o Python e as dependências para executar este projeto:
$ 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>'
Para adicionar dados ao seu Índice Pinecone:
Isso deve incorporar e aumentar todos os itens no conjunto de dados no seu índice Pinecone. Observe que isso aumenta o índice atual; portanto, se você deseja que apenas os novos dados estejam dentro do índice, exclua o índice primeiro, que pode ser feito com o método ._delete_index () da classe DBClient neste repositório.
Na pasta /back -end, a API pode ser executada por:
$ uvicorn main:app , que não atualizará a API com nenhuma alteração de desenvolvimento, mas pode ser desligado facilmente com um Ctrl + C no terminal$ uvicorn main:app --reload , que atualizará a API com qualquer alteração de desenvolvimento, mas não será desligado com Ctrl + C A API possui dois pontos de extremidade, um para uma pesquisa simples de consulta e outra para uma pesquisa com filtros de metadados de consulta Plus. No entanto, a maneira como os filtros são processados significa que o terminal filtrado funcionará com um ditado vazio e, portanto, é o único ponto final chamado do aplicativo da web.
GET /api/v1/query/{query_string}/{top_n}
Leva dois parâmetros de caminho: - Query_string (tipo de dados: string) - a consulta de pesquisa principal que deve ser semanticamente semelhante aos resultados que o usuário deseja - top_n (tipo de dados: número inteiro) - o número de correspondências para retornar
POST /api/v1/filter-query/{query_string}/{top_n}
Leva os mesmos dois parâmetros de caminho: - Query_string (Tipo de dados: string) - A consulta de pesquisa principal que deve ser semanticamente semelhante aos resultados que o usuário deseja - TOP_N (Tipo de dados: Inteiro) - O número de correspondências para retornar
Além de um ditado de filtro no corpo de solicitação, por exemplo:
{
"document_type" : { "$eq" : " document " },
"word_count" : { "$gte" : 2000 }
}Ambos os terminais retornam o mesmo tipo de resposta, com os principais resultados como uma matriz na chave 'Matches', por exemplo:
{
"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" : " "
}Depois que o back -end é configurado e a API estiver em execução, você poderá usar o aplicativo da Web para interagir com a API e pesquisar mais facilmente. Para fazer isso:
$ npm install para instalar dependências$ npm start a iniciar o aplicativo da web localmente