开始使用

事实与数据

spaCy的硬性数据及其与其他工具的比较

spaCy 是一个免费开源的库,用于Python中的高级自然语言处理(NLP)。它专为生产环境使用而设计,帮助您构建能够处理和"理解"大量文本的应用程序。它可用于构建信息提取或自然语言理解系统。

功能概览

  • 支持75+种语言
  • 84 个训练好的管道 支持 25 种语言
  • 使用预训练的transformers(如BERT)进行多任务学习
  • 预训练的词向量
  • 最先进的运行速度
  • 生产就绪的训练系统
  • 基于语言学的分词
  • 用于命名实体识别、词性标注、依存句法分析、句子分割、文本分类、词形还原、形态分析、实体链接等任务的组件
  • 通过自定义组件和属性轻松扩展
  • 支持在PyTorchTensorFlow及其他框架中使用自定义模型
  • 内置用于语法和命名实体识别的可视化工具
  • 便捷的模型打包、部署和工作流管理
  • 稳健、经过严格评估的准确性

何时应该使用spaCy?

  • 我是初学者,刚开始接触自然语言处理(NLP)。 – spaCy 让入门变得简单,并提供了详尽的文档,包括适合初学者的101指南、免费的互动式在线课程以及一系列视频教程
  • 我想构建一个端到端的生产应用程序。 – spaCy 专为生产环境设计,可帮助您构建和训练强大的 NLP 流水线,并轻松打包部署。
  • 我希望我的应用在GPUCPU上都能高效运行。 - 虽然spaCy允许你训练最适合在GPU上运行的现代NLP模型,但它也提供了CPU优化的管道,这些管道虽然准确性稍低但运行成本要低得多。
  • 我想尝试不同的NLP神经网络架构。 – spaCy允许您自定义和替换驱动其组件的模型架构,并使用PyTorch或TensorFlow等框架实现自己的架构。声明式配置系统使您可以轻松混合搭配功能并跟踪超参数,确保实验可重现。
  • 我想构建一个语言生成应用。 – spaCy的核心是自然语言处理以及从大量文本中提取信息。虽然你可以用它来帮助重写现有文本,但它不包含任何专门用于语言生成任务的功能。
  • 我想研究机器学习算法。 spaCy基于最新研究构建,但它不是一个研究库。如果你的目标是撰写论文和运行基准测试,spaCy可能不是一个好的选择。不过,你可以用它来让你的研究成果更容易被他人使用,例如通过自定义spaCy组件。

基准测试

spaCy v3.0 引入了基于transformer的流程,将spaCy的准确率提升至当前最先进水平。您也可以使用CPU优化流程,虽然准确率稍低但运行成本更为经济。

PipelineParserTaggerNER
en_core_web_trf (spaCy v3)95.197.889.8
en_core_web_lg (spaCy v3)92.097.485.5
en_core_web_lg (spaCy v2)91.997.285.5

完整流程准确率基于 OntoNotes 5.0语料库(在开发集上报告)。

命名实体识别系统OntoNotesCoNLL '03
spaCy RoBERTa (2020)89.891.6
Stanza (StanfordNLP)188.892.1
Flair289.793.1

命名实体识别准确率OntoNotes 5.0CoNLL-2003语料库上的表现。更多结果请参阅 NLP-progress。项目模板: benchmarks/ner_conll031. Qi et al. (2020)2. Akbik et al. (2018)

依存句法分析系统UASLAS
spaCy RoBERTa (2020)95.193.7
Mrini et al. (2019)97.496.3
Zhou and Zhao (2019)97.295.7

依存句法分析准确率在宾州树库上的表现。更多结果请参见 NLP-progress。项目模板: benchmarks/parsing_penn_treebank

速度对比

我们比较了不同NLP库的处理速度,以每秒处理的单词数(WPS)衡量 - 数值越高表示性能越好。该评估基于10,000条Reddit评论进行。

流水线WPS CPU WPS GPU
spaCyen_core_web_lg10,01414,954
spaCyen_core_web_trf6843,768
Stanzaen_ewt8782,180
Flairpos(-fast) & ner(-fast)3231,184
UDPipeenglish-ewt-ud-2.51,101n/a

端到端处理速度针对原始未标注文本。项目模板: benchmarks/speed