Coder Social home page Coder Social logo

qaptnet's Introduction

qaptnet

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.

Synopsis

# import the model
from qaptnet import qaptnet

# create a new default object
ptnet = qaptnet()

# query the model
ptnet.query(context = context, question = question)

Examples

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'

Using the qaptnet API

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.

Acknowledgements

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).

qaptnet's People

Contributors

nunorc avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

qaptnet's Issues

QA de grandes textos

Olá tudo bem? Achei muito legal seu projeto, estive testando e percebi que ele funciona bem, entretanto ele não funciona quando possui textos com mais de 512 caracteres, tem alguma forma de lidar com isso? Para que ele consiga pegar um contexto maior que 512 palavras?
Acredito que seja uma boa modificação de aperfeiçoamento

Erro para carregar o modelo pré treinado

Erro para carregar o modelo:

Building tokenizer: bert-base-multilingual-cased
Building model from: qaptnet/model-pretrained
---------------------------------------------------------------------------
UnpicklingError                           Traceback (most recent call last)
<ipython-input-18-f3262ee4fdc8> in <module>()
     36 
     37 # create a new default object
---> 38 ptnet = qaptnet()

4 frames
/usr/local/lib/python3.6/dist-packages/torch/serialization.py in _legacy_load(f, map_location, pickle_module, **pickle_load_args)
    761             "functionality.".format(type(f)))
    762 
--> 763     magic_number = pickle_module.load(f, **pickle_load_args)
    764     if magic_number != MAGIC_NUMBER:
    765         raise RuntimeError("Invalid magic number; corrupt file?")

UnpicklingError: invalid load key, 'v'.

Passos seguidos em: https://colab.research.google.com/drive/1ny7IosI0UuGqH9lkbpskpaPxKDt8-NP1?authuser=1#scrollTo=2dQmxuLPqOHP

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.