Le code source utilisé pour la classification du texte en utilisant uniquement les noms d'étiquette: une approche auto-traçante du modèle de langue , publiée dans EMNLP 2020.
Au moins un GPU est nécessaire pour exécuter le code.
Avant d'exécuter, vous devez d'abord installer les packages requis en tapant les commandes suivantes:
$ pip3 install -r requirements.txt
Vous devez également télécharger les mots arrêtés dans la bibliothèque NLTK:
import nltk
nltk.download('stopwords')
Python 3.6 ou plus est fortement recommandé; L'utilisation de versions Python plus anciennes peut entraîner des problèmes d'incompatibilité.
Nous fournissons quatre scripts get_data.sh pour le téléchargement des ensembles de données utilisés dans le document sous datasets et quatre scripts de formation agnews.sh , dbpedia.sh , imdb.sh et amazon.sh pour exécuter le modèle sur les quatre ensembles de données.
Remarque: Notre modèle n'utilise pas d'étiquettes de formation; Nous fournissons les étiquettes de vérité de formation / test de test uniquement pour l'exhaustivité et l'évaluation.
Les scripts d'entraînement supposent que vous avez deux GPU de 10 Go. Si vous avez un nombre différent de GPU ou des GPU de différentes tailles de mémoire, reportez-vous à la section suivante pour modifier les arguments de ligne de commande suivants de manière appropriée (tout en gardant d'autres arguments inchangés): train_batch_size , accum_steps , eval_batch_size et gpus .
La signification des arguments de ligne de commande sera affichée lors de la saisie
python src/train.py -h
Les arguments suivants affectent directement les performances du modèle et doivent être définis avec soin:
train_batch_size , accum_steps , gpus : ces trois arguments doivent être mis ensemble. Vous devez vous assurer que la taille efficace du lot d'entraînement , calculée comme train_batch_size * accum_steps * gpus , est d'environ 128 . Par exemple, si vous avez 4 GPU, vous pouvez définir train_batch_size = 32, accum_steps = 1, gpus = 4 ; Si vous avez 1 GPU, vous pouvez définir train_batch_size = 32, accum_steps = 4, gpus = 1 . Si vos GPU ont des tailles de mémoire différentes, vous devrez peut-être changer train_batch_size tout en ajustant accum_steps et gpus en même temps pour maintenir la taille efficace du lot d'entraînement autour de 128 .eval_batch_size : Cet argument affecte uniquement la vitesse de l'algorithme; Utilisez aussi grande taille d'évaluation que vos GPU peuvent tenir.max_len : Cet argument contrôle la longueur maximale des documents alimentés dans le modèle (les documents plus longs seront tronqués). Idéalement, max_len devrait être réglé sur la longueur du document le plus long ( max_len ne peut pas être supérieur à 512 sous l'architecture Bert), mais l'utilisation de max_len plus grande consomme également plus de mémoire GPU, ce qui entraîne une plus petite taille de lot et un temps de formation plus long. Par conséquent, vous pouvez échanger une précision du modèle pour une formation plus rapide en réduisant max_len .mcp_epochs , self_train_epochs : ils contrôlent le nombre d'époches pour former le modèle sur la tâche de prédiction de catégorie masquée et la tâche d'auto-entraînement, respectivement. Définir mcp_epochs = 3, self_train_epochs = 1 sera un bon point de départ pour la plupart des ensembles de données, mais vous pouvez les augmenter si votre ensemble de données est petit (moins de 100,000 documents).D'autres arguments peuvent être conservés en tant que valeurs par défaut.
Pour exécuter le code sur un nouvel ensemble de données, vous devez
your_dataset sous datasets .train.txt (un document par ligne) sous your_dataset pour la formation du modèle de classification (aucune étiquette de document n'est nécessaire).label_names.txt sous your_dataset (chaque ligne contient le nom d'étiquette d'une catégorie; si plusieurs mots sont utilisés comme nom d'étiquette d'une catégorie, mettez-les dans la même ligne et séparez-les avec des caractères d'espace blanc).test.txt (un document par ligne) avec des étiquettes de vérité Grounds test_labels.txt (chaque ligne contient un entier désignant l'index de catégorie du document correspondant, l'index commence à partir de 0 et l'ordre doit être cohérent avec l'ordre de catégorie dans label_names.txt ). Si le corpus de test est fourni, le code rédigera des résultats de classification à out.txt sous your_dataset une fois la formation terminée. Si les étiquettes de vérité au sol du corpus de test sont fournies, la précision des tests sera affichée pendant l'auto-formation, ce qui est utile pour le réglage de l'hyperparamètre et le modèle de sélection de cerises à l'aide d'un petit ensemble de tests.final_model.pt sous your_dataset .Remarque: Le code mettra en cache des données intermédiaires et des points de contrôle de modèle en tant que fichiers .pt sous votre répertoire de jeu de données pour une formation continue. Si vous modifiez votre corpus de formation ou votre étiquette de noms et réécoutez le code, vous devrez d'abord supprimer tous les fichiers .pt pour empêcher le code de charger les anciens résultats.
Vous pouvez toujours vous référer à l'exemple d'ensembles de données lors de la préparation de vos propres ensembles de données.
Veuillez citer l'article suivant si vous trouvez le code utile pour vos recherches.
@inproceedings{meng2020text,
title={Text Classification Using Label Names Only: A Language Model Self-Training Approach},
author={Meng, Yu and Zhang, Yunyi and Huang, Jiaxin and Xiong, Chenyan and Ji, Heng and Zhang, Chao and Han, Jiawei},
booktitle={Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing},
year={2020},
}