# Spécification de la représentation des données calculées pour un lot de perturbations
## Perturbation
Les perturbations ont décrites à l'aide du même système que décrit dans `specs_perturbations.md`.
## Données obtenues
On peut obtenir jusqu'à 4 ensembles de valeurs différents:
-`baseline_perf` (liste de `float`) : les scores (distance entre les représentations) des paires (question document) lorsqu'on n'applique pas la perturbation
-`perturbed_perf` (liste de `float`) : les scores distance entre les représentations) des paires (question document) lorsqu'on applique la perturbation
-`patching_mean` (tableau au format du modèle de `float`) : matrice de sensibilité (moyennes pour chaque composant des sensibilités obtenues pour chaque paires)
-`patching_std` (tableau au format du modèle de `float`) : écarts-types pour chaque composant des sensibilités obtenues pour chaque paires
Si `patching_mean` et/ou `patching_std` ne sont pas calculés, ils valent null
## Spécification globale
Les valeurs sont regroupées dans une liste ou chaque objet contient:
- La description de la perturbation correspondante
- Dans un objet `results` les quatre données attendues
## Ancienne représentation
L'ancienne représentation des résultats pour les perturbations append, prepend et replace était de la forme
```{json}
{
"nom_perturbation" : {
"baseline_perf" : ...
"perturbed_perf": ...
"patching_mean" : ...
"patching_std" : ...
},
"nom_perturbation2" : {
"baseline_perf" : ...
"perturbed_perf": ...
"patching_mean" : ...
"patching_std" : ...
}
...
}
```
Dans le cas des perturbations full_replace. Il n'y avait les résultats que d'une perturbation dans le fichier. Le nom de la perturbation était systématiquement "full_replace" et les reste de la structure du fichier est la même pour les autres types de perturbations.
# Spécifications de description d'une liste de perturbations
## Perturbations
On distingue quatre types de perturbations:
-`replace` : remplace **un** mot par un autre (peut être utilisé pour supprimer un mot) dans un document
-`append`: ajoute un mot à la fin du document
-`prepend`: ajoute un mot au début du document
-`full_replace` : remplace une liste de mots par une autres (correspond au cumul de plusieurs perturbations de type `replace`)
## Au format texte
Trois types de perturbations peuvent être décrits au format texte :
-`replace` : représenté par `mot_remplacé -> mot replaçant`
-`prepend` : représenté par `mot_ajouté+`
-`append` : représenté par `+mot_ajouté`
Chaque perturbation de la liste est séparé par (au moins) un retour à la ligne. Les types de perturbations peuvent être mélangés.
## Au format json
Quatre types de perturbations peuvent être décrits au format json. Elles sont regroupés dans une liste où chaque perturbation est décrite comme suit.
Les perturbations de type `replace` sont représentés par des objets de la forme
```{json}
{
"type" : "replace",
"from" : "mot_remplacé",
"to" : "mot_remplaçant",
"name" : "mot_remplacé -> mot remplaçant",
}
```
Les perturbations de type `append` sont représentés par des objets de la forme
```{json}
{
"type" : "append",
"word" : "mot_ajouté",
"name" : "+mot_ajouté",
}
```
Les perturbations de type `prepend` sont représentés par des objets de la forme
```{json}
{
"type" : "prepend",
"word" : "mot_ajouté",
"name" : "mot_ajouté+",
}
```
Les perturbations de type `full_replace` sont représentées par des objets de la forme
```{json}
{
"type" : "full_replace",
"name" : "<description succincte>",
"compo": [
{
"type" : "replace",
"from" : "mot_remplacé",
"to" : "mot_remplaçant",
"name" : "mot_remplacé -> mot_remplaçant",
},
{
"type" : "replace",
"from" : "mot_remplacé",
"to" : "mot_remplaçant",
"name" : "mot_remplacé -> mot_remplaçant",
},
...
]
}
```
`compo` correspond à une liste de perturbations de type `replace`. Si un même mot est remplacé plusieurs fois ou qu'un mot remplaçant est lui même remplacé, le comportement n'est pas garanti.