Huggingface Pytorch 포트를 기반으로 텍스트 및 토큰 시퀀스 작업을위한 Google의 Bert 모델을 Finetune에 대한 Scikit-Learn 래퍼.
SciBERT 및 BioBERT 사전 제한 모델을 포함합니다.Google Colab에서 시도하십시오!
Python> = 3.5 및 Pytorch> = 0.4.1이 필요합니다
git clone -b master https://github.com/charles9n/bert-sklearn
cd bert-sklearn
pip install . model.fit(X,y) IE FINETUNE BERT
X : List, Pandas Dataframe 또는 Numpy 텍스트 배열, 텍스트 쌍 또는 토큰 목록
y : List, Pandas Dataframe 또는 Numpy Labels/Targets 배열
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 )데모 노트북을 참조하십시오.
# 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 )옵션을 참조하십시오
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 )demo_tuning_hyperparameters 노트북을 참조하십시오.
접착제 (일반화 된 언어 이해 평가) 벤치 마크의 열차 및 개발 데이터 세트는 bert-base-uncased 모델과 함께 사용되었으며 Google 논문 및 접착제 리더 보드에서보고 된 결과를 다시 비교했습니다.
| mnli (m/mm) | QQP | qnli | SST-2 | 콜라 | STS-B | MRPC | RTE | |
|---|---|---|---|---|---|---|---|---|
| 버트베이스 (리더 보드) | 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 |
개별 달리기는 여기에서 찾을 수 있습니다.
CoNLL-2003 공유 작업에 대한 NER 결과
| Dev F1 | 테스트 f1 | |
|---|---|---|
| 버트 종이 | 96.4 | 92.4 |
| Bert-Sklearn | 96.04 | 91.97 |
테스트시 범위 수준 통계 :
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 'bert-base-cased' 모델을 사용한 데모는 Ner_english 노트북을 참조하십시오.
NCBI disease Corpus 이름 인식 작업에서 SciBERT 및 BioBERT 사용한 Bert-Sklearn을 사용한 결과.
이 작업의 이전 SOTA는 테스트 세트에서 F1의 경우 87.34 입니다.
| 테스트 F1 (Bert-Sklearn) | 테스트 F1 (논문에서) | |
|---|---|---|
| 버트베이스가 케이스 | 85.09 | 85.49 |
| scibert basevocab cased | 88.29 | 86.91 |
| Scibert Scivocab Case | 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 | NA |
SciBERT 및 BioBERT 모델을 사용한 데모는 NER_NCBI_DISEASE_BIOBERT_SCIBERT 노트북을 참조하십시오.
각 모델에 대한 자세한 내용은 Scibert 용지 및 Biobert 용지를 참조하십시오.
인터넷 영화 데이터베이스 검토 감정 작업의 텍스트 분류 데모는 IMDB 노트북을 참조하십시오.
CoNLL-2000 청킹 작업 데이터를 사용하여 구문 청크에 대한 데모는 chunking_english 노트북을 참조하십시오.
중국 NER의 'bert-base-chinese' 사용하여 데모는 Ner_chinese 노트북을 참조하십시오.
Pytest와 함께 테스트 실행 :
python -m pytest -sv tests/ Google BERT Github 및 Paper : "Bert : 언어 이해를위한 깊은 양방향 변압기의 사전 훈련"(10/2018) By J. Devlin, M. Chang, K. Lee 및 K. Toutanova
Huggingface pytorch-pretrained-BERT github
SciBERT github 및 종이 : "Scibert : 과학적 텍스트를위한 사전 텍스트 삽입 된 임베드"(3/2019)의 I. Beltagy, A. Cohan 및 K. Lo.
BioBERT Github 및 Paper : "Biobert : 생물 의학 텍스트 마이닝을위한 미리 훈련 된 생물 의학 언어 표현 모델"(2/2019) By J. Lee, W. Yoon, S. Kim, D. Kim, S. Kim, Chang