Как увеличить скорость этой нер-модели, реализованной с нуля, используя 1 миллион помеченных предложений - PullRequest
0 голосов
/ 04 мая 2019

Я бы хотел использовать модель NER в Spacy для обучения модели с нуля, используя 1 миллион предложений.Модель имеет только два типа объектов.Это код, который я использую.Поскольку я не могу поделиться данными, я создал фиктивный набор данных.

Моя главная проблема в том, что тренировка модели занимает слишком много времени.Я был бы признателен, если бы вы могли выделить любую ошибку в моем коде или предложить другие методы, чтобы попытаться ускорить обучение.

TRAIN_DATA = [ ('Ich bin in Bremen', {'entities': [(11, 17, 'loc')]})] * 1000000



import spacy
import random
from spacy.util import minibatch, compounding

def train_spacy(data,iterations):
    TRAIN_DATA = data
    nlp = spacy.blank('de')  
    if 'ner' not in nlp.pipe_names:
        ner = nlp.create_pipe('ner')
        nlp.add_pipe(ner, last=True)


    # add labels
    for _, annotations in TRAIN_DATA:
         for ent in annotations.get('entities'):
            ner.add_label(ent[2])

    other_pipes = [pipe for pipe in nlp.pipe_names if pipe != 'ner']
    with nlp.disable_pipes(*other_pipes):  
        optimizer = nlp.begin_training()
        for itn in range(iterations):
            print("Statring iteration " + str(itn))
            random.shuffle(TRAIN_DATA)
            losses = {}  
            batches = minibatch(TRAIN_DATA, size=compounding(100, 64.0, 1.001))
            for batch in batches:        
                texts, annotations = zip(*batch)
                nlp.update(texts, annotations, sgd=optimizer, drop=0.35, losses=losses)
            print("Losses", losses)

    return nlp



model = train_spacy(TRAIN_DATA, 20)



Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...