การประมวลผลภาษาธรรมชาติกำลังอยู่ระหว่างการเปลี่ยนแปลงอย่างมากและมีการเสนอแบบจำลองที่ยอดเยี่ยมมากมายในช่วงไม่กี่ปีที่ผ่านมารวมถึง Bert, GPT ฯลฯ
ในขณะเดียวกันเครือข่ายประสาทกราฟเป็นการออกแบบที่ยอดเยี่ยมจะถูกนำมาใช้อย่างต่อเนื่องในสาขาการประมวลผลภาษาธรรมชาติเช่น textGCN และเทนเซอร์-ข้อความ
กล่องเครื่องมือนี้ทุ่มเทให้กับการประมวลผลภาษาธรรมชาติและคาดว่าจะใช้โมเดลในวิธีที่ง่ายที่สุด
คำสำคัญ: NLP; gnn
รุ่น:
ตัวอย่าง (ดูการทดสอบสำหรับรายละเอียดเพิ่มเติม):
การทดลองทั้งหมดข้างต้นได้รับการทดสอบบน GTX 1080 GPU ด้วยหน่วยความจำ 8000MIB
2020/5/-: แปลงชื่อโครงการเป็น NLPGNN จาก Fennlp
2020/5/17: ลองแปลงประโยคเป็นกราฟตามเมทริกซ์ความสนใจของเบิร์ต แต่ล้มเหลว ส่วนนี้เป็นวิธีแก้ปัญหาในการมองเห็นเมทริกซ์ความสนใจของเบิร์ต สำหรับรายละเอียดเพิ่มเติมคุณสามารถตรวจสอบพจนานุกรม "Bert-GCN"
2020/5/11: เพิ่ม textGCN และ textSage สำหรับการจำแนกข้อความ
2020/5/5: เพิ่มจิน, กราฟสำหรับกราฟคลาส
2020/4/25: เพิ่ม Gan, Gin Model ตามวิธีการส่งข้อความ
2020/4/23: เพิ่มโมเดล GCN ตามวิธีการส่งข้อความ
2020/4/16: กำลังมุ่งเน้นไปที่โมเดลของ GNN ใน NLP และพยายามรวมรุ่น GNN เข้ากับ Fennlp
2020/4/2: เพิ่มรุ่น GPT2 สามารถใช้พารามิเตอร์ที่เปิดตัวโดย OpenAI (ฐาน, ขนาดกลาง, ใหญ่) พจนานุกรมอ้างอิงรายละเอียดเพิ่มเติม "tg/en/interactive.py"
2020/3/26: เพิ่ม Bilstm+ตัวอย่างความสนใจสำหรับการจำแนกประเภท
2020/3/23: เพิ่ม Radam Optimizer
2020/3/19: เพิ่มตัวอย่างการทดสอบ "albert_ner_train.py" "albert_ner_test.py"
2020/3/16: เพิ่มโมเดลสำหรับการฝึกอบรมคำย่อยการฝังตามวิธี BPE การฝังที่ผ่านการฝึกอบรมจะใช้ในรูปแบบ TextCNN เพื่อปรับปรุงการปรับปรุง ดู "tran_bpe_embeding.py" สำหรับรายละเอียดเพิ่มเติม
2020/3/8: เพิ่มตัวอย่างการทดสอบ "run_tucker.py" สำหรับรถไฟ Tucker บน WN18
2020/3/3: เพิ่มตัวอย่างการทดสอบ "tran_text_cnn.py" สำหรับโมเดล textcnn รถไฟ
2020/3/2: เพิ่มตัวอย่างการทดสอบ "train_bert_classification.py" สำหรับการจำแนกประเภทข้อความตาม Bert
git clone https://github.com/kyzhouhzau/NLPGNN.git
python setup.py install
python bert_ner_train.py
ใส่ไฟล์รถไฟที่ถูกต้องและทดสอบในพจนานุกรม "อินพุต"
รูปแบบข้อมูล: ข้อมูลอ้างอิงใน "การทดสอบ ner input train"
เช่น "拮抗抗抗拮对骨胞作。。 ooo b-anatomy i-anatomy i-anatomy e-anatomy oooo"
สำหรับแต่ละบรรทัดในรถไฟมีสองส่วนส่วนแรก "拮抗抗抗抗抗抗抗抗抗骨细用用用。用。。。。。 ส่วนที่สอง "oooo b-anatomy i-anatomy i-anatomy e-anatomy oooo" เป็นแท็กสำหรับแต่ละคำในประโยค ทั้งคู่ใช้ ' t' เพื่อเชื่อมต่อ
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
_________________________________________________________________
การใช้พารามิเตอร์เริ่มต้นเราจะได้ผลลัพธ์ต่อไปนี้ในข้อมูลที่ถูกต้อง "中文糖尿病标注数据集" และ "Conll-2003"
| แบบอย่าง | มาโคร F1 | มาโคร-P | มาโคร R | LR | ยุค | maxlen | batch_size | ข้อมูล |
|---|---|---|---|---|---|---|---|---|
| เบิร์ต+ฐาน | 0.7005 | 0.7244 | 0.7031 | 2e-5 | 3 | 128 | 6 | 中文糖尿病标注数据集 |
| bert+base+crf | 0.7009 | 0.7237 | 0.7041 | 2E-5 (เบิร์ต), 2E-3 (CRF) | 3 | 128 | 6 | 中文糖尿病标注数据集 |
| เบิร์ต+ฐาน | 0.9128 | 0.9208 | 0.9227 | 2e-5 | 5 | 128 | 8 | Conll-2003 |
| อัลเบิร์ต+ฐาน | 0.8512 | 0.8678 | 0.8589 | 1E-4 | 8 | 128 | 16 | Conll-2003 |
| อัลเบิร์ต+ใหญ่ | 0.8670 | 0.8778 | 0.8731 | 2e-5 | 10 | 128 | 4 | Conll-2003 |
ใส่ไฟล์รถไฟที่ถูกต้องและทดสอบในพจนานุกรม "อินพุต"
รูปแบบข้อมูล: ข้อมูลอ้างอิงใน " tests cls bert (หรือ Albert) input"
เช่น "作地上经,,,,, 2"
สำหรับแต่ละบรรทัดในรถไฟ (ทดสอบที่ถูกต้อง) มีสองส่วนส่วนแรก "作地上经强拳王王之出出出出出出出出出出出出
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
สำหรับรายละเอียดเพิ่มเติมอ้างอิงคำศัพท์
การใช้พารามิเตอร์เริ่มต้นเราจะได้ผลลัพธ์ต่อไปนี้ใน "新闻标题短文本分类" และข้อมูลที่ถูกต้องของ SST-2
| แบบอย่าง | ACC | LR | ยุค | maxlen | batch_size | ข้อมูล |
|---|---|---|---|---|---|---|
| เบิร์ต+ฐาน | 0.8899 | 1E-5 | 5 | 50 | 32 | 新闻标题短文本分类 |
| เบิร์ต+ฐาน | 0.9266 | 2e-5 | 3 | 128 | 8 | SST-2 |
| อัลเบิร์ต+ฐาน | 0.9186 | 1E-5 | 3 | 128 | 16 | SST-2 |
| อัลเบิร์ต+ใหญ่ | 0.9461 | 1E-6 | 3 | 128 | 4 | SST-2 |
| bilstm+ความสนใจ | 0.8269 | 0.01 | 3 | 128 | 64 | SST-2 |
| ข้อความ | 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
_________________________________________________________________
ตัวอย่าง:
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 สามารถช่วยให้คุณเห็นภาพการสูญเสียและประเมินตัวบ่งชี้:
การใช้งาน:
tensorboard --port 6006 --logdir="./tensorboard"


การแยกข้อมูลเดียวกันและการตั้งค่าพารามิเตอร์ตามที่เสนอในบทความนี้
| แบบอย่าง | คอร่า | PubMed | ผู้ที่ทำจาก citeseer |
|---|---|---|---|
| GCN | 81.80 | 79.50 | 71.20 |
| กาน | 83.00 | 79.00 | 72.30 |
| เกา | 82.40 | 79.60 | 71.70 |
| แบบอย่าง | mutag | โปรตีน | NCI1 |
|---|---|---|---|
| จิน | 87.62 ± 8.76 # | 73.05 ± 1.85 # | 73.13 ± 5.57 # |
| กราฟ | 86.06 ± 8.26 | 75.11 ± 2.87 | 76.91 ± 3.45 |
หมายเหตุ: เครื่องหมาย # บ่งชี้ว่าผลลัพธ์ปัจจุบันน้อยกว่าผลลัพธ์กระดาษ ในกระดาษผู้เขียนใช้วิธีนี้เพื่อประเมินโมเดล วิธีนี้มีราคาแพง ดังนั้นฉันไม่ได้ทำแบบนั้นที่นี่
| แบบอย่าง | R8 | R52 |
|---|---|---|
| ตำรา | 96.68 ± 0.42 | 92.80 ± 0.32 |
| TextGCN2019 | 97.108 ± 0.243 | 92.512 ± 0.249 |
1、 สำหรับงานภาษาอังกฤษคุณต้องตั้งค่าพารามิเตอร์ "cased" (ใน fennlp.datas.checkpoint.loadcheckpoint) ให้สอดคล้องกับข้อมูลอินพุตที่ประมวลผลล่วงหน้าของคุณเพื่อให้แน่ใจว่า tokenizer สามารถแยกความแตกต่างอย่างถูกต้อง
2、 เมื่อคุณใช้ Bert หรือ Albert จำเป็นต้องมีพารามิเตอร์ต่อไปนี้:
param.maxlen
param.label_size
param.batch_size
หากคุณไม่ทราบจำนวน label_size สคริปต์จะบอกคุณเมื่อคุณเรียกใช้รหัสรถไฟครั้งแรก
3、 อัตราการเรียนรู้และ batch_size จะกำหนดรูปแบบการบรรจบกันดูลิงก์สำหรับรายละเอียดเพิ่มเติม
4、 หากคุณไม่คุ้นเคยกับเครื่องมือเพิ่มประสิทธิภาพใน Bert และ Albert มันไม่สำคัญ สิ่งที่สำคัญที่สุดที่คุณต้องจำไว้คือพารามิเตอร์ "Learning_rate" และ "Decay_steps" (ใน fennlp.optimizers.optim.adamwarmup) เป็นสิ่งสำคัญ คุณสามารถตั้งค่า "อัตราการเรียนรู้" เป็นค่าที่ค่อนข้างเล็กและปล่อยให้ "Decay_steps" เท่ากับตัวอย่าง*epoch/batch_size หรือสูงกว่าเล็กน้อย
5、 หากคุณพบว่ารหัสทำงานช้าลงคุณสามารถลองใช้ @ tf.function และตั้งค่าความถี่ในการเขียนและการประเมินผลที่เหมาะสม
6、 ปัญหาอื่น ๆ ที่คุณสามารถต่อฉันได้โดย "[email protected]" หรือถามคำถามเกี่ยวกับปัญหา
[1] เบิร์ต: การฝึกอบรมหม้อแปลงสองทิศทางลึกเพื่อทำความเข้าใจภาษา
[2] อัลเบิร์ต: Lite Bert สำหรับการเรียนรู้ด้วยตนเองของการเป็นตัวแทนภาษา
[3] โมเดลภาษาเป็นผู้เรียนมัลติทาสก์ที่ไม่ได้รับการดูแล
[4] ข้อความประสาทส่งผ่านสำหรับเคมีควอนตัม
[5] การจำแนกประเภทกึ่งดูแลด้วยเครือข่ายกราฟ convolutional
[6] เครือข่ายความสนใจของกราฟ
[7] เครือข่ายประสาทกราฟมีประสิทธิภาพแค่ไหน?
[8] กราฟหน้า: การเรียนรู้การเป็นตัวแทนของกราฟขนาดใหญ่
[9] การแพร่กระจายการเรียนรู้กราฟ
[10] การเปรียบเทียบกราฟเครือข่ายประสาท
[11] กราฟระดับข้อความเครือข่ายประสาทสำหรับการจำแนกข้อความ
[12] กราฟเครือข่าย convolutional สำหรับการจำแนกประเภทข้อความ
[13] Tensor Graph Networks Convolutional สำหรับการจำแนกประเภทข้อความ
[14] ข้อมูลเชิงลึกที่ลึกซึ้งยิ่งขึ้นในเครือข่ายกราฟ Convolutional สำหรับการเรียนรู้แบบกึ่งผู้ดูแล