NLP für Menschen. Ein schnelles und benutzerfreundliches Toolkit (natürliche Sprachverarbeitung), das Ihre Fantasie über NLP erfüllt.
→ englische Version

Grundlegende Einführung • Installation • Erste Schritte
Fancy-NLP ist ein Tool für das Textkenntnis des Kenntnisses zum Aufbau von Produktporträts, die vom Produktwerbe-Strategie-Team von Tencent erstellt wurden. Es unterstützt eine Vielzahl gemeinsamer NLP -Aufgaben wie Entitätsextraktion, Textklassifizierung und Ähnlichkeitsgleichheit. Im Vergleich zu den aktuellen häufig verwendeten Frameworks in der Branche können Benutzer die schnelle funktionale Implementierung implementieren: Sie kann nicht nur die tiefe Anpassung von Modellen durch fortgeschrittene Benutzer erfüllen, sondern ermöglichen es normalen Benutzern auch, schnell ausgebildete Modelle schnell zu verwenden, um die funktionale Praxis schnell zu üben. Im aktuellen Szenario für Produktwerbung Business verwenden wir dieses Tool, um die Eigenschaften massiver Produktdaten schnell zu untersuchen, wodurch Module wie Werbeproduktempfehlungen unterstützt werden.
Die ursprüngliche Absicht des Projekts ist es, eine Reihe benutzerfreundlicher NLP-Tools bereitzustellen, die direkt auf die Verwendungsszenarien gerichtet sind und die Bedürfnisse der Benutzer nach NLP-Aufgaben erfüllen, sodass Benutzer nicht mit komplexen Vorbereitung zu tun haben, und andere Intermediate-Prozesse und direkt mehrere NLP-Aufgaben für die Eingabe-Natur-Sprache, erkennen, wie sie glauben.
Was ist Phantasie? Für viele aktuelle NLP-Aufgaben, wie die Namens Entity Recognition (NER), die Textklassifizierung und die Entsprechung von Textähnlichkeit (SPM), die die meisten Tools entwickeln, werden die modellischen Schulungen und Bewertungen bevorzugt. Wenn gewöhnliche Nutzer diese Modelle anwenden möchten, müssen diese Modelle auf tatsächliche Geschäftsszenarien übereinstimmen. Jeder Link der NLP-Aufgabe in Fancy-NLP und effizient das Modell auf die tatsächlichen Nachfrageszenarien anwendet.
Fancy-NLP wird derzeit für die Verwendung in Python 3-Umgebungen unterstützt und wurde in Python 3.6 vollständig getestet. TensorFlow 2.x ist vollständig auf die aktuelle Version angewiesen. Wenn Sie Bedenken hinsichtlich der Modulkompatibilität haben, empfehlen wir Ihnen, Virtualenv zu verwenden, um eine virtuelle Umgebung für dieses Tool zu erstellen.
Fancy-NLP unterstützt eine Installation mit einer Klick mit pip :
pip install fancy-nlpIm Erste-Start-Leitfaden werden wir vorgeschriebene Modelle verwenden, um Sie schnell zu verstehen und die grundlegenden Funktionen von Fancy-NLP zu erleben.
Hinweis: Wir werden das Entitätserkennungsmodell mehrerer Szenarien (verschiedene kommentierte Daten), die Benutzer direkt verwenden können, weiter optimieren. Wenn Sie relevante Datensätze haben, können Sie uns auch ein positives Feedback in diesem Problem geben.
Die aktuelle Version von Fancy-NLP kann das NER-Modell laden, das standardmäßig unter Verwendung von MSRA-NER-Teilmengedaten trainiert wird. Es kann Organisationsstrukturen (ORG), Standorte (LOCS) und Personen (Per) in chinesischem Text identifizieren. Das standardmäßig geladene Grundmodell besteht darin, dass Benutzer direkt erleben. Wenn Sie Ihr eigenes maßgeschneidertes Modell direkt verwenden möchten, können Sie sich auf die Einführung im nachfolgenden detaillierten Tutorial verweisen, um Ihr Entitätsextraktionssystem zu erstellen.
> >> from fancy_nlp . applications import NER
> >> ner_app = NER ()Wenn Sie den obigen Code zum ersten Mal ausführen, wird das vorgebildete NER-Modell aus der Cloud heruntergeladen.
> >> 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 wird standardmäßig mit dem in dem aktuell veröffentlichten Datensatz des chinesischen Nachrichten-Titelklassifizierungsdatensatzes ausgebildeten Textklassifizierungsmodell geladen, wodurch die Kategorie der Nachrichten vorhersagen kann, zu der es für den News-Title-Text gehört.
> >> from fancy_nlp . applications import TextClassification
> >> text_classification_app = TextClassification ()Wenn Sie das obige Programm zum ersten Mal ausführen, wird das vorgebildete Modell aus der Cloud heruntergeladen.
> >> text_classification_app . predict ( '苹果iOS占移动互联网流量份额逾65% 位居第一' )
'科技' > >> text_classification_app . analyze ( '苹果iOS占移动互联网流量份额逾65% 位居第一' )
( '科技' , 0.9996544 )Fancy-NLP wird standardmäßig im Text-Ähnlichkeits-Matching-Modell geladen, das im aktuell veröffentlichten Webank-Kundendienstfragebestand ausgebildet ist, der vorhersagen kann, ob es die gleiche Absicht für die bereitgestellten Textpaare ausdrückt.
> >> from fancy_nlp . applications import SPM
> >> spm_app = SPM ()Wenn Sie das obige Programm zum ersten Mal ausführen, wird das vorgeschriebene Text-Ähnlichkeits-Matching-Modell aus der Cloud heruntergeladen.
> >> spm_app . predict (( '未满足微众银行审批是什么意思' , '为什么我未满足微众银行审批' ))
'1' Im Vorhersageergebnis repräsentiert 1 die gleiche Absicht oder einen ähnlichen Text, 0 repräsentiert die unterschiedliche Absicht oder den unterschiedlichen Text.
> >> spm_app . analyze (( '未满足微众银行审批是什么意思' , '为什么我未满足微众银行审批' ))
( '1' , array ([ 1.6599501e-09 , 1.0000000e+00 ], dtype = float32 ))Im detaillierten Tutorial können Sie lernen, wie Sie Fancy-NLP verwenden, um benutzerdefinierte Modelle zu erstellen, die benutzerdefinierte Szenarien mithilfe Ihrer eigenen Datensätze erfüllen, und über ein umfassenderes Verständnis der Schnittstelle von Fancy-NLP verfügen.
Um das folgende Tutorial vollständig zu erleben, müssen Sie das von uns verwendete Datensatz- und Bert -Modell herunterladen:
86geqk7e6rb7 Sie können die heruntergeladenen Daten auf das gleiche Niveau wie das examples verschieben, und die endgültige Verzeichnisstruktur lautet wie folgt:
.
├── 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
Sie können das Beispielprogramm also direkt ausführen. Zum Beispiel python examples/ner_example.py .
Wir verwenden weiterhin die oben genannten MSRA -NER -Subset -Daten, um vorhandene Datensätze einzulegen, um unser eigenes Entitätserkennungsmodell zu schulen. Eine vollständige Version aller folgenden Code -Snippets finden Sie unter examples/ner_example.py .
In Fancy-NLP unterstützen Entitätserkennungsanwendungen die Verwendung von Standard-NER-Datensatzformaten, jedes Zeichen zu identifizieren und sein entsprechendes Tag wird durch t getrennt, und die Sätze werden durch leere Zeilen getrennt. Das Format des Tags kann ein gemeinsames Standardformat wie BIO und BIOES sein.
Mit der von Fancy-NLP bereitgestellten Schnittstelle können wir den Datensatz direkt laden und in das vom Modell erforderliche Format verarbeiten.
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 implementiert das effektive Laden von NER -Datensätzen. Sie können den Dateipfad der Daten (Trainingssatz, Validierungssatz oder Testsatz) direkt verwenden, um als Parameter geladen zu werden. Der Testsatz wird als Validierungssatz verwendet. In den tatsächlichen Aufgaben sollten Sie über ihre eigenen unabhängigen Validierungssätze und Testsätze verfügen, um wertvolle Testbewertungsergebnisse zu erzielen.
Nach Erhalt gültiger Daten kann die NER -Anwendung das Modell direkt mit dem Training beginnen.
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 ) Für die fit der NER -Anwendung müssen Sie die zuvor verarbeiteten Mustersatz- und Validierungssatzproben übergeben. Die Bedeutungen der verbleibenden Parameter sind wie folgt:
ner_model_type : Zeigt den zu verwendenden Modellnamen an. In diesem Beispiel wird das Modell bilstm_cnn verwendet;char_embed_trainable : Ob die Wortvektorebene eine Feinabstimmung sein kann. In diesem Beispiel wird es auf True eingestellt, was darauf hinweist, dass eine Feinabstimmung durchgeführt werden kann.callback_list : Der Name der Rückruffunktion, die verwendet werden muss. Die in diesem Beispiel verwendeten Rückruffunktionen sind:modelcheckpoint : Verwenden Sie die Modell -Checkpoint -Funktion. Speichern Sie nach jeder Iteration das geschulte Modell;earlystopping : Verwenden Sie die frühe Stoppfunktion. Wenn sich die Leistung des Modells nach N -Runden -Iterationen nicht verbessert (Standard n = 5), wird das Training beendet.swa : SWA bedeutet eine stochastische Mittelung des Gewichts, was eine gemeinsame Strategie für Modellintegration ist, die die Leistung des Modells effektiv verbessern kann. Weitere Informationen finden Sie in der Einführung im Originalpapier.checkpoint_dir : Der Verzeichnispfad zum Speichern der Modelldatei;model_name : Der Dateiname der Modelldatei;load_swa_model : Ob das SWA -Modellgewicht nach dem Training des Modells geladen werden soll. Hier auf True eingestellt, wobei die Verwendung des SWA -Modells angezeigt wird; test_data , test_labels = load_ner_data_and_labels ( 'datasets/ner/msra/test_data' )
ner_app . score ( test_data , test_labels ) Hier wird load_ner_data_and_labels weiterhin verwendet, um die Datensatzdaten zu verarbeiten. Verwenden Sie nach Erhalt eines gültigen Datenformats die score -Schnittstelle der NER -Anwendung, um die Punktzahl des Modells im Testsatz zu erhalten.
Nach dem Training des Modells müssen alle von der Aufgabe erforderlichen modellbezogenen Dateien gespeichert werden, um die Verwendung von Fancy-NLP-Modellen in anderen externen Anwendungen zu erleichtern.
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' )) Die save -Schnittstelle der NER -Anwendung kann verwendet werden, um die Strukturdatei (JSON), die Gewichtsdatei (HDF5) und die vorverarbeitungsbezogenen Ergebnisse (Gurke) zu bestehen:
modelcheckpoint -Funktion gespeichert wurde. 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' )) Zu diesem Zeitpunkt hat ner_app bereits die Fähigkeit, Stichproben vorherzusagen, und Sie können die im Einführungshandbuch erwähnten relevanten Vorhersagefunktionen ausfüllen. Zum Beispiel analyze , restrict_analyze , Analyse.
Wir verwenden immer noch den oben genannten chinesischen Datensatz der chinesischen Nachrichten. Eine vollständige Version aller folgenden Code -Snippets finden Sie unter examples/text_classification_example.py .
In Fancy-NLP unterstützen Textklassifizierungsanwendungen Datensatzformate, die von festen Abgrenzern unter Verwendung von Originaltext getrennt sind. Sie können redundante Spalten haben, die unabhängig von Textklassifizierungsaufgaben sind. Sie müssen nur sicherstellen, dass sowohl die Spalte der Etikettenspalte als auch die Spalte Eingabetxt in einer einheitlichen festen Position sind.
Zusätzlich ist für Klassifizierungs -Tags eine Zuordnungsdatei mit Tags und Tag -IDs erforderlich, die aus zwei Spalten besteht: Die erste Spalte ist der ursprüngliche Name des Tags im Datensatz, normalerweise einige codierte IDs; Die zweite Spalte ist der lesbare Name, der dem ursprünglichen Namen des Tags entspricht. Die Korrespondenz dieser Datei wird verwendet, um lesbare Labelnamen direkt auszuführen, wenn das Modell vorhergesagt wird.
Mit der von Fancy-NLP bereitgestellten Schnittstelle können wir den Datensatz direkt laden und in das vom Modell erforderliche Format verarbeiten.
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 implementiert effektives Laden von Textklassifizierungsdatensätzen. Sie können den Dateipfad der Daten (Trainingssatz, Validierungssatz oder Testsatz) direkt verwenden, um als Parameter geladen zu werden. Die vollständigen Daten werden hier verwendet, um den Trainingssatz, den Validierungssatz und den Testsatz zu teilen. Zusätzlich zur Datendatei lautet die spezifische Bedeutung der oben verbleibenden Parameter:
label_index : Die Position des Klassifizierungs -Tags in der Datendatei (Positionsnummer startet ab 0);text_index : Der Ort des Textes, der in die Datendatei klassifiziert werden soll;delimiter : das Trennzeichen zwischen den Spalten der Datendatei;split_mode : Gibt an, wie Sie die Originaldaten durch Ändern der Parameter teilen. In:split_size : Data Division Ratio. Wenn split_mode=1 , bedeutet dies, dass die Daten, die split_size von den Originaldaten teilen, als Überprüfungssatz verwendet werden. Wenn split_mode=2 , bedeutet dies, dass die Daten, die split_size von den Originaldaten teilen, als Summe des Verifizierungssatzes und des Testsatzes sowie die Anteile des Verifizierungssatzes und des Testsatzes für die Hälfte verwendet werden. Nach Erhalt gültiger Daten kann die Textklassifizierungsanwendung das Modell direkt mit dem Training beginnen.
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 ) Für die fit einer Textklassifizierungsanwendung müssen Sie die zuvor verarbeiteten Abbildungs- und Validierungssatzproben übergeben. Die Bedeutungen der verbleibenden Parameter sind wie folgt:
text_classification_model_type : Zeigt den zu verwendenden Modellnamen an. In diesem Beispiel wird das cnn -Modell verwendet;char_embed_trainable : Ob die Wortvektorebene eine Feinabstimmung sein kann. In diesem Beispiel wird es auf True eingestellt, was darauf hinweist, dass eine Feinabstimmung durchgeführt werden kann.callback_list : Der Name der Rückruffunktion, die verwendet werden muss. Die in diesem Beispiel verwendeten Rückruffunktionen sind:modelcheckpoint : Verwenden Sie die Modell -Checkpoint -Funktion. Speichern Sie nach jeder Iteration das geschulte Modell;earlystopping : Verwenden Sie die frühe Stoppfunktion. Wenn sich die Leistung des Modells nach N -Runden -Iterationen nicht verbessert (Standard n = 5), wird das Training beendet.swa : SWA bedeutet eine stochastische Mittelung des Gewichts, was eine gemeinsame Strategie für Modellintegration ist, die die Leistung des Modells effektiv verbessern kann. Weitere Informationen finden Sie in der Einführung im Originalpapier.checkpoint_dir : Der Verzeichnispfad zum Speichern der Modelldatei;model_name : Der Dateiname der Modelldatei;label_dict_file : Eine Label -Wörterbuchdatei, die aus zwei Spalten besteht: Die erste Spalte ist der ursprüngliche Name der Beschriftung im Datensatz, normalerweise einige codierte IDs; Die zweite Spalte ist der lesbare Name, der dem ursprünglichen Namen des Etiketts entspricht.max_len : Für die maximale Länge, die vom Eingabetxt aufbewahrt wird, wird der Text über diese Länge hinausgeschnitten.load_swa_model : Ob das SWA -Modellgewicht nach dem Training des Modells geladen werden soll. Hier auf True eingestellt, wobei die Verwendung des SWA -Modells angezeigt wird; text_classification_app . score ( test_data , test_labels ) Hier können Sie die score der Textklassifizierung direkt verwenden, um die Punktzahl des Modells im Testsatz zu erhalten.
Nach dem Training des Modells müssen alle von der Aufgabe erforderlichen modellbezogenen Dateien gespeichert werden, um die Verwendung von Fancy-NLP-Modellen in anderen externen Anwendungen zu erleichtern.
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' )) Die save -Schnittstelle der Textklassifizierungsanwendungen kann verwendet werden, um die Strukturdatei (JSON), die Gewichtsdatei (HDF5) und die vorverarbeitungsbezogenen Ergebnisse (Gurke) zu bestehen:
modelcheckpoint -Funktion gespeichert wurde. 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' )) Zu diesem Zeitpunkt kann text_classification_app bereits Beispiele vorhersagen, und Sie können die im Einführungshandbuch erwähnten relevanten Vorhersagefunktionen ausfüllen. Zum Beispiel predict , analyze .
Wir verwenden weiterhin den oben genannten Datensatz von Webank -Kundendienstfragen, um ein Beispiel vorzustellen, wie das vorhandene Datensatz verwendet wird, um unser eigenes Text -Ähnlichkeits -Matching -Modell zu schulen. Eine vollständige Version aller folgenden Code -Snippets finden Sie unter examples/spm_example.py .
In Fancy-NLP unterstützt die text Ähnlichkeitsübereinstimmungsanwendung die Verwendung von Originaltext in einem Datensatzformat, das durch t getrennt ist, das aus drei Spalten besteht: Die erste Spalte und die zweite Spalte sind jeweils ein Satz von Textpaaren; Die dritte Spalte ist eine Beispielbezeichnung, 1 bedeutet, dass die Textsemantik ähnlich ist und 0 unähnlich ist.
Mit der von Fancy-NLP bereitgestellten Schnittstelle können wir den Datensatz direkt laden und in das vom Modell erforderliche Format verarbeiten.
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 implementiert effektives Laden von Datensätzen der Textähnlichkeit. Sie können den Dateipfad der Daten (Trainingssatz, Validierungssatz oder Testsatz) direkt verwenden, um als Parameter geladen zu werden.
Nach dem Erhalt gültiger Daten kann die Anwendung mit der textähnlichen Übereinstimmung das Modell direkt mit dem Training beginnen.
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 ) Für die fit -Schnittstelle der textähnlichen Übereinstimmung der Anwendung müssen Sie die zuvor verarbeiteten Trainings- und Validierungssatzproben übergeben. Die Bedeutung der verbleibenden Parameter lautet wie folgt:
spm_model_type : Zeigt den zu verwendenden Modellnamen an. In diesem Beispiel wird das Modell siamese_cnn verwendet;word_embed_trainable : Ob die Wortvektorebene eine Feinabstimmung sein kann. In diesem Beispiel wird es auf True eingestellt, was darauf hinweist, dass eine Feinabstimmung durchgeführt werden kann.callback_list : Der Name der Rückruffunktion, die verwendet werden muss. Die in diesem Beispiel verwendeten Rückruffunktionen sind:modelcheckpoint : Verwenden Sie die Modell -Checkpoint -Funktion. Speichern Sie nach jeder Iteration das geschulte Modell;earlystopping : Verwenden Sie die frühe Stoppfunktion. Wenn sich die Leistung des Modells nach N -Runden -Iterationen nicht verbessert (Standard n = 5), wird das Training beendet.swa : SWA bedeutet eine stochastische Mittelung des Gewichts, was eine gemeinsame Strategie für Modellintegration ist, die die Leistung des Modells effektiv verbessern kann. Weitere Informationen finden Sie in der Einführung im Originalpapier.checkpoint_dir : Der Verzeichnispfad zum Speichern der Modelldatei;model_name : Der Dateiname der Modelldatei;max_len : Für die maximale Länge, die vom Eingabetxt aufbewahrt wird, wird der Text über diese Länge hinausgeschnitten.load_swa_model : Ob das SWA -Modellgewicht nach dem Training des Modells geladen werden soll. Hier auf True eingestellt, wobei die Verwendung des SWA -Modells angezeigt wird; 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 ) Hier können Sie direkt die score zur Übereinstimmung der Text Ähnlichkeitsanpassung verwenden, um die Punktzahl des Modells im Testsatz zu erhalten.
Nach dem Training des Modells müssen alle von der Aufgabe erforderlichen modellbezogenen Dateien gespeichert werden, um die Verwendung von Fancy-NLP-Modellen in anderen externen Anwendungen zu erleichtern.
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' )) Die save der Anwendung der textähnlichen Übereinstimmung der Text -Ähnlichkeit kann verwendet werden, um die Strukturdatei (JSON), die Gewichtsdatei (HDF5) und die vorverarbeitungsbezogenen Ergebnisse (Gurke) zu bestehen:
modelcheckpoint -Funktion gespeichert wurde. 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' )) Zu diesem Zeitpunkt kann spm_app bereits Beispiele vorhersagen, und Sie können die im Einführungshandbuch erwähnten relevanten Vorhersagefunktionen weiterhin ausfüllen. Zum Beispiel predict , analyze .
Facny-NLP bietet verschiedene Methoden zur Verwendung des Bert- Modells:
Um Bert in Fancy-NLP zu verwenden, müssen Sie nur das vorgebildete Bert-Modell (wie das von Google bereitgestellte chinesische Bert-Modell, das von Baidu bereitgestellte Ernie-Modell (Extraktionscode: IQ74) und das vom Harbin Institute of Technology) bereitgestellte Ernie-Modell herunterladen. Danach können Sie den Pfad der Vokabulardatei, der Konfigurationsdatei und der Modelldatei des Bert -Modells in fit Anpassungsmethode der entsprechenden Anwendung übergeben. Das Folgende ist ein Beispiel für die Entitätserkennungsanwendung. Für den vollständigen Beispielcode finden Sie unter examples/bert_fine_tuning.py , examples/bert_single.py und examples/bert_combination.py .
Beachten Sie, dass das Bert -Modell nur mit Zeichenvektoren verwendet werden kann, nicht mit Wortvektoren.
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 )Im obigen Code -Snippet ist es wichtig zu beachten:
ner_model_type : Setzen Sie den Modelltyp auf bert ;use_char : Setzen Sie nicht, dass Vektoren auf Zeichenebene verwendet werden;use_word : Stellen Sie fest, dass Vektoren auf Wortebene als Hilfseingang nicht verwendet werden.use_bert : Wenn Sie das Bert-Modell Feinabstimmung haben, verwenden Sie nur Bert-Eingabe;bert_vocab_file , bert_config_file , bert_checkpoint_file : Der Pfad zu den Bert-Modell-bezogenen Dateienbert_trainable : Setzen Sie die Bert-Modellparameter auf trainierbarer Zustand, dh Feinabstimmung;optimizer : Stellen Sie den Optimierer für das Bert -Modell ein. Bei der Feinabstimmung des Bert-Modells muss die Lernrate des Optimierers auf ein kleineres Niveau angepasst werden. 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 )Im obigen Code -Snippet ist es wichtig zu beachten:
ner_model_type : Setzen Sie den Modelltyp auf bilstm_cnn , und hier muss ein Nichtbert-Modell verwendet werden.use_char : Setzen Sie nicht, dass Vektoren auf Zeichenebene verwendet werden;use_word : Stellen Sie fest, dass Vektoren auf Wortebene als Hilfseingang nicht verwendet werden.use_bert : Setzen Sie, um nur Bert -Vektoren als Feature -Eingabe zu verwenden.bert_vocab_file , bert_config_file , bert_checkpoint_file : Der Pfad zu den Bert-Modell-bezogenen Dateienbert_trainable : Setzen Sie den Bert -Modellparameter auf einen nicht geborenen Zustand, und es ist auch möglich, ihn hier auf True einzustellen.optimizer : Setzen Sie den Optimierer. Wenn das BET -Modell trainierbar ist, wird empfohlen, die Lernrate des Optimierers an eine kleinere anzupassen. 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 )Im obigen Code -Snippet ist es wichtig zu beachten:
ner_model_type : Setzen Sie den Modelltyp auf bilstm_cnn , und hier muss ein Nichtbert-Modell verwendet werden.use_char : Setzen Sie den Vektor auf Zeichenebene;use_word : Stellen Sie fest, dass Vektoren auf Wortebene als Hilfseingang nicht verwendet werden.use_bert : Stellen Sie die Verwendung von Bert -Vektor fest, das Wortvektoren und Bert -Vektoren als Feature -Eingänge kombiniert.bert_vocab_file , bert_config_file , bert_checkpoint_file : Der Pfad zu den Bert-Modell-bezogenen Dateienbert_trainable : Setzen Sie die Bert -Modellparameter in trainierbarem Zustand, und es ist auch möglich, sie hier auf False zu setzen.optimizer : Setzen Sie den Optimierer. Wenn das BET -Modell trainierbar ist, wird empfohlen, die Lernrate des Optimierers an eine kleinere anzupassen. Entwickler, die an der Verbesserung der ausgefallenen NLP -Code interessiert sind, sollten die folgenden Spezifikationen befolgen, um Pull -Anfragen einzureichen:
Wenn Sie während des zugehörigen Forschungsprozesses Fancy NLP verwenden, können Sie der Zitierliste Folgendes hinzufügen
@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}
}▴ Zurück nach oben
Dieses Projekt ist von vielen hervorragenden Open -Source -Projekten inspiriert, insbesondere von Keras. Wie Keras 'Slogan: Deep Learning for Human sagte, hoffen wir, dass Fancy NLP NLP für Human ist, insbesondere im chinesischen Bereich.