{ "cells": [ { "cell_type": "markdown", "source": [ "# Classification de commentaires avec Camembert sans prise de tête : les fondamentaux 🇫🇷\n", "\n", "[Xiaoou WANG](https://scholar.google.fr/citations?user=vKAMMpwAAAAJ&hl=en)" ], "metadata": { "collapsed": false } }, { "cell_type": "markdown", "source": [ "## Motivation\n", "\n", "Camembert a été publié en juin 2020. Cependant force est de constater que l'emploi de Bert en français (Il s'agit plutôt de Roberta pour Camembert, voir [10 questions rapides sur Bert](01_theorie)) n'est pas encore une tendance. Nous pensons que cela est en partie dû au manque de tutoriels sur l'emploi des modèles pré-entraînés.\n", "\n", "Ceci est le deuxième d'une série de 10 tutoriels sur Camembert. Dans ce tuto nous allons voir notamment comment utiliser Camembert sans fine-tuning, ce dernier présupposant des connaissances relativement plus poussées.\n", "\n", "Nous commençons par installer `transformers` et `sentencepiece`, deux packages nécessaires à l'usage de Camembert. Quelques autres packages courants en machine learning ont aussi été importés." ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# !pip install transformers\n", "# !pip install sentencepiece\n", "\n", "import numpy as np\n", "import pandas as pd\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.model_selection import GridSearchCV\n", "from sklearn.model_selection import cross_val_score\n", "import torch\n", "import transformers as ppb\n", "import warnings\n", "warnings.filterwarnings('ignore')" ] }, { "cell_type": "markdown", "source": [ "## Données\n", "\n", "Ensuite nous importons les données. Il s'agit d'un petit jeu de données que j'ai trouvé [ici](https://medium.com/@vitalshchutski/french-nlp-entamez-le-camembert-avec-les-librairies-fast-bert-et-transformers-14e65f84c148). Cela vous permettra notamment de répliquer ce tutoriel sur votre propre ordinateur, tant l'usage de GPU est peu nécessaire.\n", "\n", "La structure du dataframe est simple. Il y a une colonne commentaire avec quelques autres colonnes annotant la classe de ce commentaire. J'ai filtré les autres classes en ne gardant que `temps` pour utiliser une simple régression logistique sur les données. 1 signifie que le commentaire est lié à des problèmes de temps d'attente et 0 non." ], "metadata": { "collapsed": false } }, { "cell_type": "code", "execution_count": 48, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of sentences: 322\n", "\n" ] }, { "data": { "text/plain": " review temps\n10 accueil moyen... 0\n273 .trop d'attente.insupportable trop de stress 1\n84 la boutique 0\n81 pas trop de monde contrairement à d'autres bou... 0\n276 1h30 d’attente pour un service irrespectueux. 1", "text/html": "
\n | review | \ntemps | \n
---|---|---|
10 | \naccueil moyen... | \n0 | \n
273 | \n.trop d'attente.insupportable trop de stress | \n1 | \n
84 | \nla boutique | \n0 | \n
81 | \npas trop de monde contrairement Ă d'autres bou... | \n0 | \n
276 | \n1h30 d’attente pour un service irrespectueux. | \n1 | \n