
Les modèles de marquage de séquence sont très populaires dans de nombreuses tâches PNL, telles que la reconnaissance des entités nommées (NER), le marquage de la partie du discours (POS) et la segmentation des mots. Les modèles de marquage de séquence de pointe utilisent principalement la structure CRF avec des fonctionnalités de mot d'entrée. LSTM (ou Bidirectional LSTM) est un extracteur de fonctionnalités basé sur l'apprentissage en profondeur populaire dans la tâche d'étiquetage de séquence. Et CNN peut également être utilisé en raison d'un calcul plus rapide. En outre, les caractéristiques de Word sont également utiles pour représenter Word, qui peut être capturée par le caractère LSTM ou la structure CNN de caractère ou les caractéristiques neuronales définies par l'homme.
NCRF ++ est un cadre basé sur Pytorch avec des choix flexibles de caractéristiques d'entrée et de structures de sortie. La conception des modèles d'étiquetage de séquences neurales avec NCRF ++ est entièrement configurable via un fichier de configuration, qui ne nécessite aucun travail de code. Le NCRF ++ peut être considéré comme une version de réseau neuronal de CRF ++, qui est un célèbre cadre statistique CRF.
Ce cadre a été accepté par ACL 2018 comme document de démonstration. Et le rapport et l'analyse détaillées de l'expérience utilisant NCRF ++ ont été acceptés à Coling 2018 comme le meilleur article.
NCRF ++ prend en charge différentes combinaisons de structure de sur trois niveaux: représentation de séquence de caractères, représentation de séquence de mots et couche d'inférence.
Bienvenue pour jouer ce référentiel!
Python: 2 or 3
PyTorch: 1.0
La version compatible Pytorch 0.3 est ici.
nbest (avec leurs probabilités). NCRF ++ prend en charge la conception de la structure du réseau neuronal via un fichier de configuration. Le programme peut fonctionner en deux statuts; formation et décodage . (La configuration et les données de l'échantillon ont été inclus dans ce référentiel)
En formation Statut: python main.py --config demo.train.config
Dans le décodage Statut: python main.py --config demo.decode.config
Le fichier de configuration contrôle la structure du réseau, les E / S, le paramètre de formation et les hyperparamètres.
Les configurations et explications détaillées sont répertoriés ici.
NCRF ++ est conçu en trois couches (illustré ci-dessous): couche de séquence de caractères; couche de séquence de mots et couche d'inférence. En utilisant le fichier de configuration, la plupart des modèles de pointe peuvent être facilement reproduits sans codage . D'un autre côté, les utilisateurs peuvent étendre chaque couche en concevant leurs propres modules (par exemple, ils peuvent vouloir concevoir leurs propres structures neuronales autres que CNN / LSTM / GRU). Notre conception à cours de couche rend l'extension du module pratique, l'instruction de l'extension du module peut être trouvée ici.

Les résultats de la tâche d'anglais CONLL 2003 sont meilleurs ou comparables avec les résultats SOTA avec les mêmes structures.
Charlstm + Wordlstm + CRF: 91,20 vs 90,94 de Lample .etc, naaCl16;
Charcnn + Wordlstm + CRF: 91.35 vs 91.21 de MA .etc, ACL16.
Par défaut, LSTM est LSTM bidirectionnel.
| IDENTIFIANT | Modèle | Nochar | Charlatan | Charcnn |
|---|---|---|---|---|
| 1 | Wordlstm | 88,57 | 90.84 | 90,73 |
| 2 | Wordlstm + CRF | 89.45 | 91.20 | 91.35 |
| 3 | Wordcnn | 88,56 | 90.46 | 90.30 |
| 4 | Wordcnn + CRF | 88,90 | 90,70 | 90.43 |
Nous avons comparé les modèles de marquage de séquence neuronale de douze ( {charLSTM, charCNN, None} x {wordLSTM, wordCNN} x {softmax, CRF} ) sur trois repères (POS, Chunking, NER) sous des expériences statistiques, des résultats détaillés et des comparaisons dans le label de séquences nésaux 2018.
NCRF ++ a intégré plusieurs extracteurs de caractéristiques de séquence de caractéristiques neuronaux SOTA: CNN (MA .ETC, ACL16), LSTM (Lample .ETC, NAACL16) et GRU (Yang .etc, ICLR17). De plus, les fonctionnalités fabriquées à la main ont été prouvées importantes dans les tâches de marquage de séquence. NCRF ++ permet aux utilisateurs de concevoir leurs propres fonctionnalités telles que la capitalisation, la balise POS ou toute autre fonctionnalité (cercles gris dans la figure ci-dessus). Les utilisateurs peuvent configurer les fonctionnalités auto-définies via un fichier de configuration (taille d'intégration des fonctionnalités, incorpation de fonctionnalités pré-entraînées .etc). Le format de données d'entrée d'échantillonnage est donné sur Train.capos.bmes, qui comprend deux caractéristiques définies par l'homme [POS] et [Cap] . ( [POS] et [Cap] sont deux exemples, vous pouvez donner à votre fonctionnalité n'importe quel nom que vous souhaitez, suivez simplement le format [xx] et configurer la fonction avec le même nom dans le fichier de configuration.) L'utilisateur peut configurer chaque fonctionnalité dans le fichier de configuration en utilisant
feature = [ POS ] emb_size = 20 emb_dir = % your_pretrained_POS_embedding
feature = [ Cap ] emb_size = 20 emb_dir = % your_pretrained_Cap_embeddingLa caractéristique sans intégration pré-entraînée sera initialisée au hasard.
Le NCRF ++ est implémenté en utilisant un calcul entièrement lot, ce qui le rend assez effectif à la fois sur la formation et le décodage du modèle. Avec l'aide de GPU (NVIDIA GTX 1080) et de grande taille de lot, le modèle LSTMCRF construit avec NCRF ++ peut atteindre 1000 SENTS / S et 2000SENTS / S sur le statut de formation et de décodage, respectivement.

La structure traditionnelle du CRF décode une seule séquence d'étiquettes avec des probabolités les plus importantes (c'est-à-dire la meilleure sortie). Bien que NCRF ++ puisse donner un grand choix, il peut décoder n séquences d'étiquette avec les n supérieurs N (c'est-à-dire la meilleure sortie). Le décodage Nbest a été soutenu par plusieurs framework CRF statistique populaire. Cependant, à notre connaissance, NCRF ++ est la seule et la première boîte à outils qui prend en charge le décodage Nbest dans les modèles CRF neuronaux .
Dans notre implémentation, lorsque le modèle NBEST = 10, CHARCNN + WordLSTM + CRF construit dans NCRF ++ peut donner 97,47% Oracle F1-Value (F1 = 91,35% lorsque Nbest = 1) sur la tâche NER CONLL 2003.

Pour reproduire les résultats de notre article Coling 2018, il vous suffit de définir l' iteration=1 comme iteration=100 dans le fichier de configuration demo.train.config et configurer votre répertoire de fichiers dans ce fichier de configuration. Le fichier de configuration par défaut décrit le modèle Char CNN + Word LSTM + CRF , vous pouvez créer votre propre modèle en modifiant la configuration en conséquence. Les paramètres de ce fichier de configuration de démonstration sont les mêmes dans notre article. (Remarquez que les modèles liés Word CNN nécessitent des paramètres légèrement différents, les détails peuvent être trouvés dans notre papier coling.)
Si vous souhaitez utiliser ce framework dans de nouvelles tâches ou ensembles de données, voici quelques conseils de réglage de @ victor0118.
Si vous souhaitez signaler un problème ou poser un problème, veuillez joindre les documents suivants si nécessaire. Avec ces informations, je peux donner des discussions et des suggestions rapides et précises.
log fileconfig filesample data Si vous utilisez NCRF ++ dans votre papier, veuillez citer notre papier de démonstration ACL:
@inproceedings{yang2018ncrf,
title={NCRF++: An Open-source Neural Sequence Labeling Toolkit},
author={Yang, Jie and Zhang, Yue},
booktitle={Proceedings of the 56th Annual Meeting of the Association for Computational Linguistics},
Url = {http://aclweb.org/anthology/P18-4013},
year={2018}
}
Si vous utilisez les résultats des expériences et l'analyse de NCRF ++, veuillez citer notre papier colissant:
@inproceedings{yang2018design,
title={Design Challenges and Misconceptions in Neural Sequence Labeling},
author={Yang, Jie and Liang, Shuailong and Zhang, Yue},
booktitle={Proceedings of the 27th International Conference on Computational Linguistics (COLING)},
Url = {http://aclweb.org/anthology/C18-1327},
year={2018}
}