File size: 8,273 Bytes
376611b
31c4de0
 
 
376611b
 
31c4de0
 
376611b
 
 
 
31c4de0
376611b
 
 
31c4de0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
376611b
 
 
31c4de0
 
 
376611b
 
 
31c4de0
 
 
 
 
 
 
 
 
 
376611b
 
 
31c4de0
 
 
 
376611b
 
 
31c4de0
 
376611b
31c4de0
376611b
 
31c4de0
376611b
31c4de0
376611b
 
 
 
3d34565
376611b
 
31c4de0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
---
language: de
datasets:
- JohnnyBoy00/saf_legal_domain_german
tags:
- generated_from_trainer
widget:
- text: "Antwort: Sanktionen und Kürzungen der Bezüge Lösung: Merkblatt 1 für Arbeitslose, S. 23, 24: Um Anspruch auf Arbeitslosengeld zu haben, müssen Sie für Vermittlungsbemühungen Ihrer Agentur für Arbeit zur Verfügung stehen. Sie müssen: 1. Vorschlägen der Arbeitsagentur zur beruflichen Eingliederung zeit- und ortsnah Folge leisten. Sie haben deshalb sicherzustellen, dass Ihre Agentur für Arbeit Sie persönlich an jedem Werktag unter der von Ihnen benannten Anschrift durch Briefpost erreichen kann (Erreichbarkeit); 2. Eine versicherungspflichtige, mindestens 15 Stunden wöchentlich umfassende Beschäftigung unter den auf dem Arbeitsmarkt allgemein üblichen Arbeitsbedingungen ausüben können und dürfen (Erwerbsfähigkeit); 3. Bereit sein, an Maßnahmen zur beruflichen Eingliederung in das Erwerbsleben teilzunehmen (Bereitschaft zur Teilnahme an Eingliederungsmaßnahmen); 4. Bereit sein, jede Ihnen zumutbare Beschäftigung anzunehmen (Bereitschaft zur Annahme und Aufnahme jeder zumutbaren Beschäftigung) Frage: Mit welcher Folge und welcher Dauer müssen Sie rechnen, wenn Sie Ihre notwendigen Eigenbemühungen nicht rechtzeitig oder nicht vollständig erfüllen?"
---

# mbart-finetuned-saf-legal-domain

This model is a fine-tuned version of [facebook/mbart-large-cc25](https://huggingface.co/facebook/mbart-large-cc25) on the [saf_legal_domain_german](https://huggingface.co/datasets/JohnnyBoy00/saf_legal_domain_german) dataset for Short Answer Feedback (SAF).

## Model description

This model was built on top of [mBART](https://arxiv.org/abs/2001.08210), which is a sequence-to-sequence denoising auto-encoder pre-trained on large-scale monolingual corpora in many languages.

It expects inputs in the following format:
```
Antwort: [answer] Lösung: [reference_answer] Frage: [question]
```

In the example above, `[answer]`, `[reference_answer]` and `[question]` should be replaced by the provided answer, the reference answer and the question to which they refer, respectively.


The outputs are formatted as follows:
```
[verification_feedback] Feedback: [feedback]
```

Hence, the `[verification_feedback]` label will be one of `Correct`, `Partially correct` or `Incorrect`, while `[feedback]` will be the textual feedback generated by the model according to the given answer.

## Intended uses & limitations

This model is intended to be used for Short Answer Feedback generation in the domain of the German social law. Thus, it is not expected to have particularly good performance on sets of questions and answers out of this scope.

It is important to acknowledge that the model underperforms when a question that was not seen during training is given as input for inference. In particular, it tends to classify most answers as being correct and does not provide relevant feedback in such cases. Nevertheless, this limitation could be partially overcome by extending the dataset with the desired question (and associated answers) and fine-tuning it for a few epochs on the new data.

## Training and evaluation data

As mentioned previously, the model was trained on the [saf_legal_domain_german](https://huggingface.co/datasets/JohnnyBoy00/saf_legal_domain_german) dataset, which is divided into the following splits.

| Split                 | Number of examples |
| --------------------- | ------------------ |
| train                 | 1596	             |
| validation            | 400	             |
| test_unseen_answers   | 221	             |
| test_unseen_questions | 275                |

Evaluation was performed on the `test_unseen_answers` and `test_unseen_questions` splits.

## Training procedure

The [Trainer API](https://huggingface.co/docs/transformers/main_classes/trainer#transformers.Seq2SeqTrainer) was used to fine-tune the model. The code utilized for pre-processing and training was mostly adapted from the [summarization script](https://github.com/huggingface/transformers/tree/main/examples/pytorch/summarization) made available by HuggingFace.

Training was completed in a little over 1 hour on a GPU on Google Colab.

### Training hyperparameters

The following hyperparameters were used during training:
- num_epochs: 9
- optimizer: Adam with betas=(0.9,0.999) and epsilon=1e-08
- learning_rate: 5e-05
- lr_scheduler_type: linear
- train_batch_size: 1
- gradient_accumulation_steps: 4
- eval_batch_size: 4
- mixed_precision_training: Native AMP
- seed: 42

### Framework versions

- Transformers 4.25.1
- Pytorch 1.13.0+cu116
- Datasets 2.7.1
- Tokenizers 0.13.2

## Evaluation results

The generated feedback was evaluated through means of the [SacreBLEU](https://huggingface.co/spaces/evaluate-metric/sacrebleu), [ROUGE](https://huggingface.co/spaces/evaluate-metric/rouge), [METEOR](https://huggingface.co/spaces/evaluate-metric/meteor), [BERTScore](https://huggingface.co/spaces/evaluate-metric/bertscore) metrics from HuggingFace, while the [accuracy](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.accuracy_score.html) and [F1](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.f1_score.html) scores from scikit-learn where used for evaluation of the labels.

The following results were achieved.

| Split                 | SacreBLEU | ROUGE | METEOR | BERTscore | Accuracy | Weighted F1 | Macro F1 | 
| --------------------- | :-------: | :---: | :----: | :-------: | :------: | :---------: | :------: |
| test_unseen_answers   | 43.6	    | 45.3  | 57.4   | 55.0      | 81.0     | 79.4        | 71.3     |
| test_unseen_questions | 3.0       | 4.2   | 19.9   | 16.1      | 60.0     | 54.4        | 53.2     |


The script used to compute these metrics and perform evaluation can be found in the `evaluation.py` file in this repository.

## Usage

The example below shows how the model can be applied to generate feedback to a given answer.

```python
from transformers import AutoModelForSeq2SeqLM, AutoTokenizer

model = AutoModelForSeq2SeqLM.from_pretrained('JohnnyBoy00/mbart-finetuned-saf-legal-domain')
tokenizer = AutoTokenizer.from_pretrained('JohnnyBoy00/mbart-finetuned-saf-legal-domain')

example_input = 'Antwort: Sanktionen und Kürzungen der Bezüge Lösung: Merkblatt 1 für Arbeitslose, S. 23, 24: Um Anspruch auf Arbeitslosengeld zu haben, müssen Sie für Vermittlungsbemühungen Ihrer Agentur für Arbeit zur Verfügung stehen. Sie müssen: 1. Vorschlägen der Arbeitsagentur zur beruflichen Eingliederung zeit- und ortsnah Folge leisten. Sie haben deshalb sicherzustellen, dass Ihre Agentur für Arbeit Sie persönlich an jedem Werktag unter der von Ihnen benannten Anschrift durch Briefpost erreichen kann (Erreichbarkeit); 2. Eine versicherungspflichtige, mindestens 15 Stunden wöchentlich umfassende Beschäftigung unter den auf dem Arbeitsmarkt allgemein üblichen Arbeitsbedingungen ausüben können und dürfen (Erwerbsfähigkeit); 3. Bereit sein, an Maßnahmen zur beruflichen Eingliederung in das Erwerbsleben teilzunehmen (Bereitschaft zur Teilnahme an Eingliederungsmaßnahmen); 4. Bereit sein, jede Ihnen zumutbare Beschäftigung anzunehmen (Bereitschaft zur Annahme und Aufnahme jeder zumutbaren Beschäftigung) Frage: Mit welcher Folge und welcher Dauer müssen Sie rechnen, wenn Sie Ihre notwendigen Eigenbemühungen nicht rechtzeitig oder nicht vollständig erfüllen?'
inputs = tokenizer(example_input, max_length=256, padding='max_length', truncation=True, return_tensors='pt')

generated_tokens = model.generate(
                inputs['input_ids'],
                attention_mask=inputs['attention_mask'],
                max_length=128
            )
output = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)[0]
```

The output produced by the model then looks as follows:

```
Incorrect Feedback: Erbringen Sie die notwendigen Eigenbemühungen, müssen mit einer Sperrzeit von zwei Wochen rechnen. Bitte beachten Sie, dass Sie in der Regel bereits in der Eingliederungsvereinbarung auf die Rechtsfolgen unzureichender Eigenbemühungen schriftlich hingewiesen werden. Das führt dazu, dass die gesetzlich vorgesehene Sperrzeit von zwei Wochen auch ohne vorherige Abbruch eintreten kann.
```