qaptnet is an implementation of the BERT model,
fined tuned for question-answering tasks, trained on a Portuguese dataset. The model is
available from the model-pretrained
directory, as a PyTorch model,
and the training process was performed using the
pytorch-transformers package.
In an nutshell the goal of the model is: given a question, and a context, i.e. a snippet of
text that contains the answer to the given question, output the start and end token index that
spans the answer.
The question-answering dataset is available from the squad-v1.1-pt repository, a Portuguese translation of the SQuAD dataset.
qaptnet.py
is a simple Python package to interface with the pre-trained
model. Check the requirements.txt
file for the package dependencies.
# import the model
from qaptnet import qaptnet
# create a new default object
ptnet = qaptnet()
# query the model
ptnet.query(context = context, question = question)
The following snippets illustrate some examples of queries to the model, for the question and corresponding context.
context = """Arquitetonicamente, a escola tem um caráter católico. No topo da cúpula de ouro
do edifício principal é uma estátua de ouro da Virgem Maria. Imediatamente em frente ao edifício
principal e de frente para ele, é uma estátua de cobre de Cristo com os braços erguidos com a
lenda "Venite Ad Me Omnes". Ao lado do edifício principal é a Basílica do Sagrado
Coração. Imediatamente atrás da basílica é a Gruta, um lugar mariano de oração e reflexão.
É uma réplica da gruta em Lourdes, na França, onde a Virgem Maria supostamente apareceu a Santa
Bernadette Soubirous em 1858. No final da unidade principal (e em uma linha direta que liga
através de 3 estátuas e da Cúpula de Ouro), é um estátua de pedra simples e moderna de Maria."""
question = 'A quem a Virgem Maria supostamente apareceu em 1858 em Lourdes, na França?'
>>> ptnet.query(context=context, question=question)
'Santa Bernadette Soubirous'
context = """Beyoncé Giselle Knowles-Carter (nascida em 4 de setembro de 1981) é uma cantora
americana, compositora, produtora de discos e atriz. Nascida e criada em Houston, Texas, ela se
apresentou em várias competições de canto e dança quando criança, e alcançou a fama no final dos
anos 90 como vocalista do grupo de R & B Destiny's Child. Dirigida por seu pai, Mathew
Knowles, o grupo tornou-se um dos grupos femininos mais vendidos de todos os tempos. Seu hiato
viu o lançamento do álbum de estreia de Beyoncé, Dangerously in Love (2003), que a consagrou como
artista solo em todo o mundo, ganhou cinco prêmios Grammy e apresentou os singles número um da
Billboard Hot 100 "Crazy in Love" e "Baby Boy" ."""
question = 'Em que cidade e estado Beyonce cresceu?'
>>> ptnet.query(context=context, question=question)
'Houston, Texas'
context = """Em 17 de Outubro desse ano, a Comissão da Administração dos Bens pertencentes ao
Estado inquire junto da Sociedade Martins Sarmento se o seu edifício se encontra em condições de
segurança tais que possa, sem perigo, receber e conservar em exposição os objectos de valor
histórico e artístico correspondente ao chamado Tesouro da Colegiada de Guimarães. Poucos dias
depois, a 28 do mesmo mês, a Delegação da Procuradoria da República, em Guimarães, informava que
o Ministro da Instrução, concordando com o parecer da Comissão Jurisdicional, autorizou que
fossem entregues, mediante rigoroso inventário, a essa Sociedade os móveis de carácter histórico
ou artístico arrolados nos edifícios das extintas congregações religiosas desta cidade. No
entanto, o Arquivo só nasceria em 1931, através decreto nº 19.952, de 27 de Junho do dito ano."""
question = 'Em que ano nasceu o arquivo?'
>>> ptnet.query(context=context, question=question)
'1931'
qaptnet-api.py
provides a simple interface to the model via HTTP. Once all the
requirements are met you can run it by simply executing:
$ python qaptnet-api
The API is available on port http://localhost:7788
, we can query the model via HTTP, for example
using curl
:
$ cat data.json
{"context": "Arquitetonicamente, a escola tem um caráter católico. (...), "question": "A quem
a Virgem Maria supostamente apareceu em 1858 em Lourdes, na França?"}
$ curl -H "Content-Type: application/json" \
--data @data.json \
http://localhost:7788/query
{"answer":"Santa Bernadette Soubirous"}
A Docker file is also available, to build the Docker image run:
$ docker build -t qaptnet-api:latest .
And run the container:
$ docker run -d --rm -p 7788:7788 qaptnet-api
Again, the API is available in http://localhost:7788
, and the same method illustrated before
can be used to query the model.
This work is partially supported by the project “SmartEGOV: Harnessing EGOV for Smart Governance (Foundations, methods, Tools) / NORTE-01-0145-FEDER-000037”, supported by Norte Portugal Regional Operational Programme (NORTE 2020), under the PORTUGAL 2020 Partnership Agreement, through the European Regional Development Fund (EFDR).