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