NLP สำหรับมนุษย์ ชุดเครื่องมือการประมวลผลภาษาธรรมชาติที่รวดเร็วและง่ายต่อการใช้งาน (NLP) เพื่อสร้างความพึงพอใจให้กับจินตนาการของคุณเกี่ยวกับ NLP
→เวอร์ชันภาษาอังกฤษ

การแนะนำขั้นพื้นฐาน•การติดตั้ง•คู่มือการเริ่มต้นใช้งาน•การสอนโดยละเอียด•เกียรตินิยม•วิธีการสนับสนุนรหัส•ใบเสนอราคา•กิตติกรรมประกาศ
Fancy-NLP เป็นเครื่องมือขุดความรู้เกี่ยวกับข้อความสำหรับการสร้างภาพบุคคลที่สร้างโดยทีมกลยุทธ์การโฆษณาผลิตภัณฑ์ของ Tencent รองรับงาน NLP ทั่วไปที่หลากหลายเช่นการสกัดเอนทิตีการจำแนกประเภทข้อความและการจับคู่ความคล้ายคลึงกันของข้อความ เมื่อเทียบกับเฟรมเวิร์กที่ใช้กันทั่วไปในอุตสาหกรรมปัจจุบันสามารถสนับสนุนผู้ใช้ให้ใช้งานการใช้งานที่ใช้งานได้อย่างรวดเร็ว: ไม่เพียง แต่จะสามารถปรับแต่งโมเดลได้อย่างลึกซึ้งโดยผู้ใช้ขั้นสูง แต่ยังอนุญาตให้ผู้ใช้ทั่วไปใช้โมเดลที่ผ่านการฝึกอบรมล่วงหน้าอย่างรวดเร็วเพื่อฝึกฝนการทำงานอย่างรวดเร็ว ในสถานการณ์ธุรกิจโฆษณาผลิตภัณฑ์ปัจจุบันเราใช้เครื่องมือนี้เพื่อสำรวจลักษณะของข้อมูลผลิตภัณฑ์ขนาดใหญ่อย่างรวดเร็วดังนั้นจึงสนับสนุนโมดูลเช่นคำแนะนำการโฆษณาผลิตภัณฑ์
ความตั้งใจดั้งเดิมของโครงการ คือการจัดหาชุดเครื่องมือ NLP ที่ใช้งานง่ายซึ่งมุ่งเป้าไปที่สถานการณ์การใช้งานโดยตรงและตอบสนองความต้องการของผู้ใช้สำหรับงาน NLP เพื่อให้ผู้ใช้ไม่จำเป็นต้องจัดการกับกระบวนการประมวลผลล่วงหน้าที่ซับซ้อน
แฟนซีคืออะไร? สำหรับงาน NLP ปัจจุบันจำนวนมากเช่นการจดจำเอนทิตีที่มีชื่อ (NER) การจำแนกประเภทข้อความและการจับคู่ความคล้ายคลึงกันของข้อความ (การจับคู่คู่ประโยค (SPM) เครื่องมือส่วนใหญ่ได้รับการออกแบบมาเพื่อสนับสนุนการฝึกอบรมและการประเมินผลแบบจำลอง ของแต่ละลิงก์ของงาน NLP ใน Fancy-NLP และใช้โมเดลกับสถานการณ์ความต้องการที่แท้จริงได้อย่างมีประสิทธิภาพ
ปัจจุบัน Fancy-NLP ได้รับการสนับสนุนสำหรับการใช้งานในสภาพแวดล้อม Python 3 และได้รับการทดสอบอย่างเต็มที่ใน Python 3.6 TensorFlow 2.x พึ่งพาเวอร์ชันปัจจุบันอย่างเต็มที่ หากคุณมีข้อกังวลใด ๆ เกี่ยวกับความเข้ากันได้ของโมดูลเราขอแนะนำให้คุณใช้ VirtualEnV เพื่อสร้างสภาพแวดล้อมเสมือนจริงเพื่อใช้เครื่องมือนี้
Fancy-NLP รองรับการติดตั้งแบบคลิกเดียวโดยใช้ pip :
pip install fancy-nlpในคู่มือการเริ่มต้นใช้งานเราจะใช้โมเดลที่ผ่านการฝึกอบรมมาก่อนเพื่อนำคุณไปสู่การเข้าใจและสัมผัสกับฟังก์ชั่นพื้นฐานของ Fancy-NLP อย่างรวดเร็ว
หมายเหตุ: เราจะเพิ่มประสิทธิภาพโมเดลการจดจำเอนทิตีของหลาย ๆ สถานการณ์ (ข้อมูลคำอธิบายประกอบที่แตกต่างกัน) เพื่อให้ผู้ใช้ใช้โดยตรง หากคุณมีชุดข้อมูลที่เกี่ยวข้องคุณสามารถให้ข้อเสนอแนะในเชิงบวกกับเราในประเด็นนี้
เวอร์ชันปัจจุบันของ Fancy-NLP สามารถโหลดโมเดล NER ที่ผ่านการฝึกอบรมโดยใช้ข้อมูลชุดย่อย MSRA NER โดยค่าเริ่มต้น มันสามารถระบุโครงสร้างองค์กร (org) สถานที่ (LOCs) และหน่วยงานบุคคล (ต่อ) ในข้อความภาษาจีน โมเดลพื้นฐานที่โหลดโดยค่าเริ่มต้นคือเพื่อให้ผู้ใช้ได้สัมผัสโดยตรง หากคุณต้องการใช้โมเดลที่กำหนดเองของคุณเองโดยตรงคุณสามารถอ้างถึงบทนำใน การสอนโดยละเอียด ที่ตามมาเพื่อสร้างระบบการสกัดเอนทิตีของคุณ
> >> from fancy_nlp . applications import NER
> >> ner_app = NER ()เมื่อคุณเรียกใช้รหัสด้านบนเป็นครั้งแรกรุ่น NER ที่ผ่านการฝึกอบรมมาก่อนจะถูกดาวน์โหลดจากคลาวด์
> >> ner_app . analyze ( '同济大学位于上海市杨浦区,校长为陈杰' )
{ 'text' : '同济大学位于上海市杨浦区,校长为陈杰' ,
'entities' : [
{ 'name' : '同济大学' ,
'type' : 'ORG' ,
'score' : 1.0 ,
'beginOffset' : 0 ,
'endOffset' : 4 },
{ 'name' : '上海市' ,
'type' : 'LOC' ,
'score' : 1.0 ,
'beginOffset' : 6 ,
'endOffset' : 9 },
{ 'name' : '杨浦区' ,
'type' : 'LOC' ,
'score' : 1.0 ,
'beginOffset' : 9 ,
'endOffset' : 12 },
{ 'name' : '陈杰' ,
'type' : 'PER' ,
'score' : 1.0 ,
'beginOffset' : 16 ,
'endOffset' : 18 }]} > >> ner_app . restrict_analyze ( '同济大学位于上海市杨浦区,校长为陈杰' )
{ 'text' : '同济大学位于上海市杨浦区,校长为陈杰' ,
'entities' : [
{ 'name' : '同济大学' ,
'type' : 'ORG' ,
'score' : 1.0 ,
'beginOffset' : 0 ,
'endOffset' : 4 },
{ 'name' : '杨浦区' ,
'type' : 'LOC' ,
'score' : 1.0 ,
'beginOffset' : 9 ,
'endOffset' : 12 },
{ 'name' : '陈杰' ,
'type' : 'PER' ,
'score' : 1.0 ,
'beginOffset' : 16 ,
'endOffset' : 18 }]} >>> ner_app.predict('同济大学位于上海市杨浦区,校长为陈杰')
['B-ORG',
'I-ORG',
'I-ORG',
'I-ORG',
'O',
'O',
'B-LOC',
'I-LOC',
'I-LOC',
'B-LOC',
'I-LOC',
'I-LOC',
'O',
'O',
'O',
'O',
'B-PER',
'I-PER']
Fancy-NLP ถูกโหลดโดยค่าเริ่มต้นด้วยรูปแบบการจำแนกประเภทข้อความที่ผ่านการฝึกอบรมในชุดข้อมูลการจำแนกชื่อข่าวภาษาจีนที่เผยแพร่ในปัจจุบันซึ่งสามารถทำนายหมวดหมู่ข่าวที่เป็นของข้อความชื่อข่าว
> >> from fancy_nlp . applications import TextClassification
> >> text_classification_app = TextClassification ()เมื่อคุณเรียกใช้โปรแกรมข้างต้นเป็นครั้งแรกรุ่นที่ผ่านการฝึกอบรมมาก่อนจะถูกดาวน์โหลดจากคลาวด์
> >> text_classification_app . predict ( '苹果iOS占移动互联网流量份额逾65% 位居第一' )
'科技' > >> text_classification_app . analyze ( '苹果iOS占移动互联网流量份额逾65% 位居第一' )
( '科技' , 0.9996544 )Fancy-NLP ถูกโหลดโดยค่าเริ่มต้นในรูปแบบการจับคู่ข้อความที่คล้ายคลึงกันที่ได้รับการฝึกฝนในชุดข้อมูลการจับคู่การบริการลูกค้าเว็บธนาคารที่เผยแพร่ในปัจจุบันซึ่งสามารถทำนายได้ว่าเป็นการแสดงออกถึงความตั้งใจเดียวกันสำหรับคู่ข้อความที่ให้ไว้หรือไม่
> >> from fancy_nlp . applications import SPM
> >> spm_app = SPM ()เมื่อคุณเรียกใช้โปรแกรมข้างต้นเป็นครั้งแรกรูปแบบการจับคู่ความคล้ายคลึงกันของข้อความที่ผ่านการฝึกอบรมมาก่อนจะถูกดาวน์โหลดจากคลาวด์
> >> spm_app . predict (( '未满足微众银行审批是什么意思' , '为什么我未满足微众银行审批' ))
'1' ในผลการทำนาย 1 แสดงถึงความตั้งใจเดียวกันหรือข้อความที่คล้ายกัน 0 แสดงถึงความตั้งใจที่แตกต่างกันหรือข้อความที่แตกต่างกัน
> >> spm_app . analyze (( '未满足微众银行审批是什么意思' , '为什么我未满足微众银行审批' ))
( '1' , array ([ 1.6599501e-09 , 1.0000000e+00 ], dtype = float32 ))ใน การสอนโดยละเอียด คุณสามารถเรียนรู้วิธีใช้ Fancy-NLP เพื่อสร้างโมเดลที่กำหนดเองที่ตรงกับสถานการณ์ที่กำหนดเองโดยใช้ชุดข้อมูลของคุณเองและมีความเข้าใจที่ครอบคลุมมากขึ้นเกี่ยวกับอินเทอร์เฟซของ Fancy-NLP
หากต้องการสัมผัสกับบทช่วยสอนต่อไปนี้อย่างเต็มที่คุณต้องดาวน์โหลดชุดข้อมูลและรุ่น Bert ที่เราใช้:
86geqk7e6rb7 คุณสามารถย้ายข้อมูลที่ดาวน์โหลดไปสู่ระดับเดียวกับไดเรกทอรี examples และโครงสร้างไดเรกทอรีสุดท้ายมีดังนี้:
.
├── datasets
│ ├── ner
│ │ └── msra
│ │ ├── test_data
│ │ └── train_data
│ ├── spm
│ │ └── webank
│ │ ├── BQ_dev.txt
│ │ ├── BQ_test.txt
│ │ └── BQ_train.txt
│ └── text_classification
│ └── toutiao
│ ├── toutiao_cat_data.txt
│ └── toutiao_label_dict.txt
├── examples
│ ├── bert_combination.py
│ ├── bert_fine_tuning.py
│ ├── bert_single.py
│ ├── ner_example.py
│ ├── spm_example.py
│ └── text_classification_example.py
└── pretrained_embeddings
└── chinese_L-12_H-768_A-12
├── bert_config.json
├── bert_model.ckpt.data-00000-of-00001
├── bert_model.ckpt.index
├── bert_model.ckpt.meta
└── vocab.txt
ดังนั้นคุณสามารถเรียกใช้โปรแกรมตัวอย่างได้โดยตรง ตัวอย่างเช่น python examples/ner_example.py
เรายังคงใช้ข้อมูลชุดย่อย MSRA NER ที่กล่าวถึงข้างต้นเป็นตัวอย่างเพื่อแนะนำวิธีการใช้ชุดข้อมูลที่มีอยู่เพื่อฝึกอบรมรูปแบบการจดจำเอนทิตีของเราเอง สำหรับรุ่นที่สมบูรณ์ของตัวอย่างรหัสต่อไปนี้โปรดดู examples/ner_example.py
ใน Fancy-NLP แอปพลิเคชันการจดจำเอนทิตีรองรับการใช้รูปแบบชุดข้อมูล NER มาตรฐานแต่ละอักขระที่จะระบุและแท็กที่เกี่ยวข้องจะถูกคั่นด้วย t และประโยคจะถูกคั่นด้วยเส้นเปล่า รูปแบบของแท็กอาจเป็นรูปแบบมาตรฐานทั่วไปเช่น BIO และ BIOES
การใช้อินเทอร์เฟซที่จัดทำโดย Fancy-NLP เราสามารถโหลดชุดข้อมูลโดยตรงและประมวลผลลงในรูปแบบที่ต้องการโดยรุ่น
from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' ) load_ner_data_and_labels ใช้การโหลดชุดข้อมูล NER ที่มีประสิทธิภาพ คุณสามารถใช้เส้นทางไฟล์ของข้อมูล (ชุดการฝึกอบรมชุดตรวจสอบหรือชุดทดสอบ) ที่จะโหลดเป็นพารามิเตอร์ ชุดทดสอบใช้เป็นชุดการตรวจสอบ ในงานจริงคุณควรมีชุดการตรวจสอบความถูกต้องอิสระและชุดทดสอบเพื่อให้ได้ผลการประเมินผลการทดสอบที่มีค่า
หลังจากได้รับข้อมูลที่ถูกต้องแอปพลิเคชัน NER สามารถเริ่มการฝึกอบรมแบบจำลองได้โดยตรง
checkpoint_dir = 'pretrained_models'
model_name = 'msra_ner_bilstm_cnn_crf'
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bilstm_cnn' ,
char_embed_trainable = True ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = checkpoint_dir ,
model_name = model_name ,
load_swa_model = True ) สำหรับอินเทอร์เฟซ fit ของแอปพลิเคชัน NER คุณจะต้องผ่านชุดฝึกอบรมและตัวอย่างชุดการตรวจสอบความถูกต้องที่ได้รับการประมวลผลมาก่อน ความหมายของพารามิเตอร์ที่เหลือมีดังนี้:
ner_model_type : ระบุชื่อรุ่นที่จะใช้ ในตัวอย่างนี้ใช้โมเดล bilstm_cnn ;char_embed_trainable : ไม่ว่าจะเป็นเลเยอร์เวกเตอร์คำสามารถปรับจูนได้ดีหรือไม่ ในตัวอย่างนี้มันถูกตั้งค่าเป็น True ซึ่งบ่งชี้ว่าสามารถปรับแต่งได้อย่างละเอียดcallback_list : ชื่อของฟังก์ชั่นการโทรกลับที่ต้องใช้ ฟังก์ชั่นการโทรกลับที่ใช้ในตัวอย่างนี้คือ:modelcheckpoint : ใช้ฟังก์ชั่นจุดตรวจสอบรุ่น หลังจากการทำซ้ำแต่ละครั้งให้บันทึกแบบจำลองที่ผ่านการฝึกอบรม;earlystopping : ใช้ฟังก์ชั่นหยุดก่อน หากประสิทธิภาพของโมเดลไม่ดีขึ้นหลังจากการวนซ้ำ N (เริ่มต้น n = 5) การฝึกอบรมจะสิ้นสุดลง;swa : SWA หมายถึงค่าเฉลี่ยน้ำหนักสุ่มซึ่งเป็นกลยุทธ์การรวมโมเดลทั่วไปที่สามารถปรับปรุงประสิทธิภาพของแบบจำลองได้อย่างมีประสิทธิภาพ สำหรับรายละเอียดเพิ่มเติมโปรดดูบทนำในบทความต้นฉบับcheckpoint_dir : เส้นทางไดเรกทอรีเพื่อบันทึกไฟล์โมเดล;model_name : ชื่อไฟล์ของไฟล์รุ่น;load_swa_model : ไม่ว่าจะโหลดน้ำหนักรุ่น SWA หลังจากได้รับการฝึกฝนแบบจำลองหรือไม่ ตั้งค่าเป็น True ที่นี่ระบุการใช้โมเดล SWA; test_data , test_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . score ( test_data , test_labels ) ที่นี่ load_ner_data_and_labels ยังคงใช้เพื่อประมวลผลข้อมูลชุดทดสอบ หลังจากได้รับรูปแบบข้อมูลที่ถูกต้องให้ใช้อินเทอร์เฟซ score ของแอปพลิเคชัน NER เพื่อให้ได้คะแนนของโมเดลในชุดทดสอบ
หลังจากฝึกอบรมโมเดลไฟล์ที่เกี่ยวข้องกับโมเดลทั้งหมดที่ต้องการโดยงานจะต้องได้รับการบันทึกเพื่ออำนวยความสะดวกในการใช้โมเดลที่ผ่านการฝึกอบรมแฟนซี -NLP ในแอปพลิเคชันภายนอกอื่น ๆ
import os
ner_app . save (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' )) อินเทอร์เฟซ save ของแอปพลิเคชัน NER สามารถใช้เพื่อคงไว้ซึ่งไฟล์โครงสร้างของโมเดล (JSON), ไฟล์น้ำหนัก (HDF5) และผลลัพธ์ที่เกี่ยวข้องล่วงหน้า (ดอง):
modelcheckpoint ; ner_app . load (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' ),
weights_file = os . path . join ( checkpoint_dir , f' { model_name } _swa.hdf5' )) ในเวลานี้ ner_app มีความสามารถในการทำนายตัวอย่างแล้วและคุณสามารถทำฟังก์ชั่นการทำนายที่เกี่ยวข้องที่กล่าวถึงใน คู่มือเบื้องต้น ตัวอย่างเช่น analyze , restrict_analyze
เรายังคงใช้ชุดข้อมูลการจำแนกชื่อเรื่องข่าวจีนที่กล่าวถึงข้างต้นเป็นตัวอย่างเพื่อแนะนำวิธีการใช้ชุดข้อมูลที่มีอยู่เพื่อฝึกอบรมรูปแบบการจำแนกข้อความของเราเอง สำหรับรุ่นที่สมบูรณ์ของตัวอย่างรหัสต่อไปนี้โปรดดู examples/text_classification_example.py
ใน Fancy-NLP แอปพลิเคชันการจำแนกประเภทข้อความสนับสนุนรูปแบบชุดข้อมูลคั่นด้วยตัวคั่นแบบคงที่โดยใช้ข้อความต้นฉบับ พวกเขาสามารถมีคอลัมน์ซ้ำซ้อนที่เป็นอิสระจากงานการจำแนกประเภทข้อความ พวกเขาจะต้องตรวจสอบให้แน่ใจว่าทั้งคอลัมน์ฉลากและคอลัมน์ข้อความอินพุตอยู่ในตำแหน่งคงที่แบบครบวงจร
นอกจากนี้สำหรับแท็กการจำแนกประเภทจำเป็นต้องใช้ไฟล์การแมปของแท็กและแท็ก ID ด้วยซึ่งประกอบด้วยสองคอลัมน์: คอลัมน์แรกคือชื่อดั้งเดิมของแท็กในชุดข้อมูลซึ่งมักจะเป็นรหัสที่เข้ารหัสบางส่วน คอลัมน์ที่สองเป็นชื่อที่อ่านได้ซึ่งสอดคล้องกับชื่อเดิมของแท็ก การโต้ตอบของไฟล์นี้จะถูกใช้เพื่อส่งออกชื่อฉลากที่อ่านได้โดยตรงเมื่อทำนายโมเดล
การใช้อินเทอร์เฟซที่จัดทำโดย Fancy-NLP เราสามารถโหลดชุดข้อมูลโดยตรงและประมวลผลลงในรูปแบบที่ต้องการโดยรุ่น
from fancy_nlp . applications import TextClassification
text_classification_app = TextClassification ( use_pretrained = False )
data_file = 'datasets/text_classification/toutiao/toutiao_cat_data.txt'
from fancy_nlp . utils import load_text_classification_data_and_labels
train_data , train_labels , valid_data , valid_labels , test_data , test_labels =
load_text_classification_data_and_labels ( data_file ,
label_index = 1 ,
text_index = 3 ,
delimiter = '_!_' ,
split_mode = 2 ,
split_size = 0.3 ) load_ner_data_and_labels ใช้การโหลดชุดข้อมูลการจำแนกข้อความที่มีประสิทธิภาพ คุณสามารถใช้เส้นทางไฟล์ของข้อมูล (ชุดการฝึกอบรมชุดตรวจสอบหรือชุดทดสอบ) ที่จะโหลดเป็นพารามิเตอร์ ข้อมูลที่สมบูรณ์ถูกใช้ที่นี่เพื่อแบ่งชุดการฝึกอบรมชุดการตรวจสอบและชุดทดสอบ นอกเหนือจากไฟล์ข้อมูลความหมายเฉพาะของพารามิเตอร์ที่เหลืออยู่ข้างต้นคือ:
label_index : ตำแหน่งของแท็กการจำแนกประเภทในไฟล์ข้อมูล (หมายเลขตำแหน่งเริ่มต้นจาก 0);text_index : ตำแหน่งของข้อความที่จะจัดประเภทในไฟล์ข้อมูลdelimiter : ตัวคั่นระหว่างคอลัมน์ของไฟล์ข้อมูลsplit_mode : ระบุวิธีหารข้อมูลต้นฉบับโดยการเปลี่ยนพารามิเตอร์ ใน:split_size : อัตราส่วนการแบ่งข้อมูล เมื่อ split_mode=1 หมายความว่าข้อมูลที่หารอัตราส่วน split_size จากข้อมูลต้นฉบับจะถูกใช้เป็นชุดการตรวจสอบ เมื่อ split_mode=2 หมายความว่าข้อมูลที่หารอัตราส่วน split_size จากข้อมูลดั้งเดิมจะถูกใช้เป็นผลรวมของชุดการตรวจสอบและชุดทดสอบและสัดส่วนของชุดการตรวจสอบและชุดทดสอบแต่ละบัญชีครึ่ง หลังจากได้รับข้อมูลที่ถูกต้องแอปพลิเคชันการจำแนกข้อความสามารถเริ่มการฝึกอบรมแบบจำลองได้โดยตรง
dict_file = 'datasets/text_classification/toutiao/toutiao_label_dict.txt'
model_name = 'toutiao_text_classification_cnn'
checkpoint_dir = 'pretrained_models'
text_classification_app . fit (
train_data , train_labels , valid_data , valid_labels ,
text_classification_model_type = 'cnn' ,
char_embed_trainable = True ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = checkpoint_dir ,
model_name = model_name ,
label_dict_file = dict_file ,
max_len = 60 ,
load_swa_model = True ) สำหรับอินเทอร์เฟซ fit ของแอปพลิเคชันการจำแนกประเภทข้อความคุณต้องผ่านชุดฝึกอบรมและตัวอย่างชุดการตรวจสอบความถูกต้องที่ได้รับการประมวลผลมาก่อน ความหมายของพารามิเตอร์ที่เหลือมีดังนี้:
text_classification_model_type : ระบุชื่อรุ่นที่จะใช้ ในตัวอย่างนี้ใช้โมเดล cnn ;char_embed_trainable : ไม่ว่าจะเป็นเลเยอร์เวกเตอร์คำสามารถปรับจูนได้ดีหรือไม่ ในตัวอย่างนี้มันถูกตั้งค่าเป็น True ซึ่งบ่งชี้ว่าสามารถปรับแต่งได้อย่างละเอียดcallback_list : ชื่อของฟังก์ชั่นการโทรกลับที่ต้องใช้ ฟังก์ชั่นการโทรกลับที่ใช้ในตัวอย่างนี้คือ:modelcheckpoint : ใช้ฟังก์ชั่นจุดตรวจสอบรุ่น หลังจากการทำซ้ำแต่ละครั้งให้บันทึกแบบจำลองที่ผ่านการฝึกอบรม;earlystopping : ใช้ฟังก์ชั่นหยุดก่อน หากประสิทธิภาพของโมเดลไม่ดีขึ้นหลังจากการวนซ้ำ N (เริ่มต้น n = 5) การฝึกอบรมจะสิ้นสุดลง;swa : SWA หมายถึงค่าเฉลี่ยน้ำหนักสุ่มซึ่งเป็นกลยุทธ์การรวมโมเดลทั่วไปที่สามารถปรับปรุงประสิทธิภาพของแบบจำลองได้อย่างมีประสิทธิภาพ สำหรับรายละเอียดเพิ่มเติมโปรดดูบทนำในบทความต้นฉบับcheckpoint_dir : เส้นทางไดเรกทอรีเพื่อบันทึกไฟล์โมเดล;model_name : ชื่อไฟล์ของไฟล์รุ่น;label_dict_file : ไฟล์พจนานุกรมฉลากซึ่งประกอบด้วยสองคอลัมน์: คอลัมน์แรกคือชื่อเดิมของฉลากในชุดข้อมูลโดยปกติแล้วรหัสที่เข้ารหัสบางตัว; คอลัมน์ที่สองเป็นชื่อที่อ่านได้ซึ่งสอดคล้องกับชื่อเดิมของฉลากmax_len : สำหรับความยาวสูงสุดที่เก็บไว้โดยข้อความอินพุตข้อความเกินความยาวนั้นจะถูกตัดทอน;load_swa_model : ไม่ว่าจะโหลดน้ำหนักรุ่น SWA หลังจากได้รับการฝึกฝนแบบจำลองหรือไม่ ตั้งค่าเป็น True ที่นี่ระบุการใช้โมเดล SWA; text_classification_app . score ( test_data , test_labels ) ที่นี่คุณสามารถใช้อินเทอร์เฟซ score ของแอปพลิเคชันการจำแนกข้อความโดยตรงเพื่อให้ได้คะแนนของโมเดลในชุดทดสอบ
หลังจากฝึกอบรมโมเดลไฟล์ที่เกี่ยวข้องกับโมเดลทั้งหมดที่ต้องการโดยงานจะต้องได้รับการบันทึกเพื่ออำนวยความสะดวกในการใช้โมเดลที่ผ่านการฝึกอบรมแฟนซี -NLP ในแอปพลิเคชันภายนอกอื่น ๆ
import os
text_classification_app . save (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' )) save อินเทอร์เฟซของแอปพลิเคชันการจำแนกประเภทข้อความสามารถใช้เพื่อคงไว้ซึ่งไฟล์โครงสร้างของโมเดล (JSON), ไฟล์น้ำหนัก (HDF5) และผลลัพธ์ที่เกี่ยวข้องกับการประมวลผลล่วงหน้า (ดอง):
modelcheckpoint text_classification_app . load (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' ),
weights_file = os . path . join ( checkpoint_dir , f' { model_name } _swa.hdf5' )) ในเวลานี้ text_classification_app มีความสามารถในการทำนายตัวอย่างแล้วและคุณสามารถทำฟังก์ชั่นการทำนายที่เกี่ยวข้องที่กล่าวถึงใน คู่มือเบื้องต้น ตัวอย่างเช่น predict analyze
เรายังคงใช้ชุดข้อมูลการจับคู่คำถามการบริการลูกค้าของเว็บธนาคารที่กล่าวถึงข้างต้นเป็นตัวอย่างเพื่อแนะนำวิธีการใช้ชุดข้อมูลที่มีอยู่เพื่อฝึกอบรมรูปแบบการจับคู่ข้อความที่คล้ายคลึงกันของข้อความของเราเอง สำหรับรุ่นที่สมบูรณ์ของรหัสตัวอย่างต่อไปนี้โปรดดู examples/spm_example.py
ใน Fancy-NLP แอปพลิเคชันงานการจับคู่ความคล้ายคลึงกันของข้อความรองรับการใช้ข้อความต้นฉบับในรูปแบบชุดข้อมูลคั่นด้วย t ซึ่งประกอบด้วยสามคอลัมน์: คอลัมน์แรกและคอลัมน์ที่สองเป็นชุดของคู่ข้อความตามลำดับ; คอลัมน์ที่สามเป็นฉลากตัวอย่าง 1 หมายถึงความหมายของข้อความมีความคล้ายคลึงกันและ 0 หมายถึงความแตกต่าง
การใช้อินเทอร์เฟซที่จัดทำโดย Fancy-NLP เราสามารถโหลดชุดข้อมูลโดยตรงและประมวลผลลงในรูปแบบที่ต้องการโดยรุ่น
from fancy_nlp . applications import SPM
spm_app = applications . SPM ( use_pretrained = False )
train_file = 'datasets/spm/webank/BQ_train.txt'
valid_file = 'datasets/spm/webank/BQ_dev.txt'
from fancy_nlp . utils import load_spm_data_and_labels
train_data , train_labels = load_spm_data_and_labels ( train_file )
valid_data , valid_labels = load_spm_data_and_labels ( valid_file ) load_spm_data_and_labels ใช้การโหลดชุดข้อมูลการจับคู่ความคล้ายคลึงกันของข้อความที่มีประสิทธิภาพ คุณสามารถใช้เส้นทางไฟล์ของข้อมูล (ชุดการฝึกอบรมชุดตรวจสอบหรือชุดทดสอบ) ที่จะโหลดเป็นพารามิเตอร์
หลังจากได้รับข้อมูลที่ถูกต้องแอปพลิเคชันการจับคู่ความคล้ายคลึงกันของข้อความสามารถเริ่มการฝึกอบรมโมเดลได้โดยตรง
model_name = 'spm_siamese_cnn'
checkpoint_dir = 'pretrained_models'
spm_app . fit ( train_data , train_labels , valid_data , valid_labels ,
spm_model_type = 'siamese_cnn' ,
word_embed_trainable = True ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = checkpoint_dir ,
model_name = model_name ,
max_len = 60 ,
load_swa_model = True ) สำหรับอินเทอร์เฟซ fit ของแอปพลิเคชันที่คล้ายคลึงกันของข้อความคุณต้องผ่านตัวอย่างชุดการฝึกอบรมและการตรวจสอบความถูกต้องที่ได้รับการประมวลผลมาก่อน ความหมายของพารามิเตอร์ที่เหลือมีดังนี้:
spm_model_type : ระบุชื่อรุ่นที่จะใช้ ในตัวอย่างนี้ใช้โมเดล siamese_cnn ;word_embed_trainable : ไม่ว่าจะเป็นคำว่าเวกเตอร์คำสามารถปรับแต่งได้ดีหรือไม่ ในตัวอย่างนี้มันถูกตั้งค่าเป็น True ซึ่งบ่งชี้ว่าสามารถปรับแต่งได้อย่างละเอียดcallback_list : ชื่อของฟังก์ชั่นการโทรกลับที่ต้องใช้ ฟังก์ชั่นการโทรกลับที่ใช้ในตัวอย่างนี้คือ:modelcheckpoint : ใช้ฟังก์ชั่นจุดตรวจสอบรุ่น หลังจากการทำซ้ำแต่ละครั้งให้บันทึกแบบจำลองที่ผ่านการฝึกอบรม;earlystopping : ใช้ฟังก์ชั่นหยุดก่อน หากประสิทธิภาพของโมเดลไม่ดีขึ้นหลังจากการวนซ้ำ N (เริ่มต้น n = 5) การฝึกอบรมจะสิ้นสุดลง;swa : SWA หมายถึงค่าเฉลี่ยน้ำหนักสุ่มซึ่งเป็นกลยุทธ์การรวมโมเดลทั่วไปที่สามารถปรับปรุงประสิทธิภาพของแบบจำลองได้อย่างมีประสิทธิภาพ สำหรับรายละเอียดเพิ่มเติมโปรดดูบทนำในบทความต้นฉบับcheckpoint_dir : เส้นทางไดเรกทอรีเพื่อบันทึกไฟล์โมเดล;model_name : ชื่อไฟล์ของไฟล์รุ่น;max_len : สำหรับความยาวสูงสุดที่เก็บไว้โดยข้อความอินพุตข้อความเกินความยาวนั้นจะถูกตัดทอน;load_swa_model : ไม่ว่าจะโหลดน้ำหนักรุ่น SWA หลังจากได้รับการฝึกฝนแบบจำลองหรือไม่ ตั้งค่าเป็น True ที่นี่ระบุการใช้โมเดล SWA; test_file = 'datasets/spm/webank/BQ_test.txt'
test_data , test_labels = load_spm_data_and_labels ( test_file )
spm_app . score ( test_data , test_labels ) ที่นี่คุณสามารถใช้อินเทอร์ score แอปพลิเคชันการจับคู่ข้อความที่คล้ายคลึงกันโดยตรงเพื่อให้ได้คะแนนของโมเดลในชุดทดสอบ
หลังจากฝึกอบรมโมเดลไฟล์ที่เกี่ยวข้องกับโมเดลทั้งหมดที่ต้องการโดยงานจะต้องได้รับการบันทึกเพื่ออำนวยความสะดวกในการใช้โมเดลที่ผ่านการฝึกอบรมแฟนซี -NLP ในแอปพลิเคชันภายนอกอื่น ๆ
import os
spm_app . save (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' )) อินเทอร์เฟซ save ของแอปพลิเคชันการจับคู่ข้อความที่คล้ายคลึงกันสามารถใช้เพื่อคงไว้ซึ่งไฟล์โครงสร้างของโมเดล (JSON), ไฟล์น้ำหนัก (HDF5) และผลลัพธ์ที่เกี่ยวข้องกับการประมวลผลล่วงหน้า (ผักดอง):
modelcheckpoint spm_app . load (
preprocessor_file = os . path . join ( checkpoint_dir , f' { model_name } _preprocessor.pkl' ),
json_file = os . path . join ( checkpoint_dir , f' { model_name } .json' ),
weights_file = os . path . join ( checkpoint_dir , f' { model_name } _swa.hdf5' )) ในเวลานี้ spm_app มีความสามารถในการทำนายตัวอย่างแล้วและคุณสามารถดำเนินการตามฟังก์ชั่นการทำนายที่เกี่ยวข้องที่กล่าวถึงใน คู่มือเบื้องต้นได้ ตัวอย่างเช่น predict analyze
FACNY-NLP จัดเตรียมวิธีการต่าง ๆ สำหรับการใช้รุ่น BERT :
ในการใช้ Bert ใน Fancy-NLP คุณจะต้องดาวน์โหลดโมเดล Bert ที่ผ่านการฝึกอบรมมาก่อน (เช่นรูปแบบ Bert ของจีนที่จัดทำโดย Google โมเดล Ernie ที่จัดทำโดย Baidu (รหัสการสกัด: IQ74) และแบบจำลอง Bert-WWM ที่จัดทำโดย Harbin Institute of Technology) หลังจากนั้นคุณสามารถผ่านเส้นทางของไฟล์คำศัพท์ของรุ่น Bert, ไฟล์การกำหนดค่าและไฟล์โมเดลในวิธี fit ของแอปพลิเคชันที่เกี่ยวข้อง ต่อไปนี้เป็นตัวอย่างของแอปพลิเคชันการจดจำเอนทิตี สำหรับรหัสตัวอย่างที่สมบูรณ์โปรดดู examples/bert_fine_tuning.py examples/bert_single.py และ examples/bert_combination.py
โปรดทราบว่ารุ่น Bert สามารถใช้กับเวกเตอร์อักขระได้เท่านั้นไม่ใช่กับเวกเตอร์คำ
import tensorflow as tf
from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bert' ,
use_char = False ,
use_word = False ,
use_bert = True ,
bert_vocab_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/vocab.txt' ,
bert_config_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_config.json' ,
bert_checkpoint_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_model.ckpt' ,
bert_trainable = True ,
optimizer = tf . keras . optimizers . Adam ( 1e-5 ),
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = 'pretrained_models' ,
model_name = 'msra_ner_bert_crf' ,
load_swa_model = True )ในตัวอย่างโค้ดด้านบนเป็นสิ่งสำคัญที่ควรทราบ:
ner_model_type : ตั้งค่าประเภทรุ่นเป็น bert ;use_char : ตั้งค่าไม่ให้ใช้เวกเตอร์ระดับอักขระ;use_word : ตั้งค่าไม่ให้ใช้เวกเตอร์ระดับคำเป็นอินพุตเสริม;use_bert : เมื่อปรับแต่งรุ่น Bert ให้ตั้งค่าให้ใช้เฉพาะอินพุต Bert เท่านั้น;bert_vocab_file , bert_config_file , bert_checkpoint_file : เส้นทางไปยังไฟล์ที่เกี่ยวข้องกับรุ่น Bertbert_trainable : ตั้งค่าพารามิเตอร์โมเดล Bert เป็นสถานะการฝึกอบรมนั่นคือการปรับแต่ง;optimizer : ตั้งค่าเครื่องมือเพิ่มประสิทธิภาพสำหรับรุ่น Bert ในการปรับแต่งแบบจำลอง Bert อัตราการเรียนรู้ของเครื่องมือเพิ่มประสิทธิภาพจะต้องปรับให้อยู่ในระดับที่เล็กกว่า from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bilstm_cnn' ,
use_char = False ,
use_word = False ,
use_bert = True ,
bert_vocab_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/vocab.txt' ,
bert_config_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_config.json' ,
bert_checkpoint_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_model.ckpt' ,
bert_trainable = False ,
optimizer = 'adam' ,
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = 'pretrained_models' ,
model_name = 'msra_ner_bilstm_cnn_bert_crf' ,
load_swa_model = True )ในตัวอย่างโค้ดด้านบนเป็นสิ่งสำคัญที่ควรทราบ:
ner_model_type : ตั้งค่าประเภทรุ่นเป็น bilstm_cnn และต้องใช้โมเดลที่ไม่ใช่เบิร์ตที่นี่use_char : ตั้งค่าไม่ให้ใช้เวกเตอร์ระดับอักขระ;use_word : ตั้งค่าไม่ให้ใช้เวกเตอร์ระดับคำเป็นอินพุตเสริม;use_bert : ตั้งค่าให้ใช้เฉพาะเวกเตอร์เบิร์ตเป็นอินพุตคุณสมบัติ;bert_vocab_file , bert_config_file , bert_checkpoint_file : เส้นทางไปยังไฟล์ที่เกี่ยวข้องกับรุ่น Bertbert_trainable : ตั้งค่าพารามิเตอร์โมเดล Bert เป็นสถานะที่ไม่สามารถฝึกฝนได้และยังเป็นไปได้ที่จะตั้งค่าเป็น True ที่นี่;optimizer : ตั้งค่าเครื่องมือเพิ่มประสิทธิภาพ หากรูปแบบการเดิมพันสามารถฝึกอบรมได้ขอแนะนำให้ปรับอัตราการเรียนรู้ของเครื่องมือเพิ่มประสิทธิภาพให้เป็นรุ่นที่เล็กกว่า import tensorflow as tf
from fancy_nlp . applications import NER
ner_app = NER ( use_pretrained = False )
from fancy_nlp . utils import load_ner_data_and_labels
train_data , train_labels = load_ner_data_and_labels ( 'datasets/ner/msra/train_data' )
valid_data , valid_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . fit ( train_data , train_labels , valid_data , valid_labels ,
ner_model_type = 'bilstm_cnn' ,
use_char = True ,
use_word = False ,
use_bert = True ,
bert_vocab_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/vocab.txt' ,
bert_config_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_config.json' ,
bert_checkpoint_file = 'pretrained_embeddings/chinese_L-12_H-768_A-12/bert_model.ckpt' ,
bert_trainable = True ,
optimizer = tf . keras . optimizers . Adam ( 1e-5 ),
callback_list = [ 'modelcheckpoint' , 'earlystopping' , 'swa' ],
checkpoint_dir = 'pretrained_models' ,
model_name = 'msra_ner_bilstm_cnn_char_bert_crf' ,
load_swa_model = True )ในตัวอย่างโค้ดด้านบนเป็นสิ่งสำคัญที่ควรทราบ:
ner_model_type : ตั้งค่าประเภทรุ่นเป็น bilstm_cnn และต้องใช้โมเดลที่ไม่ใช่เบิร์ตที่นี่use_char : ตั้งค่าเวกเตอร์ระดับอักขระuse_word : ตั้งค่าไม่ให้ใช้เวกเตอร์ระดับคำเป็นอินพุตเสริม;use_bert : ตั้งค่าการใช้เวกเตอร์ Bert ซึ่งรวมเวกเตอร์คำและเวกเตอร์เบิร์ตเป็นอินพุตคุณสมบัติ;bert_vocab_file , bert_config_file , bert_checkpoint_file : เส้นทางไปยังไฟล์ที่เกี่ยวข้องกับรุ่น Bertbert_trainable : ตั้งค่าพารามิเตอร์โมเดลเบิร์ตเป็นสถานะการฝึกอบรมและยังเป็นไปได้ที่จะตั้งค่าเป็น False ที่นี่;optimizer : ตั้งค่าเครื่องมือเพิ่มประสิทธิภาพ หากรูปแบบการเดิมพันสามารถฝึกอบรมได้ขอแนะนำให้ปรับอัตราการเรียนรู้ของเครื่องมือเพิ่มประสิทธิภาพให้เป็นรุ่นที่เล็กกว่า นักพัฒนาที่มีความสนใจในการปรับปรุงรหัส NLP แฟนซี ควรทำตามข้อกำหนดต่อไปนี้เพื่อส่งคำขอดึง:
หากคุณใช้ NLP แฟนซี ในระหว่างกระบวนการวิจัยที่เกี่ยวข้องคุณสามารถเพิ่มสิ่งต่อไปนี้ในรายการการอ้างอิง
@misc{tencent2019fancynlp,
title={Fancy-NLP},
author={Li Yang and Shiyao Xu and Shijia E},
howpublished={ url {https://github.com/boat-group/fancy-nlp}},
year={2019}
}▴กลับไปด้านบน
โครงการนี้ได้รับแรงบันดาลใจจากโครงการโอเพ่นซอร์สที่ยอดเยี่ยมมากมายโดยเฉพาะ Keras ในฐานะที่เป็นสโลแกนของ Keras: การเรียนรู้อย่างลึกซึ้งสำหรับมนุษย์ กล่าวว่าเราหวังว่าแฟนซี NLP จะเป็น NLP สำหรับมนุษย์ โดยเฉพาะในเขตจีน