Classification de texte BERT dans une autre langue
L’ensemble de données est stocké dans deux fichiers texte que nous pouvons récupérer à partir du page de compétition. Une option pour les télécharger est d’utiliser 2 simples wget
Commandes CLI.
Ensuite, nous utilisons certains pandas
magique pour créer une trame de données.
Comme nous n’avons pas de jeu de données de test, nous avons divisé notre jeu de données – train_df
et test_df
. Nous utilisons 90% des données pour la formation ( train_df
) et 10% pour les tests ( test_df
).
L’étape suivante consiste à charger le modèle pré-formé. Nous le faisons en créant un ClassificationModel
instance appelée model
. Cette instance prend les paramètres de:
- l’architecture (dans notre cas
"bert"
) - le modèle pré-formé (
"distilbert-base-german-cased"
) - le nombre d’étiquettes de classe (
4
) - et notre hyperparamètre de formation (
train_args
).
Vous pouvez configurer l’hyperparamètre dans un large éventail de possibilités. Pour une description détaillée de chaque attribut, veuillez vous référer au Documentation.
Pour former notre modèle, il suffit de courir model.train_model()
et spécifiez sur quel ensemble de données vous entraîner.
Après avoir formé notre modèle avec succès, nous pouvons l’évaluer. Par conséquent, nous créons une fonction d’assistance simple f1_multiclass()
, qui est utilisé pour calculer la f1_score
. le f1_score
est une mesure de la précision du modèle. Plus à ce sujet ici.
Nous avons atteint un f1_score
de 0.6895
. Au départ, cela semble plutôt faible, mais gardez à l’esprit: la soumission la plus élevée à Germeval 2019 était 0.7361
. Nous aurions atteint le top 20 sans régler l’hyperparamètre. C’est assez impressionnant!
Dans un futur billet, je vais vous montrer comment atteindre un niveau supérieur f1_score
en réglant les hyperparamètres.
Transformers simples sauve le model
automatiquement tous les 2000
étapes et à la fin du processus de formation. Le répertoire par défaut est outputs/
. Mais le output_dir
est un hyperparamètre et peut être écrasé. J’ai créé une fonction d’aide pack_model()
, que nous utilisons pour pack
tous les fichiers de modèle requis dans un tar.gz
fichier pour le déploiement.
Enfin, nous chargeons et prédisons un exemple réel. Depuis que nous avons emballé nos fichiers une étape plus tôt avec pack_model()
, nous devons unpack
les d’abord. J’ai donc écrit une autre fonction d’aide unpack_model()
pour décompresser nos fichiers modèles.
Pour charger un modèle enregistré, il suffit de fournir le path
à nos fichiers enregistrés et l’initialiser de la même manière que nous l’avons fait dans l’étape de formation. Remarque: vous devrez spécifier les arguments corrects (généralement les mêmes que ceux utilisés lors de la formation) lors du chargement du modèle.
Après l’initialisation, nous pouvons utiliser le model.predict()
pour classer une sortie avec une entrée donnée. Dans cet exemple, nous prenons deux tweets de l’ensemble de données Germeval 2018.
Notre modèle a prédit la bonne classe OTHER
et INSULT
.
En conclusion, nous pouvons dire que nous avons atteint notre objectif de créer un modèle de classification de texte non anglais basé sur BERT.
Notre exemple faisait référence à la langue allemande mais peut facilement être transféré dans une autre langue. HuggingFace propose de nombreux modèles pré-formés pour des langues comme le français, l’espagnol, l’italien, le russe, le chinois,…