Ein Scikit-Learn-Wrapper zum Bert-Modell von Google für Text- und Token-Sequenzaufgaben basierend auf dem Pytorch-Anschluss.
SciBERT und BioBERT -Vorbereitungsmodelle für wissenschaftliche und biomedizinische Bereiche.Probieren Sie Google Colab aus!
Benötigt Python> = 3,5 und Pytorch> = 0.4.1
git clone -b master https://github.com/charles9n/bert-sklearn
cd bert-sklearn
pip install . model.fit(X,y) dh Finetune BERT
X : List, Pandas DataFrame oder Numpy -Array von Text, Textpaaren oder Token -Listen
y : List, Pandas DataFrame oder Numpy -Array von Labels/Zielen
from bert_sklearn import BertClassifier
from bert_sklearn import BertRegressor
from bert_sklearn import load_model
# define model
model = BertClassifier () # text/text pair classification
# model = BertRegressor() # text/text pair regression
# model = BertTokenClassifier() # token sequence classification
# finetune model
model . fit ( X_train , y_train )
# make predictions
y_pred = model . predict ( X_test )
# make probabilty predictions
y_pred = model . predict_proba ( X_test )
# score model on test data
model . score ( X_test , y_test )
# save model to disk
savefile = '/data/mymodel.bin'
model . save ( savefile )
# load model from disk
new_model = load_model ( savefile )
# do stuff with new model
new_model . score ( X_test , y_test )Siehe Demo -Notizbuch.
# try different options...
model . bert_model = 'bert-large-uncased'
model . num_mlp_layers = 3
model . max_seq_length = 196
model . epochs = 4
model . learning_rate = 4e-5
model . gradient_accumulation_steps = 4
# finetune
model . fit ( X_train , y_train )
# do stuff...
model . score ( X_test , y_test )Siehe Optionen
from sklearn . model_selection import GridSearchCV
params = { 'epochs' :[ 3 , 4 ], 'learning_rate' :[ 2e-5 , 3e-5 , 5e-5 ]}
# wrap classifier in GridSearchCV
clf = GridSearchCV ( BertClassifier ( validation_fraction = 0 ),
params ,
scoring = 'accuracy' ,
verbose = True )
# fit gridsearch
clf . fit ( X_train , y_train )Siehe Demo_Tuning_Hyperparameters Notebook.
Die Zug- und Entwicklungsdatensätze aus den T-Leiter-Benchmarks (generalisierte Sprachverständnis-Bewertung) wurden mit bert-base-uncased Modell verwendet und mit den angegebenen Ergebnissen in Google Paper und Kleberleiter erneut verglichen.
| MNLI (m/mm) | QQP | Qnli | SST-2 | Cola | STS-B | MRPC | Rte | |
|---|---|---|---|---|---|---|---|---|
| Bert Base (Rangliste) | 84.6/83.4 | 89,2 | 90.1 | 93.5 | 52.1 | 87.1 | 84,8 | 66,4 |
| Bert-Sklearn | 83.7/83.9 | 90.2 | 88,6 | 92.32 | 58.1 | 89.7 | 86,8 | 64.6 |
Einzelläufe finden Sie hier.
NER-Ergebnisse für die gemeinsame Aufgabe CoNLL-2003
| Dev F1 | Test F1 | |
|---|---|---|
| Bert Paper | 96,4 | 92.4 |
| Bert-Sklearn | 96.04 | 91.97 |
Span -Level -Statistiken beim Test:
processed 46666 tokens with 5648 phrases ; found: 5740 phrases ; correct: 5173.
accuracy: 98.15% ; precision: 90.12% ; recall: 91.59% ; FB1: 90.85
LOC: precision: 92.24% ; recall: 92.69% ; FB1: 92.46 1676
MISC: precision: 78.07% ; recall: 81.62% ; FB1: 79.81 734
ORG: precision: 87.64% ; recall: 90.07% ; FB1: 88.84 1707
PER: precision: 96.00% ; recall: 96.35% ; FB1: 96.17 1623 Siehe NER_English Notebook für eine Demo mit dem Modell mit 'bert-base-cased' .
NER-Ergebnisse unter Verwendung von Bert-Sklearn mit SciBERT und BioBERT über die Aufgabe NCBI disease Corpus .
Die vorherige SOTA für diese Aufgabe beträgt 87,34 für F1 im Testsatz.
| Test F1 (Bert-Sklearn) | Test F1 (aus Papieren) | |
|---|---|---|
| Bert -Basisgehäuse | 85.09 | 85.49 |
| Scibert BaseVocab Case | 88.29 | 86.91 |
| Scibert Scivocab -Gehäuse | 87.73 | 86,45 |
| Biobert PubMed_v1.0 | 87,86 | 87.38 |
| Biobert PubMed_PMC_V1.0 | 88.26 | 89.36 |
| Biobert PubMed_v1.1 | 87,26 | N / A |
Siehe NER_NCBI_DISEASE_BIOBERT_SCIBERT -Notizbuch für eine Demo unter Verwendung von SciBERT und BioBERT -Modellen.
Weitere Informationen zu den jeweiligen Modellen finden Sie unter Scibert Paper und Biobert Paper.
In der Internet Movie Database Review Sentiment -Aufgabe finden Sie eine Textklassifizierungs -Demo im IMDB -Notizbuch für eine Textklassifizierung.
Eine Demo zum syntaktischen Chunking unter Verwendung der CoNLL-2000 Chunking-Aufgabendaten finden Sie unter Chunking_English Notebook.
Siehe Ner_chinese-Notizbuch für eine Demo mit 'bert-base-chinese' für chinesisches Ner.
Führen Sie Tests mit PyTest aus:
python -m pytest -sv tests/ Google BERT Github und Papier: "Bert: Vorausbildung von tiefen bidirektionalen Transformatoren für das Sprachverständnis" (10/2018) von J. Devlin, M. Chang, K. Lee und K. Toutanova
pytorch-pretrained-BERT Github
SciBERT Github und Papier: "Scibert: Pretrainierte kontextualisierte Einbettungen für wissenschaftlichen Text" (3/2019) von I. Beltagy, A. Cohan und K. Lo
BioBERT Github und Papier: "Biobert: Ein vorgebildetes Modell für biomedizinische Texte für biomedizinische Sprache für biomedizinisches Textmining" (2/2019) von J. Lee, W. Yoon, S. Kim, D. Kim, S. Kim, Ch SO und J. Kang