Я использую обученный алгоритм Spacy для идентификации названных объектов в тексте. В python у меня есть набор данных, как в примере:
TRAIN_DATA = [
('Estado de Mato Grosso do Sul', {
'entities': [(0, 28, 'LOC')]
}),
('Poder Judiciario', {
'entities': [(0, 16, 'ORG')]
}),
('Campo Grande', {
'entities': [(0, 12, 'LOC')]
}),
('Exequente: Fundo de Investimento em Direitos Creditérios Multsegmentos NPL', {
'entities': [(11, 74, 'MISC')]
}),
('Ipanema VI - Nao Padronizado', {
'entities': [(0, 10, 'LOC')]
}),
...
Продолжение набора данных ... После того, как я запустил обучение следующим образом:
# add labels
for _, annotations in TRAIN_DATA:
for ent in annotations.get('entities'):
ner.add_label(ent[2])
# get names of other pipes to disable them during training
other_pipes = [pipe for pipe in nlp.pipe_names if pipe != 'ner']
with nlp.disable_pipes(*other_pipes): # only train NER
optimizer = nlp.begin_training()
for itn in range(n_iter):
random.shuffle(TRAIN_DATA)
losses = {}
for text, annotations in tqdm(TRAIN_DATA):
nlp.update(
[text], # batch of texts
[annotations], # batch of annotations
drop=0.5, # dropout - make it harder to memorise data
sgd=optimizer, # callable to update weights
losses=losses)
print(losses)
# test the trained model
for text, _ in TRAIN_DATA:
doc = nlp(text)
print('Entities', [(ent.text, ent.label_) for ent in doc.ents])
жирный itali c
Я предполагаю, что обучение и тестирование выполняются в одном наборе данных. Это было бы не идеально, я хотел бы поделиться обучением и тестированием моего набора данных. Или создать набор данных только для тестирования, но как я могу использовать тот же алгоритм, обученный ранее? Как я могу сделать один из двух способов?