## Présentation

La qualification à base de régles permet d'établir une baseline. Toutefois, il  est possible d'obtenir de meilleurs performances en développant un modèle de Deep Learning et en l'entraînant sur cette tâche. Vu la quantité limitée de données d'entraînement disponible, il est judicieux d'adopter une logique de **fine-tuning**: partir d'un modèle pré-entraîner et le fine-tuner sur un tâche annexe.

### BERT

**BERT** est un modèle de NLP basé sur des *Transformers*. Très populaire, il a servi de base à de nombreux modèles par la suite. Utilisé comme couche pré-entraînée, il permet d’obtenir de bien meilleurs résultats tout en limitant drastiquement le temps d’entraînement. Un dérivé de BERT, CamemBERT, a été entraîné sur un corpus français. Il est donc plus adapté à la tâche présentée ici.  
CamemBERT va nous servir a générer des *embeddings* pour chaque token constituant la phrase d'entrée. Ensuite, une tête de classification complètera le modèle

### Les approches possibles

Dans le cadre de ce projet, il y a 2 grandes approches possibles:

- **Classification globale**: on effectue une classification au niveau du texte complet, sans uiliser l'information de **position** de l'entité
- **Classification avec focus sur l'entité**: similaire à la classification globale, mais avec une couche supplémentaire entre la couche d'embeddings et la tête de classification afin d'utiliser l'information de position -> L'idée est de donner à la tête de classification uniquement les embeddings des tokens de l'entité initiale.

### Notebook
Le [notebook d'exemple](https://www.kaggle.com/code/thomzoy/2-qualification-par-ml) va vous servir de trame. Vous pouvez le suivre dans l'ordre, il contient des informations, du code complet ou a compléter ainsi que des pistes de travail.

>## **Proposition de travail**
>
>**- Se familiariser avec les bibliotèques de DL (datasets, pytorch, transformers, pytorch-lightning)**
>**- Suivre les instructions du notebook et implémenter les fonctionnalités manquantes**
>**- Rendre compte des performances**

## Workflow:

Le workflow décrit dans le notebook est le suivant

- Création d'un [Dataset](https://huggingface.co/docs/datasets/installation) à partir des données d'entrée
- Création d'un [DataModule](https://pytorch-lightning.readthedocs.io/en/stable/data/datamodule.html)
- Création du modèle [PyTorch](https://pytorch.org/docs/stable/generated/torch.nn.Module.html),  wrappé autour d'un [Module PyTorch-Lightning](https://pytorch-lightning.readthedocs.io/en/latest/common/lightning_module.html)
- Entraînement à l'aide d'un [Trainer](https://pytorch-lightning.readthedocs.io/en/latest/common/trainer.html)

Dans ce workflow, différentes libraires sont utilisées, entre autres:
- `datasets` : permet de gérer le préprocessing des données
- `pytorch` : librairie de base permettant la création de modèles de ML/DL
- `transformers` : contient les modèles de Transformers (notamment BERT) ainsi que leur tokenizer associé.
- `pytorch-lightning` : wrapper autour de `pytorch` permettant un développement plus simple et rapide

N'hésitez pas à parcourir leur documentation pour vous familiariser avec les fonctionnalités utilisées dans le notebook