我正在尝试将spacy的“预训练”功能用于NER任务,所以这是我尝试做的事情(我仍在尝试使用它),
步骤1:首先,我使用“ en_core_web_lg”初始化模型,然后将该模型保存到磁盘,并在几行中测试了其NER功能,以查看它是否能够识别这些测试行中的标签。 (记下被忽略的标签)
步骤2:接下来,我创建了一个.jsonl文件,其中包含要训练的新数据(大约20条新行,我想通过给定围绕实体的新数据来查看模型的功能(之前发现的忽略标记) )在进行迁移学习后将能够正确识别标签)。因此,使用此.jsonl和我保存的较早文件的模型时,我使用了'spacy pre-train'命令进行训练,这为我创建了一个token2vec .bin文件(model999.bin)。
第3步:接下来,我创建了一个函数,该函数获取早期保存的模型(在第1步中保存的模型)的位置和token2vec(在第2步中获得的model999.bin文件)的位置。在函数内部加载模型>创建/获取管道>禁用其余文件>使用(pipe_name).model.tok2vec.from_bytes(file_.read())从model999.bin读取并将学习到的向量广播到基本模型
但是当我运行此功能时,出现此错误:
ValueError: could not broadcast input array from shape (96,3,384) into shape (96,3,480)
(我已将整个笔记本上传到此处:[https://github.com/pratikdk/ner_test/blob/master/base_model_contextual_TF.ipynb])。
为了进行预训练,我使用了此功能
python -m spacy pre-train ub.jsonl model_saves w2s
这是我尝试在基本模型之上训练的20条线 [https://github.com/pratikdk/ner_test/blob/master/ub.jsonl]
我到底在做什么错?请您也指出解决办法,我相信很多人都需要对此进行深入了解。
答案 0 :(得分:0)
所以我能够解决这个问题,开发人员(在github上)回答了我的问题。 答案是: https://github.com/explosion/spaCy/issues/3616