
Sequenzmarkierungsmodelle sind in vielen NLP-Aufgaben sehr beliebt, wie z. Auf den neuesten Sequenzmarkierungsmodellen werden die CRF-Struktur hauptsächlich mit Eingangswortfunktionen verwendet. LSTM (oder bidirektionales LSTM) ist ein beliebter Deep Learning -basierter Merkmalextraktor in der Sequenzmarkierungsaufgabe. Und CNN kann auch aufgrund einer schnelleren Berechnung verwendet werden. Außerdem sind Merkmale innerhalb von Wort nützlich, um ein Wort darzustellen, das durch Charakter-LSTM- oder Charakter-CNN-Struktur oder durch Menschen definierte neuronale Merkmale erfasst werden kann.
NCRF ++ ist ein pytorchbasiertes Framework mit flexiblen Auswahlmöglichkeiten für Eingangsmerkmale und Ausgangsstrukturen. Das Design neuronaler Sequenzmodelle mit NCRF ++ ist durch eine Konfigurationsdatei vollständig konfigurierbar, für die keine Codearbeiten erforderlich sind. NCRF ++ kann als eine neuronale Netzwerkversion von CRF ++ angesehen werden, einem berühmten statistischen CRF -Framework.
Dieser Rahmen wurde von ACL 2018 als Demonstrationspapier akzeptiert. Und der detaillierte Experiment -Bericht und -analyse unter Verwendung von NCRF ++ wurde bei Coling 2018 als bestes Papier akzeptiert.
NCRF ++ unterstützt verschiedene Strukturkombinationen von drei Ebenen: Charaktersequenzdarstellung, Wortsequenzdarstellung und Inferenzschicht.
Willkommen bei Star This Repository!
Python: 2 or 3
PyTorch: 1.0
Pytorch 0.3 Kompatible Version ist hier.
nbest Decoding (mit ihren Wahrscheinlichkeiten). NCRF ++ unterstützt das Design der neuronalen Netzwerkstruktur über eine Konfigurationsdatei. Das Programm kann in zwei Status ausgeführt werden; Training und Dekodierung . (Beispielkonfiguration und Daten wurden in dieses Repository aufgenommen)
Im Trainingsstatus : python main.py --config demo.train.config
Im Dekodierungsstatus : python main.py --config demo.decode.config
Die Konfigurationsdatei steuert die Netzwerkstruktur, die E/A, die Trainingseinstellung und die Hyperparameter.
Detailkonfigurationen und Erklärungen sind hier aufgeführt.
NCRF ++ ist in drei Ebenen entwickelt (siehe unten): Zeichensequenzschicht; Wortsequenzschicht und Inferenzschicht. Durch die Verwendung der Konfigurationsdatei können die meisten hochmodernen Modelle problemlos ohne Codierung repliziert werden. Andererseits können Benutzer jede Schicht erweitern, indem sie ihre eigenen Module entwerfen (z. B. möchten sie möglicherweise ihre eigenen neuronalen Strukturen als CNN/LSTM/Gru entwerfen). Unsere Ebenen-gewonnenes Design macht die Modulerweiterung bequem, die Anweisung der Modulerweiterung finden Sie hier.

Die Ergebnisse der englischen NER -Aufgabe von Conll 2003 sind mit den SOTA -Ergebnissen mit denselben Strukturen besser oder vergleichbar.
Charlstm+Wordlstm+CRF: 91,20 gegen 90,94 von Lample .ETC, NAACl16;
Charcnn+Wordlstm+CRF: 91,35 gegen 91,21 von Ma .ETC, ACL16.
Standardmäßig ist LSTM eine bidirektionale LSTM.
| AUSWEIS | Modell | Nochar | Charlstm | 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 |
Wir haben zwölf neuronale Sequenzmarkierungsmodelle ( {charLSTM, charCNN, None} x {wordLSTM, wordCNN} x {softmax, CRF} ) verglichen.
NCRF ++ hat mehrere SOTA -Neural -Characrter -Sequenz -Merkmalextraktoren integriert: CNN (ma .etc, acl16), lstm (lample .etc, naacl16) und gu (yang .etc, iclr17). Darüber hinaus haben sich handgefertigte Merkmale bei Sequenzmarkierungsaufgaben als wichtig erwiesen. Mit NCRF ++ ermöglicht Benutzern, die ihre eigenen Funktionen wie Kapitalisierung, POS -Tag oder andere Merkmale entwerfen (graue Kreise in der obigen Abbildung). Benutzer können die selbstdefinierten Funktionen über die Konfigurationsdatei konfigurieren (Einbettungsgröße für Feature, Pretrainierte Feature-Einbettungen .ETC). Das Beispieleingangsdatenformat ist bei train.cappos.bmes angegeben, das zwei menschliche Merkmale [POS] und [Cap] enthält. ( [POS] und [Cap] sind zwei [xx] . Sie können Ihrer Funktion einen beliebigen Namen geben. Befolgen
feature = [ POS ] emb_size = 20 emb_dir = % your_pretrained_POS_embedding
feature = [ Cap ] emb_size = 20 emb_dir = % your_pretrained_Cap_embeddingDie Merkmale ohne vorbereitete Einbettung werden zufällig initialisiert.
NCRF ++ wird unter Verwendung einer vollständig angegriffenen Berechnung implementiert, wodurch sowohl das Modelltraining als auch die Dekodierung sehr effizient ist. Mit Hilfe von GPU (NVIDIA GTX 1080) und großer Chargengröße kann das mit NCRF ++ erstellte LSTMCRF -Modell 1000 Sents/S- und 2000 -Jährige/s zum Training und zum Dekodierungsstatus erreichen.

Die traditionelle CRF-Struktur dekodiert nur eine Etikettensequenz mit den größten Wahrscheinlichkeiten (dh 1-Best-Ausgang). Während NCRF ++ eine große Auswahl ergeben kann, können n Etikettensequenzen mit den Top n Wahrscheinlichkeiten (dh N-BEST-Ausgang) dekodieren. Das NBEST -Dekodieren wurde von mehreren populären statistischen CRF -Framework unterstützt. Nach unserem besten Wissen ist NCRF ++ das einzige und erste Toolkit, das die NBEST -Decodierung in neuralen CRF -Modellen unterstützt.
In unserer Implementierung kann bei der in NCRF ++ eingebauten CHARCNN+WordLSTM+CRF-Modell das NBEST = 10 97,47% Oracle F1-Wert (F1 = 91,35% bei NBEST = 1) bei Conll 2003 Ner-Aufgabe ergeben.

Um die Ergebnisse in unserem Coling 2018 -Papier zu reproduzieren, müssen Sie nur die iteration=1 als iteration=100 in der Konfigurationsdatei demo.train.config festlegen und Ihr Dateiverzeichnis in dieser Konfigurationsdatei konfigurieren. Die Standardkonfigurationsdatei beschreibt das Char CNN + Word LSTM + CRF -Modell. Sie können Ihr eigenes Modell erstellen, indem Sie die Konfiguration entsprechend ändern. Die Parameter in dieser Demo -Konfigurationsdatei sind in unserem Artikel gleich. (Beachten Sie, dass das Word CNN -verwandte Modelle leicht unterschiedliche Parameter benötigen. Details finden Sie in unserem Colingpapier.)
Wenn Sie dieses Framework in neuen Aufgaben oder Datensätzen verwenden möchten, finden Sie hier einige Tipps von @Victor0118.
Wenn Sie ein Problem melden oder ein Problem anfordern möchten, fügen Sie bitte die folgenden Materialien bei. Mit diesen Informationen kann ich eine schnelle und genaue Diskussion und Vorschläge geben.
log fileconfig filesample data Wenn Sie NCRF ++ in Ihrem Papier verwenden, zitieren Sie bitte unser ACL -Demo -Papier:
@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}
}
Wenn Sie Experimenteergebnisse und Analyse von NCRF ++ verwenden, zitieren Sie bitte unser Colingpapier:
@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}
}