모델 훈련하기
모델 훈련하기
Flair로 NER 모델을 훈련하려면 말뭉치(corpus), 라벨 사전, 임베딩, 태거, 트레이너를 순서대로 준비해요.
최신 NER 시스템을 만들려면 트랜스포머 임베딩을 파인튜닝하고 전체 문서 컨텍스트를 쓰는 걸 권장해요(FLERT 논문).
from flair.datasets import CONLL_03
from flair.embeddings import TransformerWordEmbeddings
from flair.models import SequenceTagger
from flair.trainers import ModelTrainer
corpus = CONLL_03()
label_type = 'ner'
label_dict = corpus.make_label_dictionary(label_type=label_type, add_unk=False)
embeddings = TransformerWordEmbeddings(
model='xlm-roberta-large',
layers="-1",
subtoken_pooling="first",
fine_tune=True,
use_context=True,
)
tagger = SequenceTagger(
hidden_size=256,
embeddings=embeddings,
tag_dictionary=label_dict,
tag_type='ner',
use_crf=False,
use_rnn=False,
reproject_embeddings=False,
)
trainer = ModelTrainer(tagger, corpus)
trainer.fine_tune('resources/taggers/sota-ner-flert',
learning_rate=5.0e-6,
mini_batch_size=4,
mini_batch_chunk_size=1,
)
트랜스포머가 워낙 강력해서 RNN·CRF·reprojection을 꺼도 되고, 아주 작은 학습률로 파인튜닝해요. 파인튜닝 없이 LSTM-CRF를 학습할 수도 있고, 말뭉치와 라벨 타입만 바꾸면 품사 태거도 같은 방식으로 훈련할 수 있어요. ModelTrainer의 train()은 스케줄링된 학습률 감소와 안정화를 제공해요.