Améliorer les performances du modèle linguistique grâce à des vocabulaires intelligents
Ce projet est conçu pour explorer l'utilisation du prétraitement du corpus d'un milliard de mots avec des étiquettes de parties verbales et des entités nommées afin de créer un vocabulaire « plus intelligent ». En utilisant ces techniques, il est possible d'obtenir de meilleurs scores de perplexité qu'en utilisant uniquement les N premiers mots du corpus.
Pour une explication complète du traitement et de son impact sur les scores de perplexité pouvant être obtenus, voir Improving Language Model Performance with Smarter Vocabularies .
Le projet comprend des scripts pour
Le projet est conçu pour être utilisé sur place et il n’y a pas d’installation de pip pour cela. Téléchargez simplement la source depuis GitHub, définissez les options de configuration et exécutez les scripts numérotés dans l'ordre. Notez que ce code est conçu pour le chercheur, attendez-vous donc à devoir revoir le code dans les scripts en cours d'exécution et à modifier les options si nécessaire pour obtenir des résultats spécifiques.
Les scripts du répertoire principal sont préfixés par un numéro pour indiquer dans quel ordre les exécuter. La plupart des scripts du répertoire principal sont une série relativement courte d'appels aux fonctions de bibliothèque associées. Avant d'exécuter chaque script, assurez-vous de l'ouvrir et de définir l'un des paramètres de configuration pour obtenir les résultats souhaités.
Les options de configuration globale utilisées par plusieurs scripts sont définies dans ./configs/config.py. Assurez-vous d'accéder à ce fichier et de modifier les chemins d'accès à vos données avant d'exécuter l'un des scripts ci-dessous.
00_StanfordCoreNLPServer.py : Démarre l'analyseur Stanford Core NLP à l'aide du fichier de configuration ./configs/snlp_server.py. Le script se bloque pendant l'exécution du serveur. Si vous préférez, le serveur peut être démarré manuellement. Ce script est uniquement destiné à des fins de commodité.
10_ExtractUniqueSents.py : extrait les phrases uniques du Billion Word Corpus avant l'analyse. En haut du fichier se trouvent quelques instructions sur la façon de télécharger et de configurer le corpus brut.
12_STParseBWCorpus.py : exécute toutes les phrases uniques via l'analyseur Stanford. Notez que cette étape prend un temps considérable (peut-être une journée complète) et bénéficie grandement d'un processeur multicœur. Voir les notes dans le fichier sur les temps d'exécution.
14_RemoveDuplicates.py : effectue un deuxième passage dans les données pour supprimer les phrases en double qui se produisent après l'analyse/normalisation.
20_CreateEnglishDictionary.py : requis pour la création de vocabulaire intelligent.
22_CreateVocab.py : Ce script crée les différents types de vocabulaires. Un gros bloc if/elif dans le fichier existe pour que l'utilisateur puisse choisir le type de vocabulaire à créer.
24_IndexVocab.py : Crée les données de corpus indexées utilisées pour entraîner le modèle de langage. Encore une fois, il y a ici un gros bloc if/elif qui doit être défini par l'utilisateur pour sélectionner le type de vocabulaire à utiliser.
30_TrainBasicLM.py : configure et exécute la formation du modèle. Encore une fois, il y a ici un bloc d'instructions permettant à l'utilisateur de choisir le vocabulaire avec lequel s'entraîner. De plus, l'utilisateur doit choisir le fichier avec les paramètres de configuration du modèle. Les paramètres de configuration du modèle sont stockés dans le répertoire de configuration sous des noms de fichiers tels que L1_2048_512.py.
32_TestPerplexity : exécute un test de perplexité sur le modèle entraîné. Choisissez le modèle à tester en bas du script.
34_NextWordPrediction.py : Permet à l'utilisateur de saisir la première partie d'une phrase et appelle le modèle pour prédire le mot suivant. Configurez le modèle à utiliser dans la partie principale du script.
Certaines parties du code ont été adaptées de la boîte à outils du modèle linguistique de l'Université de la Sarre. Voir TF-NNLM-TK.
Ce code était en partie basé sur l'exemple de modèle TensorflowPTB-LM.