使用Spacy空白模型训练时,配置文件中en_core_web_lg向量的作用
关于Spacy训练中
vectors = "en_core_web_lg"的作用疑问 你使用spacy.blank("en")空白模型训练自定义标注的模型,标注数据格式为[(text_1, [(start_1, end_1, LABEL_1)]), (text_2, [(start_2, end_2, LABEL_1)]).....],训练数据准备代码如下:
# Load a new spacy model: nlp = spacy.blank("en") # Create a DocBin object: db = DocBin() for text, annotations in input: # Data in previous format doc = nlp(text) ents = [] spans = [] for start, end, label in annotations: # Add character indexes spans.append(Span(doc, 0, len(doc), label=label)) span = doc.char_span(start, end, label=label) ents.append(span) doc.ents = ents # Label the text with the ents group = SpanGroup(doc, name="sc", spans=spans) doc.spans["sc"] = group db.add(doc) db.to_disk(output_path)
配置文件开头内容:
# This is an auto-generated partial config. To use it with 'spacy train' # you can run spacy init fill-config to auto-fill all default settings: # python -m spacy init fill-config ./base_config.cfg ./config.cfg [paths] train = null dev = null vectors = "en_core_web_lg"
疑问:配置文件中的vectors = "en_core_web_lg"在该训练流程中具体有什么作用?为什么使用自定义标注训练时需要指定它?
解答
- 提供预训练词向量基础:
en_core_web_lg包含基于海量英文通用语料训练完成的大型词向量库,这些向量已经捕捉到了单词的语义关联、语法特征等通用语言信息。训练自定义模型时,无需从0开始学习基础语言表示,直接复用这些预训练向量作为词的初始特征,能大幅减少训练所需的数据量和计算成本。 - 提升小数据集下的模型性能:自定义标注任务的训练数据通常规模有限,预训练词向量可以帮助模型理解未见过的词汇,或迁移相似词汇的语义知识。比如你的任务是识别特定领域实体,预训练向量已经知道"Python"和"Java"同属编程语言类别,模型能快速把这种关联迁移到你的自定义标注任务中。
- 适配Spacy训练的默认架构:
spacy train默认使用的模型组件(比如用于生成词特征的tok2vec)依赖词向量作为输入。而spacy.blank("en")空白模型本身不包含任何词向量,必须通过配置指定预训练向量来源,否则训练时模型无法获得有效的词特征表示,会导致模型性能极差甚至无法正常完成训练。
内容的提问来源于stack exchange,提问作者SteveS
相关产品推荐
相关产品推荐

