我对 NER 和 NLP 总体来说是新手,我想知道我是否正确理解了这些材料。 例如,我有预训练的模型“ner-english-large”。 我正在使用一个模型,结果发现该模型无法识别正确的实体。
(在此示例中,“Dsl”未标记为 ORG)
from flair.data import Sentence
from flair.models import SequenceTagger
from flair.data import Corpus
from flair.trainers import ModelTrainer
tagger = SequenceTagger.load("flair/ner-english-large")
sentence = Sentence("Dsl hit 100% success in sales across all the world")
tagger.predict(sentence)
sentence.get_spans('ner')
#output
[]
所以我想改进我的模型。 我正在以适当的格式将这句话上传到语料库。
columns = {0 : 'text', 1 : 'ner'}
data_folder = "train"
corpus: Corpus = ColumnCorpus(data_folder, columns)
label_type = 'ner'
label_dict = corpus.make_label_dictionary(label_type=label_type)
然后我正在初始化
trainer
tagger = SequenceTagger.load("flair/ner-english-large")
trainer = ModelTrainer(tagger, corpus)
但是在此之后我对下一步应该做什么有点困惑。 在此之前,我尝试过
train
方法并且有效。数据(之前被错误识别的数据)根据需要被识别。
trainer.train('fine/taggers/continued_model',
learning_rate=0.01,
mini_batch_size=32,
max_epochs=6)
但我不知道这是正确的方法还是我需要使用
fine-tune
?您能解释一下哪种方法更正确吗?
培训后,您可以例如:保存模型。
方法
fine_tune
和train
非常相似——它们使用不同的超参数进行训练。因此,如果您不提供训练参数,那么 fine_tune
方法通常应该给出更好的结果。