spaCy v3项目与配置系统详解
自然语言处理工程师在将原型转化为生产级软件时,常面临工具链和最佳实践缺失的困境。spaCy v3通过其配置和项目系统提供了解决方案。
spaCy v2时代的训练循环
在spaCy v2中训练命名实体识别(NER)模型需要手动编写训练循环:
1
2
3
4
5
6
7
|
with nlp.disable_pipes(*other_pipes):
for i in range(epochs):
random.shuffle(train_set)
batches = minibatch(training_data, size=64)
for batch in batches:
text, annotations = zip(*batch)
nlp.update(texts, annotations, drop=0.5, losses=losses)
|
这种方法在处理多个NLP项目时会遇到代码重复、团队标准不统一等问题。
spaCy v3配置系统
v3版本通过配置文件替代了手动训练循环。首先生成配置文件:
1
|
python -m spacy init config --pipeline ner config.cfg
|
配置文件config.cfg
包含了完整的训练参数,可通过命令行界面(CLI)运行。数据预处理后保存为.spacy
格式:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
def convert(lang: str, input_path: Path, output_path: Path):
nlp = spacy.blank(lang)
doc_bin = DocBin()
for text, annot in srsly.read_json(input_path):
doc = nlp.make_doc(text)
ents = []
for start, end, label in annot["entities"]:
span = doc.char_span(start, end, label=label)
if span is not None:
ents.append(span)
doc.ents = ents
doc_bin.add(doc)
doc_bin.to_disk(output_path)
|
训练模型只需执行:
1
|
python -m spacy train config.cfg --output ./output
|
配置文件管理
可以通过基础配置文件扩展完整配置:
1
2
3
4
5
6
7
8
|
[paths]
train = "path/to/train.spacy"
dev = "path/to/dev.spacy"
[nlp]
lang = "en"
pipeline = []
batch_size = 5000
|
使用fill-config
命令生成完整配置。配置参数可通过文档追溯其作用。
spaCy项目系统
项目系统通过project.yml
管理整个机器学习生命周期:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
commands:
- name: 'preprocess'
help: 'Serialize raw inputs to spaCy formats'
script:
- 'python scripts/preprocess.py assets/train.txt corpus/train.spacy'
- 'python scripts/preprocess.py assets/dev.txt corpus/dev.spacy'
- name: 'train'
help: 'Train the model'
script:
- 'python -m spacy train configs/config.cfg'
- name: 'evaluate'
help: 'Evaluate the best model'
script:
- 'python -m spacy evaluate training/model-best corpus/test.spacy'
|
项目系统支持依赖检查和输出验证,并可集成多种机器学习工具。
迁移建议
使用场景 |
建议 |
新NLP项目 |
直接使用v3,利用项目模板和配置系统 |
生产环境使用v2 |
考虑迁移到v3,注意模型版本兼容性 |
spaCy v3通过配置系统和项目管理为NLP工作流提供了更高效的解决方案,同时保持了足够的灵活性。