Ce référentiel contient du code pour la formation et l'utilisation du modèle SRL profond décrit dans: Étiquetage des rôles sémantiques profonds: ce qui fonctionne et la prochaine étape
Si vous utilisez notre code, veuillez citer notre article comme suit:
@inproceedings {he2017deep,
title = {étiquetage des rôles sémantiques profonds: ce qui fonctionne et ce qui est suivant},
Auteur = {He, Luheng et Lee, Kenton et Lewis, Mike et Zettlemoyer, Luke},
booktitle = {Actes de la réunion annuelle de l'Association pour la linguistique informatique},
année = {2017}
}
./scripts/fetch_required_data.sh Décompressez les modèles (en ressources) sous le répertoire Neural_SRL. Par exemple, sous le répertoire de base de code:
tar -zxvf resources/conll05_model.tar.gz
Voici une liste de modèles pré-entraînés:
conll05_model.tar.gz : modèle unique formé sur le jeu de données CONLL-2005.conll05_ensemble.tar.gz : 5 ensembles modèles formés sur l'ensemble de données CONLL-2005.conll05_propid_model.tar.gz : Train de modèle d'identification de prédicat sur CONLL-2005.conll2012_model.tar.gz : modèle unique formé sur l'ensemble de données CONLL-2012.conll2012_ensemble.tar.gz : 5 MODÈLES MODÈLES FORMÉS SUR LE DATASET CONLL-2012.conll2012_propid_model.tar.gz : Train de modèle d'identification de prédicat sur CONLL-2012. python python/interactive.py --model conll05_model/ --pidmodel conll05_propid_model
Courir:
./scripts/run_end2end.sh sample_data/sentences_with_predicates.txt temp/sample.out (sur CPU) ou:
./scripts/run_end2end.sh sample_data/sentences_with_predicates.txt temp/sample.out ${gpu_id} (sur GPU)
Notez que le script ajoute /usr/local/cuda/... à PATH et CUDA_LD_LIBRARY_PATH , et charge des modèles pré-entraînés à partir de ./conll05_propid_model et ./conll05_ensemble , veuillez ajuster les configurations en fonction de votre propre configuration.
Le fichier d'entrée contient des phrases tokenisées, une phrase par ligne.
Le fichier de sortie contiendra quelque chose comme:
John a dit à Pat de couper l'arbre.
Prédicat: dit (1)
A0: John
V: DIT
A2: Pat
A1: couper l'arbre
John a dit à Pat de couper l'arbre.
Prédicat: Cut (4)
A0: Pat
V: Couper
A1: L'arbre
predict.py charge l'intégralité du fichier d'entrée en mémoire, il serait donc préférable de conserver le nombre de phrases dans chaque fichier moins de 50 000. Pour reproduire les résultats sur les ensembles de données CONLL-2005 et CONLL-2012, veuillez suivre les étapes ci-dessous.
Les données sont fournies par: Tâche partagée CONLL-2005, mais les mots d'origine proviennent de l'ensemble de données de Penn Treebank, qui n'est pas accessible au public. Si vous avez le corpus PTB, vous pouvez courir:
./scripts/fetch_and_make_conll05_data.sh /path/to/ptb/
Vous devez suivre les instructions ci-dessous pour obtenir CONLL-2012 Data Conll-2012, cela se traduirait par un répertoire appelé /path/to/conll-formatted-ontonotes-5.0 . Courir:
./scripts/make_conll2012_data.sh /path/to/conll-formatted-ontonotes-5.0
Voir l'utilisation de python/train.py :
python python/predict.py -h
Ou comme démarrage rapide, exécutez le modèle formé (nécessite conll05_ensemble):
./scripts/run_predict_conll05.sh ${gpu_id} ou:
./scripts/run_predict_conll05.sh pour fonctionner sur CPU.
Exécutez le modèle de bout en bout avec prévu (nécessite conll05_ensemble et conll05_propid_model):
./scripts/run_end_to_end_conll05.sh ${gpu_id}
L'exécution du modèle CONLL-2012 fonctionne de manière similaire.
Voir l'utilisation de python/train.py :
python python/train.py -h
Former un modèle SRL (avec des prédicats d'or) avec des fichiers de configuration prédéfinis: ./scripts/run_train.sh ${gpu_id}
Former un identifiant de prédicat: ./scripts/run_propid_train.sh ${gpu_id}
Notez qu'au moment de la formation, train.py fonctionne dans le modèle FAST_RUN , qui se traduira par une énorme surcharge de compilation de modèle. Cela peut prendre jusqu'à plusieurs minutes pour un modèle de 2 couches et jusqu'à 8 heures pour un modèle de 8 couches avec un abandon variationnel.
Veuillez vous référer aux fichiers dans sample_data et aux explications ci-dessous pour formater l'entrée du modèle.
Chaque ligne contient exactement un échantillon de formation, qui a les informations de prédicat (index dans les phrases, à partir de 0), la phrase à tokenisée et une séquence de balises. Si les étiquettes d'or n'existent pas, utilisez simplement une séquence d'OS. La phrase et la séquence de balises sont séparées avec un ||| symbole. Nous utilisons le format IOB2. Tous les jetons et symboles sont séparés par un espace arbitraire.
Exemples de lignes:
2 Mes chats aiment les chapeaux. ||| B-A0 I-A0 BV B-A1 O
Le format est similaire à celle définie ci-dessus, sauf que chaque ligne correspond à une phrase d'entrée et qu'aucune information de prédicat n'est fournie. Les prédiates correspondent aux balises V et tous les autres mots sont étiquetés avec des balises O.
Exemples de lignes:
Mes chats aiment les chapeaux, disent-ils. ||| Oovooovo
config contient des fichiers de configuration pour la formation du modèle SRL ( srl_config.json et srl_small_config.json ) ainsi que pour la formation du modèle Predicat-ID ( propid_config.json )
Contactez Luheng He si vous avez des questions!