File size: 6,055 Bytes
0bbe640
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3c11e49
 
0bbe640
 
 
3c11e49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6567cd9
3c11e49
 
 
6567cd9
 
3c11e49
 
 
 
 
 
0bbe640
 
 
 
 
 
 
3c11e49
 
 
 
 
 
 
 
 
 
 
 
0bbe640
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
---
license: apache-2.0
tags:
- generated_from_trainer
datasets:
- lc_quad
model-index:
- name: flan-t5-text2sparql-custom-tokenizer
  results: []
---

<!-- This model card has been generated automatically according to the information the Trainer had access to. You
should probably proofread and complete it, then remove this comment. -->

# flan-t5-text2sparql-custom-tokenizer

This model is a fine-tuned version of [google/flan-t5-base](https://huggingface.co/google/flan-t5-base) on the lc_quad dataset.
It achieves the following results on the evaluation set:
- Loss: 1.8039

## Model description

This model uses the T5 tokenizer just for the input and a [custom one](https://huggingface.co/InfAI/sparql-tokenizer) for the SPARQL queries. This
has lead to a dramatic improvement in performance, albeit not quite usable yet.

## Intended uses & limitations

Because we used two different tokenizers, you cannot use this model simply in a pipeline. Use the following Python code as a starting point:

```python
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer

model_checkpoint = "InfAI/flan-t5-text2sparql-custom-tokenizer"
question = "What was the population of Clermont-Ferrand on 1-1-2013?"
gold_answer = "SELECT ?obj WHERE { wd:Q42168 p:P1082 ?s . ?s ps:P1082 ?obj . ?s pq:P585 ?x filter(contains(YEAR(?x),'2013')) }"

model = AutoModelForSeq2SeqLM.from_pretrained(model_checkpoint)

tokenizer_in = AutoTokenizer.from_pretrained("google/flan-t5-base")
tokenizer_out = AutoTokenizer.from_pretrained("InfAI/sparql-tokenizer")

sample = f"Create SPARQL Query: {question}"

inputs = tokenizer_in([sample], return_tensors="pt")
outputs = model.generate(**inputs)

print(f"Gold answer: {gold_answer}")
print("       Model:" + tokenizer_out.decode(outputs[0], skip_special_tokens=True))
```

```
Gold answer: SELECT ?obj WHERE { wd:Q42168 p:P1082 ?s . ?s ps:P1082 ?obj . ?s pq:P585 ?x filter(contains(YEAR(?x),'2013'))
      Model: SELECT?obj WHERE { wd:Q4754 p:P1082?s.?s ps:P1082?obj.?s pq:P585?x filter(contains(YEAR(?x),'2013')) }
```

Common errors include:

- A stray closed curly brace at the end
- One of subject / predicate / object is wrong, while the other two are correct

## Training and evaluation data

More information needed

## Training procedure

We trained the model for 50 epochs, which was way over the top. The loss stagnates after about 25 epochs and looking manually
at some examples from the validation set showed us that the queries do not improve beyond this point using these hyperparameters.
We were aware that the number of epochs was probably too high, but our goal was to find out how many epochs were beneficial
to the performance.

There are two avenues we will explore to get rid of these errors:

- Continue training with different hyperparameters
- Apply more preprocessing to the dataset

The results will be uploaded to this repo.

### Training hyperparameters

The following hyperparameters were used during training:
- learning_rate: 0.0001
- train_batch_size: 16
- eval_batch_size: 16
- seed: 42
- gradient_accumulation_steps: 4
- total_train_batch_size: 64
- optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08
- lr_scheduler_type: linear
- num_epochs: 50

### Training results

| Training Loss | Epoch | Step  | Validation Loss |
|:-------------:|:-----:|:-----:|:---------------:|
| No log        | 1.0   | 301   | 2.6503          |
| 3.2271        | 2.0   | 602   | 2.3894          |
| 3.2271        | 3.0   | 903   | 2.2532          |
| 2.3957        | 4.0   | 1204  | 2.1631          |
| 2.18          | 5.0   | 1505  | 2.0788          |
| 2.18          | 6.0   | 1806  | 2.0195          |
| 2.0209        | 7.0   | 2107  | 1.9681          |
| 2.0209        | 8.0   | 2408  | 1.9353          |
| 1.9087        | 9.0   | 2709  | 1.8936          |
| 1.8114        | 10.0  | 3010  | 1.8683          |
| 1.8114        | 11.0  | 3311  | 1.8556          |
| 1.7254        | 12.0  | 3612  | 1.8284          |
| 1.7254        | 13.0  | 3913  | 1.8099          |
| 1.6556        | 14.0  | 4214  | 1.7932          |
| 1.5891        | 15.0  | 4515  | 1.7823          |
| 1.5891        | 16.0  | 4816  | 1.7691          |
| 1.528         | 17.0  | 5117  | 1.7569          |
| 1.528         | 18.0  | 5418  | 1.7578          |
| 1.4784        | 19.0  | 5719  | 1.7561          |
| 1.4288        | 20.0  | 6020  | 1.7514          |
| 1.4288        | 21.0  | 6321  | 1.7372          |
| 1.3793        | 22.0  | 6622  | 1.7318          |
| 1.3793        | 23.0  | 6923  | 1.7244          |
| 1.3436        | 24.0  | 7224  | 1.7382          |
| 1.3073        | 25.0  | 7525  | 1.7254          |
| 1.3073        | 26.0  | 7826  | 1.7494          |
| 1.2692        | 27.0  | 8127  | 1.7378          |
| 1.2692        | 28.0  | 8428  | 1.7387          |
| 1.242         | 29.0  | 8729  | 1.7290          |
| 1.2107        | 30.0  | 9030  | 1.7391          |
| 1.2107        | 31.0  | 9331  | 1.7458          |
| 1.1817        | 32.0  | 9632  | 1.7528          |
| 1.1817        | 33.0  | 9933  | 1.7521          |
| 1.1661        | 34.0  | 10234 | 1.7672          |
| 1.136         | 35.0  | 10535 | 1.7594          |
| 1.136         | 36.0  | 10836 | 1.7564          |
| 1.1216        | 37.0  | 11137 | 1.7670          |
| 1.1216        | 38.0  | 11438 | 1.7724          |
| 1.1031        | 39.0  | 11739 | 1.7766          |
| 1.0834        | 40.0  | 12040 | 1.7756          |
| 1.0834        | 41.0  | 12341 | 1.7786          |
| 1.0707        | 42.0  | 12642 | 1.7947          |
| 1.0707        | 43.0  | 12943 | 1.7931          |
| 1.058         | 44.0  | 13244 | 1.7925          |
| 1.0489        | 45.0  | 13545 | 1.7939          |
| 1.0489        | 46.0  | 13846 | 1.7969          |
| 1.0421        | 47.0  | 14147 | 1.7982          |
| 1.0421        | 48.0  | 14448 | 1.7994          |
| 1.0357        | 49.0  | 14749 | 1.8018          |
| 1.03          | 50.0  | 15050 | 1.8039          |


### Framework versions

- Transformers 4.18.0
- Pytorch 1.10.2+cu102
- Datasets 2.4.0
- Tokenizers 0.12.1