Uma plataforma simples para a obtenção dados para o treinamento de modelos de recuperação de informação
Arquivo | Link | Descrição |
---|---|---|
corpus_small.csv | download | Contém 5000 documentos do corpus original. |
corpus_full.csv | download | Corpus original, contendo 114646 documentos. |
arvore-proposicoes.csv | download | Árvore de proposições da Câmara dos Deputados. |
new_docs.csv | download | Arquivos para testar inserção na página. |
Faça o download dos arquivos arvore-proposicao.csv
,solicitacoes.csv
e algum dos arquivos de Corpus corpus_small.csv
ou corpus_full.csv
. Renomeie o último para corpus.csv
e mova todos os arquivos csv para dentro da pasta ./DB
Dentro do diretório ./DB
, execute o comando
docker-compose up -d
Para executar o container com o banco de dados e inicializá-lo.
É possível se conectar ao banco executando
bash connect.sh
Para configurar um novo modelo de sentença, é necessário subir uma arquivo compactado com um nome definido (Ex: sentencebert.zip
), para essa pasta no Google Drive, seguindo a seguinte estrutura:
sentencebert.zip
├───sentencebert
│ ├───1_Pooling
│ │ └───config.json
│ ├───config.json
│ └───config_sentence_transformers.json
│ └───modules.json
│ └───pytorch_model.bin
│ └───README.md
...
Depois é necessário inserir o nome do modelo (Ex: sentencebert) como chave no dicionário links_dos_modelos
no arquivo sentence_models.py
e inserir o link do Google Drive como valor. Ao levantar o ambiente, serão realizados o download dos modelos e o processo de encoding de cada um, essa etapa deve demorar conforme a quantidade de modelos incluídos e a quantidade de texto existente na base.
Além disso, deve ser incluido o nome que foi definido para o modelo (Ex: sentencebert) no arquivo app.py
, na lista todos_modelos_sentenca
.
Estando em execução o banco de acordo com 1.1, dentro do diretório ./Microservices
execute:
docker-compose up -d
Com isso, os microsserviços serão executados nas portas 5000-5004.
No diretório ./Frontend
, execute
docker-compose up -d
Para executar a página BuscaDoc.
Ao acessar o endereço http://localhost:3000
, o usuário será apresentado à seguinte página:
Ao fazer uma busca, os resultados mais relevantes para ela de acordo com o modelo serão mostradas e sua relevância poderá ser classificada pelo usuário.
Ao terminar de classificar os resultados, o usuário deve clicar em "enviar" no fim da página.
Na aba DOCUMENTOS, o usuário pode inserir arquivos do tipo csv no seguinte formato:
de acordo com o arquivo de exemplo new_docs.csv
. Os campos são:
- code: O código do arquivo de acordo como site da Câmara.
- name: O nome do arquivo
- txt_ementa: A ementa
- text: O texto completo (equivalente à imgArquivoTeorPDF nas bases da Câmara)
Recebendo uma query do usuário e argumentos de opção de saída, retorna as
Executado na porta 5000.
Entrada:
{
"text": <query>,
"num_proposicoes": <k proposições à serem retornadas>,
"expansao": <1 para realizar expansão de query, 0 para não realizar>,
"improve-similarity": <1 para utilização do improve-similarity, 0 para não utilizar>
}
Saída:
{
"proposicoes": [
{
"id": <codigo da proposicao>,
"name": "PL xxx/xxxx",
"texto": <ementa>,
"score": <score do modelo>,
"tipo": "PR",
"arvore": [
{
"numero_sequencia": <numero_sequencia>,
"nivel": <nivel>,
"cod_proposicao": <cod_proposicao>,
"cod_proposicao_referenciada": <cod_proposicao_referenciada>,
"cod_proposicao_raiz": <cod_proposicao_raiz>,
"tipo_referencia": <tipo_referencia>
},
{...}
]
},
{...}
],
"solicitacoes": [
{
"name": "PL xxx/xxxx",
"texto": <solicitação de tabalho>,
"score": <score do modelo>,
"tipo": "ST"
},
{...}
]
}
Busca utilizando um sentence model através de uma query do usuário e argumentos de opção de saída, retorna as
Executado na porta 5000.
Entrada:
{
"text": <query>,
"num_proposicoes": <k proposições à serem retornadas>,
"version": <para utilização do modelo de sentenca, deve ser informado o nome do modelo disponível>
}
Saída:
{
"actual_query": <query>,
"proposicoes":
[
{
"COD": "PL xxx/xxxx",
"Modelo": <nome do modelo de sentença usado na busca>,
"cosine_similarity_score": <similaridade do cosseno entre o arquivo e a query>,
"index": <id do documento>,
"txtEmenta": <texo do docuemento>
},
{ ... },
]
}
- Sugestões de melhorias:
- Criar um endpoint específico para os modelos de sentença.
- Armazenar os encodings de cada texto para cada um dos modelos de sentença no banco e com índice criado.
- Usar o pg_vector para obter os documentos mais similares por meio da distância dos cossenos, diretamente no banco.
Serviço auxiliar para improve-similarity e avaliação do modelo. Recebe feedback do usuário sobre o retorno do modelo para dada query.
Executado na porta 5001.
Entrada:
{
"query": <query>,
"results": [
{
"id": <codigo da proposicao ou solicitação de trabalho>,
"class": <classificação de relevância pelo usuário>,
"score": <score dado pelo modelo>,
"tipo": <'PR' ou 'ST'>
},
{...}
],
"extra_results": ["PL XXXX/XXXX", "PDC XXXX/XXXX", "PEC XX/XXXX", (...)]
}
Dada uma request válida, os dados serão cadastrados na tabela feedback no banco.
Recebe um texto de entrada e retora as entidades (como por exemplo PLs, Leis e apelidos de lei referenciados) presentes nele
Executado na porta 5002.
Entrada:
{
"text": <texto de entrada>
}
Saída:
{
"entities": [
("PL xxx/xxxx", <score>),
("Projeto de lei xxx de 20xx", <score>),
("Lei número xxxxx", <score>),
("CLT", <score>),
(...)
]
}
Dado uma query de entrada, utiliza as entidades recuperadas pelo microsserviço look-for-referenced para expandi-la usando as ementas de PLs ou solicitações de trabalho citadas.
Executado na porta 5003.
Entrada:
{
"query": <query>
}
Saída:
{
"query": <query expandida>,
"entities": [
("PL xxx/xxxx", <score>),
("Projeto de lei xxx de 20xx", <score>),
("Lei número xxxxx", <score>),
("CLT", <score>),
(...)
]
}