【问题标题】:Training 'en_core_web_sm' model of Spacy v2.0.11 failsSpacy v2.0.11 的“en_core_web_sm”模型训练失败
【发布时间】:2020-12-22 08:41:16
【问题描述】:

我正在尝试使用以下代码训练 en_core_web_sm 模型以添加新实体 EMAIL:

LABEL = "EMAIL"
    TRAIN_DATA = [
        (
            "My email address is XXXX@gmail.com",
            {"entities": [(20, 37, LABEL)]},
        ),
        ("you can email me @ XXXXX@ai.xXx.com?", {"entities": [(19, 36, LABEL)]}),
        (
            "contact me @ XXXX@ai.xXX.com",
            {"entities": [(13, 31, LABEL)]},
        ),
    ("you can contact me at xxXX@xxXXX.com", {"entities": [(22, 56, LABEL)]})
    ]

def main(model="en_core_web_sm", new_model_name="en_core_web_sm", output_dir="D:/Train_ai", n_iter=8):
    random.seed(0)
    if model is not None:
        nlp = spacy.load('en_core_web_sm')  
        print("Loaded model '%s'" % model)
    else:
        nlp = spacy.blank("en") 
        print("Created blank 'en' model")
    if "ner" not in nlp.pipe_names:
        ner = nlp.create_pipe("ner")
        nlp.add_pipe(ner)
    else:
        ner = nlp.get_pipe("ner")

    ner.add_label(LABEL)  
    ner.add_label("VEGETABLE")
    if model is None:
        optimizer = nlp.begin_training()
    else:
        optimizer = nlp.resume_training()   

我得到的错误是:

AttributeError: 'English' object has no attribute 'resume_training'" on line optimizer = nlp.resume_training()

【问题讨论】:

    标签: nlp spacy named-entity-recognition


    【解决方案1】:

    如here 所述,resume_training 属性仅在 spaCy v2.1.x 中添加。看起来您正在运行旧版本 v2.0.11。所以你要么必须升级你的 spaCy 安装,要么重写你的代码以不使用resume_training。要查看给定版本的代码示例,您可以导航到 GitHub 上的相应标签。比如see here最新v2.0.x的代码示例。

    【讨论】:

      【解决方案2】:

      正如@Ines 所指出的,Spacy 2.0.x 不支持resume_training。但是您仍然可以通过简单地替换此行来恢复检查点的训练:

      optimizer =  nlp.resume_training()
      

      用这一行:

      optimizer = nlp.entity.create_optimizer()
      

      然后,当 nlp.update() 在最后训练实际开始时,将其传递给 sgd 参数,如下所示:

      nlp.update(
                      texts,  # batch of texts
                      annotations,  # batch of annotations
                      sgd=optimizer,
                      drop=0,   # dropout - make it harder to memorise data
                      losses=losses, 
                  )
      

      恢复训练有助于各种任务,例如微调/添加新实体/在中断时重新开始训练。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-15
        • 1970-01-01
        • 2018-06-13
        • 2020-03-02
        相关资源
        最近更新 更多