NLP untuk manusia. Perangkat pemrosesan bahasa alami yang cepat dan mudah digunakan (NLP), memuaskan imajinasi Anda tentang NLP.
→ Versi bahasa Inggris

Pendahuluan Dasar • Instalasi • Panduan Memulai • Tutorial terperinci • Kehormatan • Cara berkontribusi Kode • Kutipan • Ucapan Terima Kasih
Fancy-NLP adalah alat penambangan pengetahuan teks untuk membangun potret produk yang dibangun oleh tim strategi iklan produk Tencent. Ini mendukung berbagai tugas NLP umum seperti ekstraksi entitas, klasifikasi teks dan pencocokan kesamaan teks. Dibandingkan dengan kerangka kerja yang umum digunakan saat ini di industri, ini dapat mendukung pengguna untuk mengimplementasikan implementasi fungsional yang cepat: ia tidak hanya dapat memenuhi kustomisasi model yang mendalam oleh pengguna tingkat lanjut, tetapi juga memungkinkan pengguna biasa untuk dengan cepat menggunakan model pra-terlatih untuk dengan cepat berlatih praktik fungsional. Dalam skenario bisnis periklanan produk saat ini, kami menggunakan alat ini untuk dengan cepat mengeksplorasi karakteristik data produk besar -besaran, dengan demikian mendukung modul seperti rekomendasi produk iklan.
Tujuan asli dari proyek ini adalah untuk menyediakan serangkaian alat NLP yang mudah digunakan, yang secara langsung ditujukan untuk skenario penggunaan dan memenuhi kebutuhan pengguna untuk tugas NLP, sehingga pengguna tidak perlu berurusan dengan preprocessing yang kompleks dan proses perantara lainnya, dan secara langsung menyelesaikan beberapa tugas NLP untuk input bahasa alam, yang mereka pikirkan adalah apa yang mereka pikirkan adalah apa yang mereka pikirkan!
Apa itu mewah? Untuk banyak tugas NLP saat ini, seperti Named Entity Recognition (NER), Klasifikasi Teks, dan Pencocokan Kesamaan Teks (Kalimat Pencocokan Pasangan (SPM), sebagian besar alat dirancang untuk mendukung pelatihan model dan evaluasi. Ketika pengguna biasa ingin menerapkan model-model yang sebenarnya, yang sering tidak dapat dilakukan oleh para pengguna yang diharapkan. Pemrosesan setiap tautan tugas NLP di Fancy-NLP, dan secara efisien menerapkan model ke skenario permintaan aktual.
Fancy-NLP saat ini didukung untuk digunakan di lingkungan Python 3 dan telah sepenuhnya diuji di Python 3.6. TensorFlow 2.x sepenuhnya bergantung pada versi saat ini. Jika Anda memiliki kekhawatiran tentang kompatibilitas modul, kami sarankan Anda menggunakan VirtualEnv untuk membuat lingkungan virtual untuk menggunakan alat ini.
Fancy-NLP mendukung instalasi satu klik menggunakan pip :
pip install fancy-nlpDalam panduan memulai, kami akan menggunakan model pra-terlatih untuk membawa Anda dengan cepat memahami dan mengalami fungsi dasar Fancy-NLP.
Catatan: Kami akan terus mengoptimalkan model pengenalan entitas dari beberapa skenario (data beranotasi yang berbeda) untuk digunakan pengguna secara langsung. Jika Anda memiliki set data yang relevan, Anda juga dipersilakan untuk memberi kami umpan balik positif dalam masalah ini.
Versi Fancy-NLP saat ini dapat memuat model NER yang dilatih menggunakan data subset MSRA NER secara default. Ini dapat mengidentifikasi struktur organisasi (org), lokasi (LOC) dan orang (per) entitas dalam teks Cina. Model dasar yang dimuat secara default adalah untuk dialami pengguna secara langsung. Jika Anda ingin menggunakan model khusus Anda sendiri secara langsung, Anda dapat merujuk pada pengantar dalam tutorial terperinci berikutnya untuk membangun sistem ekstraksi entitas Anda.
> >> from fancy_nlp . applications import NER
> >> ner_app = NER ()Saat Anda menjalankan kode di atas untuk pertama kalinya, model NER yang terlatih akan diunduh dari cloud.
> >> 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 dimuat secara default dengan model klasifikasi teks yang dilatih dalam dataset klasifikasi judul berita Cina yang saat ini diterbitkan, yang dapat memprediksi kategori berita yang menjadi miliknya untuk teks judul berita.
> >> from fancy_nlp . applications import TextClassification
> >> text_classification_app = TextClassification ()Saat Anda menjalankan program di atas untuk pertama kalinya, model pra-terlatih akan diunduh dari cloud.
> >> text_classification_app . predict ( '苹果iOS占移动互联网流量份额逾65% 位居第一' )
'科技' > >> text_classification_app . analyze ( '苹果iOS占移动互联网流量份额逾65% 位居第一' )
( '科技' , 0.9996544 )Fancy-NLP dimuat secara default dalam model pencocokan kesamaan teks yang dilatih dalam dataset pencocokan pertanyaan layanan pelanggan Webank yang saat ini diterbitkan, yang dapat memprediksi apakah itu mengungkapkan niat yang sama untuk pasangan teks yang disediakan.
> >> from fancy_nlp . applications import SPM
> >> spm_app = SPM ()Ketika Anda menjalankan program di atas untuk pertama kalinya, model pencocokan kesamaan teks pra-terlatih akan diunduh dari cloud.
> >> spm_app . predict (( '未满足微众银行审批是什么意思' , '为什么我未满足微众银行审批' ))
'1' Dalam hasil prediksi, 1 mewakili niat yang sama atau teks yang sama, 0 mewakili niat yang berbeda atau teks yang berbeda.
> >> spm_app . analyze (( '未满足微众银行审批是什么意思' , '为什么我未满足微众银行审批' ))
( '1' , array ([ 1.6599501e-09 , 1.0000000e+00 ], dtype = float32 ))Dalam tutorial terperinci , Anda dapat belajar cara menggunakan Fancy-NLP untuk membangun model khusus yang memenuhi skenario khusus menggunakan set data Anda sendiri, dan memiliki pemahaman yang lebih komprehensif tentang antarmuka Fancy-NLP.
Untuk sepenuhnya mengalami tutorial berikut, Anda perlu mengunduh Dataset dan Model Bert yang kami gunakan:
86geqk7e6rb7 Anda dapat memindahkan data yang diunduh ke tingkat yang sama dengan direktori examples , dan struktur direktori akhir adalah sebagai berikut:
.
├── 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
Jadi Anda dapat menjalankan program sampel secara langsung. Misalnya, python examples/ner_example.py .
Kami masih menggunakan data subset msra ner yang disebutkan di atas sebagai contoh untuk memperkenalkan cara menggunakan set data yang ada untuk melatih model pengenalan entitas kami sendiri. Untuk versi lengkap dari semua cuplikan kode berikut, silakan lihat examples/ner_example.py .
Dalam Fancy-NLP, aplikasi pengenalan entitas mendukung penggunaan format dataset NER standar, setiap karakter yang akan diidentifikasi dan tag yang sesuai dipisahkan oleh t , dan kalimat dipisahkan oleh garis kosong. Format tag dapat menjadi format standar umum seperti BIO dan BIOES .
Menggunakan antarmuka yang disediakan oleh Fancy-NLP, kami dapat secara langsung memuat dataset dan memprosesnya ke dalam format yang diperlukan oleh model.
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 mengimplementasikan pemuatan set data NER yang efektif. Anda dapat secara langsung menggunakan jalur file data (set pelatihan, set validasi atau set tes) untuk dimuat sebagai parameter. Set tes digunakan sebagai set validasi. Dalam tugas yang sebenarnya, Anda harus memiliki set validasi independen mereka sendiri dan set tes untuk mendapatkan hasil evaluasi uji yang berharga.
Setelah mendapatkan data yang valid, aplikasi NER dapat mulai melatih model secara langsung.
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 ) Untuk antarmuka fit dari aplikasi NER, Anda harus lulus dalam set pelatihan dan sampel set validasi yang telah diproses sebelumnya. Makna parameter yang tersisa adalah sebagai berikut:
ner_model_type : Menunjukkan nama model yang akan digunakan. Dalam contoh ini, model bilstm_cnn digunakan;char_embed_trainable : Apakah kata lapisan vektor dapat disempurnakan. Dalam contoh ini, diatur ke True , menunjukkan bahwa penyempurnaan dapat dilakukan;callback_list : Nama fungsi callback yang perlu digunakan. Fungsi panggilan balik yang digunakan dalam contoh ini adalah:modelcheckpoint : Gunakan fungsi Model Checkpoint. Setelah setiap iterasi, simpan model terlatih;earlystopping : Gunakan fungsi stop awal. Jika kinerja model tidak membaik setelah n bundar iterasi (default n = 5), pelatihan akan berakhir;swa : SWA berarti rata -rata berat stokastik, yang merupakan strategi integrasi model umum yang secara efektif dapat meningkatkan kinerja model. Untuk detail lebih lanjut, silakan merujuk ke pengantar dalam makalah asli;checkpoint_dir : jalur direktori untuk menyimpan file model;model_name : Nama file file model;load_swa_model : Apakah akan memuat berat model SWA setelah model dilatih. Diatur ke True di sini, menunjukkan penggunaan model SWA; test_data , test_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . score ( test_data , test_labels ) Di sini, load_ner_data_and_labels masih digunakan untuk memproses data yang ditetapkan. Setelah mendapatkan format data yang valid, gunakan antarmuka score aplikasi NER untuk mendapatkan skor model dalam set tes.
Setelah melatih model, semua file terkait model yang diperlukan oleh tugas perlu disimpan untuk memfasilitasi penggunaan model yang dilatih Fancy-NLP di aplikasi eksternal lainnya.
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' )) Antarmuka save dari Aplikasi NER dapat digunakan untuk mempertahankan file struktur model (JSON), file berat (HDF5) dan hasil terkait preprocessing (acar):
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' )) Pada saat ini, ner_app sudah memiliki kemampuan untuk memprediksi sampel, dan Anda dapat menyelesaikan fungsi prediksi yang relevan yang disebutkan dalam panduan pengantar . Misalnya, analyze , restrict_analyze .
Kami masih menggunakan dataset klasifikasi judul berita Cina yang disebutkan di atas sebagai contoh untuk memperkenalkan cara menggunakan dataset yang ada untuk melatih model klasifikasi teks kami sendiri. Untuk versi lengkap dari semua cuplikan kode berikut, silakan merujuk ke examples/text_classification_example.py .
Dalam Fancy-NLP, aplikasi klasifikasi teks mendukung format dataset yang dipisahkan oleh pembatas tetap menggunakan teks asli. Mereka dapat memiliki kolom yang berlebihan yang tidak tergantung pada tugas klasifikasi teks. Mereka hanya perlu memastikan bahwa kolom label dan kolom teks input berada dalam posisi tetap terpadu.
Selain itu, untuk tag klasifikasi, file pemetaan tag dan tag ID juga diperlukan, yang terdiri dari dua kolom: kolom pertama adalah nama asli tag dalam set data, biasanya beberapa ID yang dikodekan; Kolom kedua adalah nama yang dapat dibaca sesuai dengan nama asli tag. Korespondensi file ini akan digunakan untuk secara langsung mengeluarkan nama label yang dapat dibaca ketika model diprediksi.
Menggunakan antarmuka yang disediakan oleh Fancy-NLP, kami dapat secara langsung memuat dataset dan memprosesnya ke dalam format yang diperlukan oleh model.
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 mengimplementasikan pemuatan data klasifikasi teks yang efektif. Anda dapat secara langsung menggunakan jalur file data (set pelatihan, set validasi atau set tes) untuk dimuat sebagai parameter. Data lengkap digunakan di sini untuk membagi set pelatihan, set validasi dan set tes. Selain file data, makna spesifik dari parameter yang tersisa di atas adalah:
label_index : posisi tag klasifikasi dalam file data (nomor posisi dimulai dari 0);text_index : Lokasi teks yang akan diklasifikasikan dalam file data;delimiter : Pemisah antara kolom file data;split_mode : Menunjukkan cara membagi data asli dengan mengubah parameter. di dalam:split_size : Rasio Divisi Data. Ketika split_mode=1 , itu berarti bahwa data yang membagi rasio split_size dari data asli akan digunakan sebagai set verifikasi; Ketika split_mode=2 , itu berarti bahwa data yang membagi rasio split_size dari data asli akan digunakan sebagai jumlah set verifikasi dan set tes, dan proporsi set verifikasi dan tes set setiap akun untuk setengahnya. Setelah mendapatkan data yang valid, aplikasi klasifikasi teks dapat mulai melatih model secara langsung.
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 ) Untuk antarmuka fit dari aplikasi klasifikasi teks, Anda harus lulus dalam set pelatihan dan sampel set validasi yang telah diproses sebelumnya. Makna parameter yang tersisa adalah sebagai berikut:
text_classification_model_type : Menunjukkan nama model yang akan digunakan. Dalam contoh ini, model cnn digunakan;char_embed_trainable : Apakah kata lapisan vektor dapat disempurnakan. Dalam contoh ini, diatur ke True , menunjukkan bahwa penyempurnaan dapat dilakukan;callback_list : Nama fungsi callback yang perlu digunakan. Fungsi panggilan balik yang digunakan dalam contoh ini adalah:modelcheckpoint : Gunakan fungsi Model Checkpoint. Setelah setiap iterasi, simpan model terlatih;earlystopping : Gunakan fungsi stop awal. Jika kinerja model tidak membaik setelah n bundar iterasi (default n = 5), pelatihan akan berakhir;swa : SWA berarti rata -rata berat stokastik, yang merupakan strategi integrasi model umum yang secara efektif dapat meningkatkan kinerja model. Untuk detail lebih lanjut, silakan merujuk ke pengantar dalam makalah asli;checkpoint_dir : jalur direktori untuk menyimpan file model;model_name : Nama file file model;label_dict_file : File kamus label, yang terdiri dari dua kolom: kolom pertama adalah nama asli label dalam set data, biasanya beberapa ID yang dikodekan; Kolom kedua adalah nama yang dapat dibaca yang sesuai dengan nama asli label;max_len : Untuk panjang maksimum yang ditahan oleh teks input, teks di luar panjang itu akan dipotong;load_swa_model : Apakah akan memuat berat model SWA setelah model dilatih. Diatur ke True di sini, menunjukkan penggunaan model SWA; text_classification_app . score ( test_data , test_labels ) Di sini Anda dapat secara langsung menggunakan antarmuka score dari aplikasi klasifikasi teks untuk mendapatkan skor model dalam set tes.
Setelah melatih model, semua file terkait model yang diperlukan oleh tugas perlu disimpan untuk memfasilitasi penggunaan model yang dilatih Fancy-NLP di aplikasi eksternal lainnya.
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' )) Antarmuka save dari Aplikasi Klasifikasi Teks dapat digunakan untuk mempertahankan file struktur model (JSON), file berat (HDF5) dan hasil terkait preprocessing (acar):
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' )) Pada saat ini, text_classification_app sudah memiliki kemampuan untuk memprediksi sampel, dan Anda dapat menyelesaikan fungsi prediksi yang relevan yang disebutkan dalam panduan pengantar . Misalnya, predict , analyze .
Kami masih menggunakan dataset pencocokan pertanyaan layanan pelanggan Webank yang disebutkan di atas sebagai contoh untuk memperkenalkan cara menggunakan dataset yang ada untuk melatih model pencocokan kesamaan teks kami sendiri. Untuk versi lengkap dari semua cuplikan kode berikut, silakan merujuk ke examples/spm_example.py .
Dalam Fancy-NLP, aplikasi tugas yang cocok dengan teks mendukung penggunaan teks asli dalam format dataset yang dipisahkan oleh t , yang terdiri dari tiga kolom: kolom pertama dan kolom kedua masing-masing adalah satu set pasangan teks; Kolom ketiga adalah label sampel, 1 berarti semantik teks serupa, dan 0 berarti berbeda.
Menggunakan antarmuka yang disediakan oleh Fancy-NLP, kami dapat secara langsung memuat dataset dan memprosesnya ke dalam format yang diperlukan oleh model.
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 mengimplementasikan pemuatan yang efektif dari set data kesamaan teks. Anda dapat secara langsung menggunakan jalur file data (set pelatihan, set validasi atau set tes) untuk dimuat sebagai parameter.
Setelah mendapatkan data yang valid, aplikasi pencocokan kesamaan teks dapat mulai melatih model secara langsung.
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 ) Untuk antarmuka fit aplikasi yang cocok dengan teks, Anda perlu lulus dalam pelatihan dan sampel set validasi yang telah diproses sebelumnya. Arti parameter yang tersisa adalah sebagai berikut:
spm_model_type : Menunjukkan nama model yang akan digunakan. Dalam contoh ini, model siamese_cnn digunakan;word_embed_trainable : Apakah kata lapisan vektor dapat disempurnakan. Dalam contoh ini, diatur ke True , menunjukkan bahwa penyempurnaan dapat dilakukan;callback_list : Nama fungsi callback yang perlu digunakan. Fungsi panggilan balik yang digunakan dalam contoh ini adalah:modelcheckpoint : Gunakan fungsi Model Checkpoint. Setelah setiap iterasi, simpan model terlatih;earlystopping : Gunakan fungsi stop awal. Jika kinerja model tidak membaik setelah n bundar iterasi (default n = 5), pelatihan akan berakhir;swa : SWA berarti rata -rata berat stokastik, yang merupakan strategi integrasi model umum yang secara efektif dapat meningkatkan kinerja model. Untuk detail lebih lanjut, silakan merujuk ke pengantar dalam makalah asli;checkpoint_dir : jalur direktori untuk menyimpan file model;model_name : Nama file file model;max_len : Untuk panjang maksimum yang ditahan oleh teks input, teks di luar panjang itu akan dipotong;load_swa_model : Apakah akan memuat berat model SWA setelah model dilatih. Diatur ke True di sini, menunjukkan penggunaan model 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 ) Di sini Anda dapat secara langsung menggunakan antarmuka score aplikasi kesamaan teks untuk mendapatkan skor model dalam set tes.
Setelah melatih model, semua file terkait model yang diperlukan oleh tugas perlu disimpan untuk memfasilitasi penggunaan model yang dilatih Fancy-NLP di aplikasi eksternal lainnya.
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' )) Antarmuka save dari Aplikasi Pencocokan Kesamaan Teks dapat digunakan untuk bertahan dari File Struktur Model (JSON), File Berat (HDF5) dan Hasil Terkait Preprocessing (Pickle):
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' )) Pada saat ini, spm_app sudah memiliki kemampuan untuk memprediksi sampel, dan Anda dapat terus menyelesaikan fungsi prediksi yang relevan yang disebutkan dalam panduan pengantar . Misalnya, predict , analyze .
FACNY-NLP menyediakan berbagai metode untuk menggunakan model Bert :
Untuk menggunakan Bert di Fancy-NLP, Anda hanya perlu mengunduh model BERT pra-terlatih (seperti model Bert Cina yang disediakan oleh Google, model Ernie yang disediakan oleh Baidu (Kode Ekstraksi: IQ74), dan model Bert-WWM yang disediakan oleh Harbin Institute of Technology). Setelah itu, Anda dapat melewati jalur file kosa kata, file konfigurasi, dan model model Model Bert ke dalam metode fit dari aplikasi yang relevan. Berikut ini adalah contoh aplikasi pengenalan entitas. Untuk kode contoh lengkap, silakan merujuk ke examples/bert_fine_tuning.py , examples/bert_single.py , dan examples/bert_combination.py .
Perhatikan bahwa model Bert hanya dapat digunakan dengan vektor karakter, bukan dengan vektor kata.
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 )Dalam cuplikan kode di atas, penting untuk dicatat:
ner_model_type : Atur tipe model ke bert ;use_char : Set untuk tidak menggunakan vektor tingkat karakter;use_word : Set untuk tidak menggunakan vektor tingkat kata sebagai input tambahan;use_bert : Saat menyempurnakan model Bert, atur untuk hanya menggunakan input Bert ,;bert_vocab_file , bert_config_file , bert_checkpoint_file : Jalur ke file terkait model Bertbert_trainable : Setel parameter model Bert ke keadaan yang dapat dilatih, yaitu penyetelan;optimizer : Atur pengoptimal untuk model Bert. Dalam menyempurnakan model BerT, tingkat pembelajaran pengoptimal perlu disesuaikan ke tingkat yang lebih kecil. 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 )Dalam cuplikan kode di atas, penting untuk dicatat:
ner_model_type : Atur tipe model ke bilstm_cnn , dan model non-BERT harus digunakan di sini;use_char : Set untuk tidak menggunakan vektor tingkat karakter;use_word : Set untuk tidak menggunakan vektor tingkat kata sebagai input tambahan;use_bert : Set untuk hanya menggunakan vektor Bert sebagai input fitur;bert_vocab_file , bert_config_file , bert_checkpoint_file : Jalur ke file terkait model Bertbert_trainable : Atur parameter model Bert ke keadaan yang tidak dapat dilatih, dan juga dimungkinkan untuk mengaturnya ke True di sini;optimizer : Atur pengoptimal. Jika model BET dapat dilatih, disarankan untuk menyesuaikan laju pembelajaran pengoptimal ke yang lebih kecil. 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 )Dalam cuplikan kode di atas, penting untuk dicatat:
ner_model_type : Atur tipe model ke bilstm_cnn , dan model non-BERT harus digunakan di sini;use_char : atur vektor level karakter;use_word : Set untuk tidak menggunakan vektor tingkat kata sebagai input tambahan;use_bert : Atur penggunaan Bert Vector, yang menggabungkan vektor kata dan vektor Bert sebagai input fitur;bert_vocab_file , bert_config_file , bert_checkpoint_file : Jalur ke file terkait model Bertbert_trainable : Atur parameter model Bert ke keadaan yang dapat dilatih, dan juga dimungkinkan untuk mengaturnya menjadi False di sini;optimizer : Atur pengoptimal. Jika model BET dapat dilatih, disarankan untuk menyesuaikan laju pembelajaran pengoptimal ke yang lebih kecil. Pengembang yang tertarik untuk meningkatkan kode NLP mewah harus mengikuti spesifikasi berikut untuk mengirimkan permintaan tarik:
Jika Anda menggunakan NLP mewah selama proses penelitian terkait, Anda dapat menambahkan yang berikut ini ke daftar kutipan
@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}
}▴ Kembali ke atas
Proyek ini terinspirasi oleh banyak proyek open source yang sangat baik, terutama Keras. Seperti Slogan Keras: Pembelajaran yang mendalam untuk manusia , kami berharap NLP mewah adalah NLP untuk manusia , terutama di bidang Cina.