【发布时间】:2020-12-24 02:20:23
【问题描述】:
我目前正在训练用于多标签文本分类的 SpaCy 模型。有6个标签:愤怒、期待、厌恶、恐惧、喜悦、悲伤、惊讶和信任。数据集超过 200k。但是,每个 epoch 需要 4 个小时。我想知道是否有一种方法可以优化训练并更快地完成,也许我在这里跳过了一些可以改进模型的东西。
培训数据
TRAIN_DATA = list(zip(train_texts, [{"cats": cats} for cats in final_train_cats]))
[...
{'cats': {'anger': 1,
'anticipation': 0,
'disgust': 0,
'fear': 0,
'joy': 0,
'sadness': 0,
'surprise': 0,
'trust': 0}}),
('mausoleum',
{'cats': {'anger': 1,
'anticipation': 0,
'disgust': 0,
'fear': 0,
'joy': 0,
'sadness': 0,
'surprise': 0,
'trust': 0}}),
...]
培训
nlp = spacy.load("en_core_web_sm")
category = nlp.create_pipe("textcat", config={"exclusive_classes": True})
nlp.add_pipe(category)
# add label to text classifier
category.add_label("trust")
category.add_label("fear")
category.add_label("disgust")
category.add_label("surprise")
category.add_label("anticipation")
category.add_label("anger")
category.add_label("joy")
optimizer = nlp.begin_training()
losses = {}
for i in range(100):
random.shuffle(TRAIN_DATA)
print('...')
for batch in minibatch(TRAIN_DATA, size=8):
texts = [nlp(text) for text, entities in batch]
annotations = [{"cats": entities} for text, entities in batch]
nlp.update(texts, annotations, sgd=optimizer, losses=losses)
print(i, losses)
...
0 {'parser': 0.0, 'tagger': 27.018985521040854, 'textcat': 0.0, 'ner': 0.0}
...
1 {'parser': 0.0, 'tagger': 27.01898552104131, 'textcat': 0.0, 'ner': 0.0}
...
【问题讨论】:
标签: python performance machine-learning spacy