开始使用

v3.5版本的新特性

新功能及如何升级

spaCy v3.5 引入了三个新的 CLI 命令:applybenchmarkfind-threshold,新增了模糊匹配功能,改进了实体链接功能,并包含一系列语言更新和错误修复。

新增CLI命令

应用命令行界面

apply CLI 可用于将管道应用于一个或多个 .txt.jsonl.spacy 输入文件,并将带注释的文档保存为单个 .spacy 文件。

基准测试命令行界面

benchmark CLI 已添加,通过更丰富的性能分析子命令扩展了现有的 evaluate 功能。

benchmark accuracy CLI 作为 evaluate 的别名被引入。新的 benchmark speed CLI 会在测量速度前进行预热轮次,以每秒处理的单词数为单位, 基于提供的数据中随机打乱的文档批次进行测速。

输出为使用批处理(nlp.pipe)的平均性能,包含95%置信区间,例如在CPU上分析en_core_web_sm:

find-threshold 命令行界面

find-threshold CLI 会从 0.01.0 的阈值范围内运行一系列试验,并根据提供的评分指标确定最佳阈值。

以下命令将为my_pipeline中的spancat组件运行20次试验,记录阈值[components.spancat.threshold]0.01.0变化时对应的spans_sc_f分数:

find-threshold 命令行工具可用于 textcat_multilabelspancat 以及自定义组件,这些组件在预测或评分时会应用阈值。

模糊匹配

新增的FUZZY运算符支持通过Matcher实现模糊匹配。默认情况下,FUZZY运算符允许莱文斯坦编辑距离为2,且最多允许模式字符串长度的30%。FUZZY1..FUZZY9可用于指定允许的精确编辑次数。

请注意FUZZY使用的是Levenshtein编辑距离而非Damerau-Levenshtein编辑距离,因此像teh替换the这样的换位会被计为两次编辑操作,一次插入和一次删除。

如果您希望使用其他模糊匹配算法,可以向Matcher提供自定义方法,或将其作为实体规则器和跨度规则器的配置选项。

FUZZY和REGEX与列表

现在FUZZYREGEX运算符也支持与INNOT_IN一起用于列表:

实体链接泛化

用于实体链接的知识库现在更易于自定义,并新增了一个默认实现InMemoryLookupKB

Additional features and improvements

  • Language updates:
    • 扩展对斯洛文尼亚语的支持
    • 修复了法语和加泰罗尼亚语词形还原器的查找回退功能
    • 将俄语和乌克兰语词形还原器切换为pymorphy3
    • 支持古希腊语中的编辑标点符号
    • 更新俄语分词器异常规则
    • 荷兰语停用词的小修复
  • 允许使用最高版本为 typer v0.7.x、mypy 0.990 和 typing_extensions v4.4.x。
  • 新增 spacy.ConsoleLogger.v3 功能,扩展了进度追踪能力。
  • 改进了使用spacy.textcat_scorer.v2spacy.textcat_multilabel_scorer.v2textcat的评分行为。
  • 更新以便下游组件可以在冻结的tok2vectransformer层上正确训练。
  • 允许在项目目录名称中插入变量。
  • 支持项目使用本地文件系统的remotes
  • 当默认端口被占用时,改进displacy.serve的用户体验。
  • 可选的 before_update 回调函数,在每个训练步骤开始时调用。
  • 提升SpanGroup的性能并修复SpanGroupSpan对象的类型问题。
  • 修复在提取tar文件时的安全漏洞
  • Vectors添加相等性定义。
  • 确保Vocab.to_disk遵守lookupsvectors的排除设置。
  • 正确处理编辑树词形还原器中缺失的注释。

训练好的流水线更新

  • CNN管道为taggermorphologizer组件添加了IS_SPACE作为tok2vec特征,以改进非空格标记与空格标记的标注效果。
  • transformer流水线需要spacy-transformers v1.2版本,该版本使用tokenizers的精确对齐方式替代了spacy-alignments的启发式对齐方式,以实现快速分词。对于除ja_core_news_trf之外的所有训练好的流水线,spaCy标记与transformer标记之间的对齐方式可能略有不同。更多关于spacy-transformers变更的详细信息,请参阅v1.2.0版本发布说明

关于从v3.4版本升级的注意事项

验证textcat值

当输入不支持的值来训练textcattextcat_multilabel模型时,现在会报错 - 请确保值如文档中所述为0.01.0

使用默认知识库

由于KnowledgeBase现在是抽象类,当您想使用spaCy的默认知识库实现时,应改为调用新的InMemoryLookupKB构造函数:

如果您编写了一个继承自KnowledgeBase的自定义知识库,您需要实现其抽象方法,或者改为继承InMemoryLookupKB

更新了分词和文本分类的评分器

我们修复了一个在v3.0-v3.4版本中导致token_acc分数虚高的错误。从v3.4到v3.5版本,报告的token_acc值会下降,但如果token_p/r/f保持不变,说明您的分词性能与v3.4版本相比没有变化。

对于新的textcattextcat_multilabel配置,新的默认v2评分器:

  • 忽略textcatthreshold阈值,因此即使底层预测结果未改变,v3.5版本中报告的cats_p/r/f指标可能略有提升
  • 默认情况下仅报告管道中最终textcattextcat_multilabel组件的性能
  • 允许使用自定义评分器通过限制评估范围至组件提供的标签,来对多个textcattextcat_multilabel组件进行评分,使用Scorer.score_cats方法

Pipeline包版本兼容性

当你加载一个使用早期spaCy v3版本训练的流程包时,会看到警告提示该流程可能存在兼容性问题。这并不一定属实,但我们建议针对你的测试套件或评估数据运行这些流程,以确保不会出现意外结果。

如果您正在使用我们提供的训练好的管道之一,您应该运行spacy download来更新至最新版本。要查看所有已安装包及其兼容性的概览,您可以运行spacy validate

如果您已经训练了自己的自定义流程,并确认其仍按预期工作,可以在meta.json中更新spaCy版本要求:

更新v3.4配置

要将spaCy v3.4的配置更新为新的v3.5设置,请运行 init fill-config:

在许多情况下(spacy train, spacy.load),新默认值将自动填充, 但您需要填写新设置才能运行 debug configdebug data