ner bert
1.0.0
Есть два решения на основе этой архитектуры.
Этот репозиторий содержит решение задачи NER, основанное на повторном реумпрессии Pytorch репозитория Tensorflow от Google для модели BERT, которая была выпущена вместе с бумагой Bert: предварительное обучение глубоких двунаправленных трансформаторов для понимания языка Джейкобом Девлином, Ming-Wei Chang, Kenton Lee и Kristina Toutanova.
Эта реализация может загрузить любую предварительно обученную контрольную точку TensorFlow для BERT (в частности, предварительно обученные модели Google).
Старая версия в «Старом» филиале.
from modules.data import bert_data
data = bert_data.LearnData.create(
train_df_path=train_df_path,
valid_df_path=valid_df_path,
idx2labels_path="/path/to/vocab",
clear_cache=True
)
from modules.models.bert_models import BERTBiLSTMAttnCRF
model = BERTBiLSTMAttnCRF.create(len(data.train_ds.idx2label))
from modules.train.train import NerLearner
num_epochs = 100
learner = NerLearner(
model, data, "/path/for/save/best/model", t_total=num_epochs * len(data.train_dl))
from modules.data.bert_data import get_data_loader_for_predict
learner.load_model()
dl = get_data_loader_for_predict(data, df_path="/path/to/df/for/predict")
preds = learner.predict(dl)
from sklearn_crfsuite.metrics import flat_classification_report
from modules.analyze_utils.utils import bert_labels2tokens, voting_choicer
from modules.analyze_utils.plot_metrics import get_bert_span_report
from modules.analyze_utils.main_metrics import precision_recall_f1
pred_tokens, pred_labels = bert_labels2tokens(dl, preds)
true_tokens, true_labels = bert_labels2tokens(dl, [x.bert_labels for x in dl.dataset])
tokens_report = flat_classification_report(true_labels, pred_labels, digits=4)
print(tokens_report)
results = precision_recall_f1(true_labels, pred_labels)
Мы не искали лучшие параметры и получили следующие результаты.
| Модель | Набор данных | Dev F1 Tok | Dev F1 Span | Тест F1 Tok | Тест F1 -пролет |
|---|---|---|---|---|---|
| Наш | |||||
| M-BERTCRF-IO | Factrueval | - | - | 0,8543 | 0,8409 |
| M-BERTNCRF-IO | Factrueval | - | - | 0,8637 | 0,8516 |
| M-bertbilstmcrf-io | Factrueval | - | - | 0,8835 | 0,8718 |
| M-BERTBILSTMNCRF-IO | Factrueval | - | - | 0,8632 | 0,8510 |
| M-bertattncrf-io | Factrueval | - | - | 0,8503 | 0,8346 |
| M-bertbilstmattncrf-io | Factrueval | - | - | 0,8839 | 0,8716 |
| M-bertbilstmattnncrf-io | Factrueval | - | - | 0,8807 | 0,8680 |
| M-BERTBILSTMATTNCRF-FIT_BERT-IO | Factrueval | - | - | 0,8823 | 0,8709 |
| M-BERTBILSTMATTNNCRF-FIT_BERT-IO | Factrueval | - | - | 0,8583 | 0,8456 |
| - | - | - | - | - | - |
| Bertbilstmcrf-IO | Conll-2003 | 0,9629 | - | 0,9221 | - |
| B-Bertbilstmcrf-IO | Conll-2003 | 0,9635 | - | 0,9229 | - |
| B-Bertbilstmattncrf-IO | Conll-2003 | 0,9614 | - | 0,9237 | - |
| B-Bertbilstmattnncrf-IO | Conll-2003 | 0,9631 | - | 0,9249 | - |
| Текущий SOTA | |||||
| Deeppavlov-rubert-ner | Factrueval | - | - | - | 0,8266 |
| CSE | Conll-2003 | - | - | 0,931 | - |
| Берт-широкий | Conll-2003 | 0,966 | - | 0,928 | - |
| Берт-баз | Conll-2003 | 0,964 | - | 0,924 | - |