File size: 6,206 Bytes
364eee1
 
91df020
eee7e1c
0c63652
dc0b80d
364eee1
84184a5
 
9eecee5
 
2b3112d
84184a5
4a16e6a
 
 
a9ed088
2b3112d
84184a5
4a16e6a
2b3112d
48331c6
 
 
ea47b80
 
 
 
 
 
 
 
 
 
 
48331c6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
ea47b80
2b3112d
 
 
 
 
 
a2bfdc7
 
4a16e6a
84184a5
 
 
4a16e6a
84184a5
 
 
4a16e6a
 
 
 
 
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
---
license: cc
widget:
- text: "Nouveaux records d’émissions de CO₂ du secteur énergétique en 2022, selon une étude"
- text: "Climat et énergie : les objectifs de l’Union européenne pour 2030 ont du « plomb dans l’aile »"
- text: "Municipales à Paris : Emmanuel Grégoire « se prépare méthodiquement » pour l’après Hidalgo"
---
# 🌍 Détection des articles de presse française traitant des sujets liés au climat

*🇬🇧 / 🇺🇸 : as this model is trained only on French data, all explanations are written in French in this repository. The goal of the model is to classify titles of French newspapers in two categories : if it's about climate or not.* 

## 🗺️ Le contexte

Ce modèle de classification de **titres d'article de presse française** a été réalisé pour l'association [Data for good](https://dataforgood.fr/) à Grenoble et plus particulièrement pour l'association [Quota climat](https://www.quotaclimat.org/).

L'objectif de ce modèle est de savoir si un **article de presse** traite du **sujet du climat** à partir de son **titre**. Cette tache est complexe car l'algorithme **n'a pas accès au contenu** des articles de presse. Néanmoins, à l'aide des modèles de langage basés sur les [tranformeurs](https://fr.wikipedia.org/wiki/Transformeur) et plus particulièrement les modèles basés sur une architecture [BERT](https://fr.wikipedia.org/wiki/BERT_(mod%C3%A8le_de_langage)), on peut obtenir des résultats intéressants. Nous avons étudié les **deux principaux modèles** basés sur cette architecture et entrainés sur des **corpus en français** : [FlauBERT](https://hal.science/hal-02784776v3/document) et [CamemBERT](https://camembert-model.fr/)

## 📋 L'utilisation du modèle final

Le modèle final présenté n'est évidemment **pas parfait** et possède des **biais**. En effet, certains choix du modèles peuvent être discutables : ceci provient du **périmètre de définition** de la notion de **climat**.

Pour tester le modèle avec le langage Python, il y a **deux solutions** :
- Soit en **téléchargeant le modèle** avec la bibliothèque Python [transformers](https://pypi.org/project/transformers/)

Pour tester le modèle, il suffit d'installer la bibliothèque Python [transformers](https://pypi.org/project/transformers/) dans un environnement virtuel et exécuter le code suivant :
```python
from transformers import pipeline

pipe = pipeline("text-classification", model="pierre-loic/climate-news-articles")
sentence = "Guerre en Ukraine, en direct : le président allemand appelle à ne pas « bloquer » Washington pour la livraison d’armes à sous-munitions"
print(pipe(sentence))
```
```
[{'label': 'NE TRAITE PAS DU CLIMAT', 'score': 0.6566330194473267}]
```
- Soit en appelant l'**API** d'Hugging Face avec la bibliothèque Python [requests](https://pypi.org/project/requests/)

Pour appeler l'**API** d'Hugging Face, il vous faut un **token** que vous pouvez récupérer dans votre espace personnel. Il ne vous plus qu'à exécuter le code suivant :
```python
import requests

API_URL = "https://api-inference.huggingface.co/models/pierre-loic/climate-news-articles"
headers = {"Authorization": "Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}

def query(payload):
	response = requests.post(API_URL, headers=headers, json=payload)
	return response.json()
	
output = query({
	"inputs": "Canicule : deux nouveaux départements du Sud-Est placés en vigilance orange lundi",
})
print(output)
```
```
[[{'label': 'TRAITE DU CLIMAT', 'score': 0.511335015296936}, {'label': 'NE TRAITE PAS DU CLIMAT', 'score': 0.48866504430770874}]]
```

## 🔎 Le détail du travail d'entrainement

### La méthodologie utilisée

Différentes pistes d'étude ont été explorées pour aboutir au modèle final :
- La **première piste** que nous avons étudiée est de faire prédire la classification des titres d'articles de presse entre "climat" et "pas climat" par [ChatGPT](https://openai.com/blog/chatgpt) grâce à du [prompt engineering](https://en.wikipedia.org/wiki/Prompt_engineering). Les résultats étaient assez intéressants mais le modèle se trompait parfois sur des cas très simples.
- La **deuxième piste** que nous avons étudiée est de vectoriser les mots des titres de presse par une méthode Tf-Idf et d'utiliser un modèle de classification ([régression logistique](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html) et [random forest](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html)). Les résultats étaient légérement meilleurs qu'avec un dummy classifier (qui prédit toujours la classe majoritaire "Climat").
- La **troisième piste** que nous avons étudiée est de vectoriser les titres des articles de presse avec un modèle de type [BERT](https://fr.wikipedia.org/wiki/BERT_(mod%C3%A8le_de_langage)) ([camemBERT](https://camembert-model.fr/) uniquement entrainé sur un corpus francophone) et ensuite d'utiliser un modèle de classification ([régression logistique](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html) et [random forest](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html)) sur les plongements. Les résultats étaient intéressants.
- La **quatrième piste** (celle qui a été retenue pour ce modèle) est de faire un fine-tuning d'un modèle de BERT (FlauBERT ou CamemBERT) pour la tache de classification. 

### Les données

Les données proviennent d'une collecte de **titres d'articles de presse française** collectés durant plusieurs mois. Nous avons labellisé environ **2000 de ces titres** pour entrainer le modèle.

### Le modèle final

Le modèle retenu est un modèle de type FlauBERT avec un **fine-tuning** pour la **classification des articles de presse**. Les **données d'entrainement** ont été **sous-échantilonnées (undersampling)** pour équilibrer les classes.

### Les améliorations envisageables

Pour **améliorer le modèle**, il pourrait être intéressant d'**intégrer plus de données** sur les domaines où le modèle **se trompe le plus**.