Das Gebiet der natürlichen Sprachverarbeitung wird derzeit enorme Veränderungen unterzogen, und in den letzten Jahren wurden viele hervorragende Modelle vorgeschlagen, einschließlich Bert, GPT usw.
Gleichzeitig wird das Grafiknetzwerk als exquisites Design ständig im Bereich der Verarbeitung natürlicher Sprache verwendet, wie z. B. TextGCN und Tensor-TextegCN.
Diese Toolbox widmet sich der Verarbeitung natürlicher Sprache und erwartet, Modelle auf einfachste Weise zu implementieren.
Schlüsselwörter: NLP; Gnn
Modelle:
Beispiele (siehe Tests für weitere Details):
Alle oben genannten Experimente wurden auf GTX 1080 GPU mit Speicher 8000MIB getestet.
2020/5/-: den Projektnamen in NLPGNN von Fennlp konvertieren.
2020/5/17: Versuchen Sie, den Satz auf der Basis von Bert -Aufmerksamkeitsmatrix in die Grafik umzuwandeln, ist jedoch fehlgeschlagen. Dieser Abschnitt bietet eine Lösung zur Visualisierung der Bert -Aufmerksamkeitsmatrix. Weitere Details können Sie das Wörterbuch "Bert-GCN" überprüfen.
2020/5/11: Fügen Sie TextGCN und Texten für die Textklassifizierung hinzu.
2020/5/5: Gin hinzufügen, Graphsage für die Grafikklasse.
2020/4/25: Fügen Sie GaN, GIN -Modell hinzu, basierend auf Nachrichtenübergabemethoden.
2020/4/23: Fügen Sie GCN -Modell basierend auf Nachrichtenübergabemethoden hinzu.
2020/4/16: Derzeit konzentriert sich auf Modelle von GNN in NLP und versucht, einige GNN -Modelle in Fennlp zu integrieren.
2020/4/2: Hinzufügen von GPT2 -Modell, könnte Parameter verwendet, die von OpenAI (Basis, Medium, groß) freigegeben wurden. Weitere Detailreferenzwörterbuch "tg/en/interactive.py"
2020/3/26: Bilstm+Aufmerksamkeitsbeispiel für die Klassifizierung hinzufügen
2020/3/23: Radamoptimierer hinzufügen.
2020/3/19: Testbeispiel "Albert_ner_train.py" "Albert_ner_test.py" hinzufügen.
2020/3/16: Fügen Sie Modell für das Training Sub Word -Einbettung basierend auf BPE -Methoden hinzu. Die geschulte Einbettung wird im TextCNN -Modell verwendet, um die Verbesserung zu verbessern. Weitere Informationen finden Sie in "tran_bpe_embeding.py".
2020/3/8: Fügen Sie Testbeispiel "run_tucker.py" für den Zug Tucker auf WN18 hinzu.
2020/3/3: Testbeispiel "tran_text_cnn.py" für Train textCnn -Modell hinzufügen.
2020/3/2: Testbeispiel "train_bert_classification.py" für die Textklassifizierung basierend auf Bert.
git clone https://github.com/kyzhouhzau/NLPGNN.git
python setup.py install
python bert_ner_train.py
Setzen Sie Zug, gültige und Testdatei in "Eingabe" -Dictionary.
Datenformat: Referenzdaten in "Tests ner Eingabe Zug"
EG "拮 抗 抗 抗 抗 对 骨 细 胞 的 作 用。。 Oooo B-Anatomie I-Anatomie I-Anatomie E-Anatomy Oooo"
Für jede Zeile im Zug enthält zwei Teile, der erste Teil "拮 抗 抗 抗 抗 对 骨 细 胞 的 作 用。。" ist ein Satz. Der zweite Teil "Oooo B-Anatomy I-Anatomy I-Anatomy E-Anatomy Oooo" ist das Tag für jedes Wort im Satz. Beide verwenden ' t', um zu verkettet.
from nlpgnn . models import bert
bert = bert . BERT () python bert_ner_train.py
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
bert (BERT) multiple 101677056
_________________________________________________________________
dense (Dense) multiple 35374
=================================================================
Total params: 101,712,430
Trainable params: 101,712,430
Non-trainable params: 0
_________________________________________________________________
from nlpgnn . models import bert
from nlpgnn . metrics . crf import CrfLogLikelihood
bert = bert . BERT ()
crf = CrfLogLikelihood () python bert_ner_crf_train.py
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
bert (BERT) multiple 101677056
_________________________________________________________________
dense (Dense) multiple 35374
_________________________________________________________________
crf (CrfLogLikelihood) multiple 2116
=================================================================
Total params: 101,714,546
Trainable params: 101,714,546
Non-trainable params: 0
_________________________________________________________________
from nlpgnn . models import albert
bert = albert . ALBERT () python albert_ner_train.py
large
Model: "albert_ner"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
albert (ALBERT) multiple 11092992
_________________________________________________________________
dense (Dense) multiple 6921
=================================================================
Total params: 11,099,913
Trainable params: 11,099,913
Non-trainable params: 0
_________________________________________________________________
Unter Verwendung der Standardparameter erhalten wir die folgenden Ergebnisse unter "中文糖尿病标注数据集" und "conll-2003" gültigen Daten.
| Modell | MACRO-F1 | Makro-P | MACRO-R | lr | Epoche | Maxlen | batch_size | Daten |
|---|---|---|---|---|---|---|---|---|
| Bert+Basis | 0,7005 | 0,7244 | 0,7031 | 2E-5 | 3 | 128 | 6 | 中文糖尿病标注数据集 |
| Bert+Base+CRF | 0,7009 | 0,7237 | 0,7041 | 2E-5 (Bert), 2E-3 (CRF) | 3 | 128 | 6 | 中文糖尿病标注数据集 |
| Bert+Basis | 0,9128 | 0,9208 | 0,9227 | 2E-5 | 5 | 128 | 8 | Conll-2003 |
| Albert+Basis | 0,8512 | 0,8678 | 0,8589 | 1e-4 | 8 | 128 | 16 | Conll-2003 |
| Albert+groß | 0,8670 | 0,8778 | 0,8731 | 2E-5 | 10 | 128 | 4 | Conll-2003 |
Setzen Sie Zug, gültige und Testdatei in "Eingabe" -Dictionary.
Datenformat: Referenzdaten in " tests cls bert (oder Albert) Eingabe".
Eg "作 为 地 球 曾 经 经 强 的 拳 王 之 一 , 小 里 里 琴 科 谈 己 是 否 会 出 出 出 出 出 出 2"
Für jede Zeile im Zug (Test, gültig) enthält zwei Teile, dem ersten Teil "作 为 地 球 上 经 最 强 的 的 拳 王 之 一 小 克 里 琴 科 谈 自 己 己 是 会 复 出 出 出 出 出 出 出 出 出 出 出 出 出 出 出 出 里 科 谈 自 自 己 是 会 出 出 出 出 克 里 科 谈 谈 自 己 是 会 出 出 出 出 克 里 科 谈 自 自 己 否 复 出 出 出 克 里 科 科 谈 自 己 是 会 出 出 出 克 里 科 科 谈 自 己 是 会 出 出 出 克 里 科 谈 谈 自 己 是 会 出 出 出 克 里 科 谈 自 自 己 否 复 出 ist
from nlpgnn . models import bert
bert = bert . BERT () python train_bert_classification.py
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
bert (BERT) multiple 102267648
_________________________________________________________________
dense (Dense) multiple 11535
=================================================================
Total params: 102,279,183
Trainable params: 102,279,183
Non-trainable params: 0
_________________________________________________________________
from nlpgnn . models import TextCNN
model = TextCNN . TextCNN () python train_text_cnn.py
Use "WordPiece embedding" to Initialize word embedding. Train your embeddings.
python train_bpe_embedding.py
Weitere Informationen zum Detail Referenzwortprogramm
Unter Verwendung der Standardparameter erhalten wir die folgenden Ergebnisse unter "新闻标题短文本分类" und SST-2-gültigen Daten.
| Modell | Acc | lr | Epoche | Maxlen | batch_size | Daten |
|---|---|---|---|---|---|---|
| Bert+Basis | 0,8899 | 1e-5 | 5 | 50 | 32 | 新闻标题短文本分类 |
| Bert+Basis | 0,9266 | 2E-5 | 3 | 128 | 8 | SST-2 |
| Albert+Basis | 0,9186 | 1e-5 | 3 | 128 | 16 | SST-2 |
| Albert+groß | 0,9461 | 1E-6 | 3 | 128 | 4 | SST-2 |
| Bilstm+Aufmerksamkeit | 0,8269 | 0,01 | 3 | 128 | 64 | SST-2 |
| Textcnn | 0,8233 | 0,01 | 3 | 128 | 64 | SST-2 |
from nlpgnn . models import gpt2
bert = gpt2 . GPT2 () python interactive.py
Model: "gen_gp_t2" base
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
gpt2 (GPT2) multiple 124439808
=================================================================
Total params: 124,439,808
Trainable params: 124,439,808
Non-trainable params: 0
_________________________________________________________________
Beispiel:
Input >>> Stocks continue to fall this week
Output >>> as stocks fall for the second consecutive week as investors flee for safe havens.
"The market is off the charts," said John Schmieding, senior vice president, market strategy at RBC Capital Markets.
"We don't know what the Fed's intent is on, what direction it's going in. We don't know where they plan to go.
We don't know what direction they're going to move into."
Tensorboard kann Ihnen helfen, Verluste zu visualisieren und Indikatoren zu bewerten:
Useage:
tensorboard --port 6006 --logdir="./tensorboard"


Die gleiche Datenaufteilung und Parametereinstellung, wie in diesem Artikel vorgeschlagen
| Modell | Cora | PubMed | Citeseer |
|---|---|---|---|
| Gcn | 81.80 | 79,50 | 71.20 |
| Gan | 83,00 | 79,00 | 72.30 |
| Gaae | 82.40 | 79,60 | 71.70 |
| Modell | Mutag | Proteine | NCI1 |
|---|---|---|---|
| GIN | 87,62 ± 8,76 # | 73,05 ± 1,85 # | 73,13 ± 5,57 # |
| Graphsage | 86,06 ± 8,26 | 75,11 ± 2,87 | 76,91 ± 3,45 |
Hinweis: Das # Zeichen zeigt an, dass das aktuelle Ergebnis geringer ist als das Papierergebnis. Im Papier verwenden der Autor diese Methode, um Modelle zu bewerten. Diese Methode ist Zeit teuer. Also habe ich es hier nicht so gemacht.
| Modell | R8 | R52 |
|---|---|---|
| Texten | 96,68 ± 0,42 | 92,80 ± 0,32 |
| TextGCN2019 | 97,108 ± 0,243 | 92,512 ± 0,249 |
1 、 Für englische Aufgaben müssen Sie den Parameter "Gehäuse" (in fennlp.datas.checkpoint.loadCheckpoint) festlegen, um mit Ihren vorverarbeiteten Eingabedaten übereinzustimmen, um sicherzustellen, dass der Tokenizer den Fall korrekt unterscheiden kann.
2 、 Wenn Sie Bert oder Albert verwenden, sind folgende Parameter erforderlich:
param.maxlen
param.label_size
param.batch_size
Wenn Sie die Anzahl von Label_SIZE nicht kennen, wird Ihnen das Skript mitgeteilt, wann Sie die Zugcodes zum ersten Mal ausführen.
3 、 Lernrate und batch_size bestimmen die Modellkonvergenz. Weitere Informationen finden Sie unter Link.
4 、 Wenn Sie mit dem Optimierer in Bert und Albert nicht vertraut sind, spielt dies keine Rolle. Das Wichtigste, was Sie sich erinnern müssen, ist, dass die Parameter "Learning_Rate" und "Decay_Steps" (in fennlp.optimizers.optim.adamwarmup) wichtig sind. Sie können die "Lernrate" auf einen relativ geringen Wert einstellen und "decay_steps" entspricht der Proben*Epoch/batch_size oder wenig höher.
5 、 Wenn Sie feststellen, dass der Code langsamer läuft, können Sie versuchen, @ tf.function zu verwenden und die entsprechende Modellschreib- und Bewertungsfrequenz festzulegen.
6 、 Jedes andere Problem, das Sie mit "[email protected]" mit "zhoukaiyinhzau" begleiten oder Fragen stellen.
[1] Bert: Vorausbildung von tiefen bidirektionalen Transformatoren für das Sprachverständnis
[2] Albert: Ein Lite Bert für das selbstbewertete Erlernen von Sprachdarstellungen
[3] Sprachmodelle sind unbeaufsichtigte Multitasking -Lernende
[4] Neuronale Nachricht, die für die Quantenchemie vorhanden ist
[5] Halbüberwachende Klassifizierung mit Graph-Faltungsnetzwerken
[6] Aufmerksamkeitsnetzwerke für Diagramme
[7] Wie leistungsstark sind Grafik neuronale Netze?
[8] Graphsage: Induktives Darstellungslernen in großen Grafiken
[9] Die Diffusion verbessert das Lernen von Graphen
[10] Benchmarking Graph Neural Networks
[11] Neuronales Netzwerk der Textebene für die Textklassifizierung
[12] Graph -Faltungsnetzwerke für die Textklassifizierung
[13] Tensor -Graph -Faltungsnetzwerke für die Textklassifizierung
[14] Tiefere Einblicke in die Graph-Faltungsnetzwerke für das halbübergreifende Lernen