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**. |