Skip to content

Commit a6f344b

Browse files
committed
Initial import
0 parents  commit a6f344b

File tree

8 files changed

+160
-0
lines changed

8 files changed

+160
-0
lines changed

.gitattributes

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
model-pretrained/pytorch_model.bin filter=lfs diff=lfs merge=lfs -text

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
__pycache__

README.md

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
2+
# qaptnet
3+
4+
**qaptnet** is an implementation of the [BERT](https://github.com/google-research/bert) model,
5+
fined tuned for question-answering tasks, trained on a Portuguese dataset. The model is
6+
available from the `model-pretrained` directory, as a [PyTorch](https://pytorch.org/) model,
7+
and the training process was performed using the
8+
[pytorch-transformers](https://github.com/huggingface/pytorch-transformers) package.
9+
In an nutshell the goal of the model is: given a question, and a context, i.e. a snippet of
10+
text that contains the answer to the given question, output the start and end token index that
11+
spans the answer.
12+
13+
The question-answering dataset is available from the
14+
[squad-v1.1-pt](https://github.com/nunorc/squad-v1.1-pt) repository, a Portuguese
15+
translation of the [SQuAD](https://rajpurkar.github.io/SQuAD-explorer/) dataset.
16+
17+
`qaptnet.py` is a simple Python package to interface with the pre-trained
18+
model. Check the `requirements.txt` file for the package dependencies.
19+
20+
## Synopsis
21+
22+
```python
23+
# import the model
24+
from qaptnet import qaptnet
25+
26+
# create a new default object
27+
ptnet = qaptnet()
28+
29+
# query the model
30+
ptnet.query(context = context, question = question)
31+
```
32+
33+
## Examples
34+
35+
The following snippets illustrate some examples of queries to the model, for the question
36+
and corresponding context.
37+
38+
```python
39+
context = """Arquitetonicamente, a escola tem um caráter católico. No topo da cúpula de ouro
40+
do edifício principal é uma estátua de ouro da Virgem Maria. Imediatamente em frente ao edifício
41+
principal e de frente para ele, é uma estátua de cobre de Cristo com os braços erguidos com a
42+
lenda "Venite Ad Me Omnes". Ao lado do edifício principal é a Basílica do Sagrado
43+
Coração. Imediatamente atrás da basílica é a Gruta, um lugar mariano de oração e reflexão.
44+
É uma réplica da gruta em Lourdes, na França, onde a Virgem Maria supostamente apareceu a Santa
45+
Bernadette Soubirous em 1858. No final da unidade principal (e em uma linha direta que liga
46+
através de 3 estátuas e da Cúpula de Ouro), é um estátua de pedra simples e moderna de Maria."""
47+
48+
question = 'A quem a Virgem Maria supostamente apareceu em 1858 em Lourdes, na França?'
49+
```
50+
51+
```python
52+
>>> ptnet.query(context=context, question=question)
53+
'Santa Bernadette Soubirous'
54+
```
55+
56+
```python
57+
context = """Beyoncé Giselle Knowles-Carter (nascida em 4 de setembro de 1981) é uma cantora
58+
americana, compositora, produtora de discos e atriz. Nascida e criada em Houston, Texas, ela se
59+
apresentou em várias competições de canto e dança quando criança, e alcançou a fama no final dos
60+
anos 90 como vocalista do grupo de R & B Destiny's Child. Dirigida por seu pai, Mathew
61+
Knowles, o grupo tornou-se um dos grupos femininos mais vendidos de todos os tempos. Seu hiato
62+
viu o lançamento do álbum de estreia de Beyoncé, Dangerously in Love (2003), que a consagrou como
63+
artista solo em todo o mundo, ganhou cinco prêmios Grammy e apresentou os singles número um da
64+
Billboard Hot 100 "Crazy in Love" e "Baby Boy" ."""
65+
66+
question = 'Em que cidade e estado Beyonce cresceu?'
67+
```
68+
69+
```python
70+
>>> ptnet.query(context=context, question=question)
71+
'Houston, Texas'
72+
```
73+
74+
```python
75+
context = """Em 17 de Outubro desse ano, a Comissão da Administração dos Bens pertencentes ao
76+
Estado inquire junto da Sociedade Martins Sarmento se o seu edifício se encontra em condições de
77+
segurança tais que possa, sem perigo, receber e conservar em exposição os objectos de valor
78+
histórico e artístico correspondente ao chamado Tesouro da Colegiada de Guimarães. Poucos dias
79+
depois, a 28 do mesmo mês, a Delegação da Procuradoria da República, em Guimarães, informava que
80+
o Ministro da Instrução, concordando com o parecer da Comissão Jurisdicional, autorizou que
81+
fossem entregues, mediante rigoroso inventário, a essa Sociedade os móveis de carácter histórico
82+
ou artístico arrolados nos edifícios das extintas congregações religiosas desta cidade. No
83+
entanto, o Arquivo só nasceria em 1931, através decreto nº 19.952, de 27 de Junho do dito ano."""
84+
85+
question = 'Em que ano nasceu o arquivo?'
86+
```
87+
88+
```python
89+
>>> ptnet.query(context=context, question=question)
90+
'1931'
91+
```

model-pretrained/config.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"attention_probs_dropout_prob": 0.1,
3+
"directionality": "bidi",
4+
"finetuning_task": null,
5+
"hidden_act": "gelu",
6+
"hidden_dropout_prob": 0.1,
7+
"hidden_size": 768,
8+
"initializer_range": 0.02,
9+
"intermediate_size": 3072,
10+
"layer_norm_eps": 1e-12,
11+
"max_position_embeddings": 512,
12+
"num_attention_heads": 12,
13+
"num_hidden_layers": 12,
14+
"num_labels": 2,
15+
"output_attentions": false,
16+
"output_hidden_states": false,
17+
"pooler_fc_size": 768,
18+
"pooler_num_attention_heads": 12,
19+
"pooler_num_fc_layers": 3,
20+
"pooler_size_per_head": 128,
21+
"pooler_type": "first_token_transform",
22+
"torchscript": false,
23+
"type_vocab_size": 2,
24+
"vocab_size": 119547
25+
}

model-pretrained/pytorch_model.bin

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
version https://git-lfs.github.com/spec/v1
2+
oid sha256:3051a96750894951478511eec3b2639e9b3fb65078140a9fa40f870974e42aec
3+
size 711467814

model-pretrained/training_args.bin

1.34 KB
Binary file not shown.

qaptnet.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
2+
import torch
3+
from pytorch_transformers import BertTokenizer, BertForQuestionAnswering
4+
5+
class qaptnet():
6+
def __init__(self,
7+
data_source = 'https://github.com/nunorc/squad-v1.1-pt/raw/master',
8+
source = 'model-pretrained',
9+
base = 'bert-base-multilingual-cased',
10+
do_lower_case = False):
11+
self.data_source = data_source
12+
self.source = source
13+
self.base = base
14+
self.do_lower_case = do_lower_case
15+
16+
# init tokenizer and model
17+
self._build_tokenizer()
18+
self._build_model()
19+
20+
def _build_tokenizer(self):
21+
print('Building tokenizer:', self.base)
22+
self.tokenizer = BertTokenizer.from_pretrained(self.base, do_lower_case=self.do_lower_case)
23+
24+
25+
def _build_model(self):
26+
print('Building model from:', self.source)
27+
self.model = BertForQuestionAnswering.from_pretrained(self.source)
28+
29+
def query(self, context=None, question=None):
30+
string = f"[CLS] {question} [SEP] {context} [SEP]"
31+
32+
starts, ends = self.model(torch.tensor(self.tokenizer.encode(string)).unsqueeze(0))
33+
34+
s, e = torch.argmax(starts[0]), torch.argmax(ends[0])
35+
36+
return self.tokenizer.decode(self.tokenizer.encode(string)[s:e+1])
37+

requirements.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
torch
2+
pytorch_transformers

0 commit comments

Comments
 (0)