开始使用

模型与语言

spaCy的训练管道可以安装为Python包。这意味着它们就像其他模块一样,是应用程序的一个组件。它们有版本控制,可以在requirements.txt中定义为依赖项。训练管道可以从下载URL或本地目录安装,手动或通过pip安装。它们的数据可以位于文件系统的任何位置。

快速入门

安装一个默认训练好的管道包,获取从spaCy中加载它的代码以及测试示例。更多选项请参阅下方可用包部分。

语言
加载样式
选择用于
选项
python -m spacy download en_core_web_smimport spacynlp = spacy.load("en_core_web_sm")import en_core_web_smnlp = en_core_web_sm.load()doc = nlp("This is a sentence.")print([(w.text, w.pos_) for w in doc])

使用说明

如果某种语言有训练好的管道可用,你可以使用上面展示的spacy download命令下载它。为了使用尚未提供训练管道的语言,你必须直接导入它们,或者使用spacy.blank

空白管道通常仅包含一个分词器。当您只需要分词器、想从头开始添加更多组件或用于测试目的时,您可能会想创建一个空白管道。直接初始化语言对象与使用spacy.blank()生成会产生相同的结果。在这两种情况下,都会加载所选语言的默认配置,并且不会有预训练组件可用。

语言支持

spaCy 目前支持以下语言。您可以通过改进现有的语言数据和扩展分词模式来提供帮助。 点击此处了解如何参与开发的详细信息。另请参阅 训练文档了解如何在自己的数据上训练自定义管道。

语言代码语言数据管道
Catalancalang/ca4 packages
Chinesezhlang/zh4 packages
Croatianhrlang/hr3 packages
Danishdalang/da4 packages
Dutchnllang/nl3 packages
Englishenlang/en4 packages
Finnishfilang/fi3 packages
Frenchfrlang/fr4 packages
Germandelang/de4 packages
Greekellang/el3 packages
Italianitlang/it3 packages
Japanesejalang/ja4 packages
Koreankolang/ko3 packages
Lithuanianltlang/lt3 packages
Macedonianmklang/mk3 packages
Multi-languagexxlang/xx2 packages
Norwegian Bokmålnblang/nb3 packages
Polishpllang/pl3 packages
Portugueseptlang/pt3 packages
Romanianrolang/ro3 packages
Russianrulang/ru3 packages
Sloveniansllang/sl4 packages
Spanisheslang/es4 packages
Swedishsvlang/sv3 packages
Ukrainianuklang/uk4 packages
Afrikaansaflang/afnone yet
Albaniansqlang/sqnone yet
Amharicamlang/amnone yet
Ancient Greekgrclang/grcnone yet
Arabicarlang/arnone yet
Armenianhylang/hynone yet
Azerbaijaniazlang/aznone yet
Basqueeulang/eunone yet
Bengalibnlang/bnnone yet
Bulgarianbglang/bgnone yet
Czechcslang/csnone yet
Estonianetlang/etnone yet
Faroesefolang/fonone yet
Gujaratigulang/gunone yet
Hebrewhelang/henone yet
Hindihilang/hinone yet
Hungarianhulang/hunone yet
Icelandicislang/isnone yet
Indonesianidlang/idnone yet
Irishgalang/ganone yet
Kannadaknlang/knnone yet
Kyrgyzkylang/kynone yet
Latinlalang/lanone yet
Latvianlvlang/lvnone yet
Ligurianlijlang/lijnone yet
Lower Sorbiandsblang/dsbnone yet
Lugandalglang/lgnone yet
Luxembourgishlblang/lbnone yet
Malaymslang/msnone yet
Malayalammllang/mlnone yet
Marathimrlang/mrnone yet
Nepalinelang/nenone yet
Norwegian Nynorsknnlang/nnnone yet
Persianfalang/fanone yet
Sanskritsalang/sanone yet
Serbiansrlang/srnone yet
Setswanatnlang/tnnone yet
Sinhalasilang/sinone yet
Slovaksklang/sknone yet
Tagalogtllang/tlnone yet
Tamiltalang/tanone yet
Tatarttlang/ttnone yet
Telugutelang/tenone yet
Thaithlang/thnone yet
Tigrinyatilang/tinone yet
Turkishtrlang/trnone yet
Upper Sorbianhsblang/hsbnone yet
Urduurlang/urnone yet
Vietnamesevilang/vinone yet
Yorubayolang/yonone yet

多语言支持

spaCy还支持针对多种语言训练的管道。这对于命名实体识别特别有用。用于多语言或语言无关管道的语言ID是xx。包含基础语言数据的通用子类语言类可以在lang/xx中找到。

要使用中性多语言类训练一个流程,你可以在训练配置中设置lang = "xx"。你也可以直接导入MultiLanguage类,或者调用spacy.blank("xx")进行懒加载。

中文语言支持

中文语言类支持三种分词选项:charjiebapkuseg

config.cfg

分词器描述
charCharacter segmentation: Character segmentation is the default segmentation option. It’s enabled when you create a new Chinese language class or call spacy.blank("zh").
jiebaJieba: to use Jieba for word segmentation, you can set the option segmenter to "jieba".
pkusegPKUSeg: As of spaCy v2.3.0, support for PKUSeg has been added to support better segmentation for Chinese OntoNotes and the provided Chinese pipelines. Enable PKUSeg by setting tokenizer option segmenter to "pkuseg".

中文分词器类的initialize方法支持以下配置设置来加载pkuseg模型:

名称描述
pkuseg_modelName of a model provided by spacy-pkuseg or the path to a local model directory. str
pkuseg_user_dictOptional path to a file with one word per line which overrides the default pkuseg user dictionary. Defaults to "default", the default provided dictionary. str

初始化设置通常通过训练配置提供,数据会在训练前加载并与模型一起序列化。这样您可以从本地路径加载数据并保存管道和配置,而无需在运行时依赖相同的本地路径。更多背景信息请参阅配置生命周期的使用指南。

config.cfg

你也可以通过调用其initialize方法来初始化空白语言类的分词器:

示例

你也可以动态修改用户词典:

spaCy提供的中文处理流程包含一个定制的pkuseg模型,该模型仅在中文OntoNotes 5.0语料上训练,因为pkuseg提供的模型包含仅限于研究用途的数据。对于研究用途,pkuseg提供了多个不同领域的模型("mixed"(等同于pkuseg包中的"default")、"news""web""medicine""tourism"),对于其他用途,pkuseg提供了一个简单的训练API

日语语言支持

日语语言类使用 SudachiPy进行分词和词性标注。默认的日语语言类及提供的日语流程使用SudachiPy的切分模式A。可以通过分词器配置将切分模式设置为ABC

config.cfg

额外信息,例如读音、变形形式和SudachiPy标准化形式,可在Token.morph中获取。对于BC拆分模式,子标记存储在Doc.user_data["sub_tokens"]中。

韩语支持

基于MeCab的默认韩语分词器需要:

对于某些韩语数据集和任务,基于规则的分词器比MeCab更适用。要配置使用基于规则分词器的韩语处理流程:

config.cfg

安装和使用训练好的管道

下载训练好的管道最简单的方法是通过spaCy的download命令。它会自动寻找与您当前spaCy安装最匹配的兼容包。

下载命令将通过安装包使用pip并将包放置到您的site-packages目录中。

如果您在Jupyter notebook或类似环境中,可以使用!前缀来执行命令。安装完成后请务必重启内核或运行时环境(就像安装其他Python包时那样操作),以确保能够找到已安装的流程包。

通过pip安装

要直接下载训练好的pipeline使用pip,请将pip install指向wheel文件或压缩包的URL或本地路径。安装wheel文件通常效率更高。

默认情况下,这会将流程包安装到你的site-packages 目录中。然后你可以使用spacy.load通过包名加载它,或者 显式导入为模块。如果需要作为自动化流程的一部分下载 流程包,我们建议使用pip直接链接,而不是依赖spaCy的download 命令。

你也可以将直接下载链接添加到应用程序的requirements.txt文件中。更多详情,请参阅生产环境中使用流程包部分。

手动下载与安装

在某些情况下,您可能更倾向于手动下载数据,例如将其放置到自定义目录中。您可以通过浏览器从最新发布版本下载该软件包,或者使用归档文件的URL配置自己的下载脚本。该归档文件包含一个软件包目录,其中又包含存放管道数据的另一个目录。

目录结构

你可以将pipeline包目录放置在本机文件系统的任意位置。

从Python安装

由于spacy download命令会将流程包安装为Python包,我们始终建议从命令行运行该命令,就像使用pip install安装其他Python包一样。不过,如果需要的话,或者您希望将下载过程集成到另一个CLI命令中,您也可以通过Python导入并调用CLI使用的download函数。

使用训练好的spaCy管道

要加载一个流程包,使用spacy.load并指定包名或数据目录路径:

将流程包作为模块导入

如果您通过spacy download或直接使用pip安装了训练好的管道,您也可以import它,然后无需参数直接调用其load()方法:

可编辑代码spaCy v3.7 · Python 3 · 通过 Binder

如何选择加载训练好的流水线最终取决于个人偏好。但对于较大的代码库,我们通常推荐使用原生导入方式,因为这样能更轻松地将流水线包集成到现有的构建流程、持续集成工作流和测试框架中。这种方式还能避免尝试加载未安装的包,因为你的代码会立即抛出ImportError错误,而不是在后续调用spacy.load()时失败。更多详情请参阅生产环境中使用流水线包章节。

在生产环境中使用训练好的spacy管道

如果您的应用程序依赖一个或多个训练好的流程包,通常需要将它们集成到持续集成工作流和构建流程中。虽然spaCy提供了一系列实用工具来下载和加载流程包,但其底层功能完全基于原生Python打包机制。这使得您的应用程序能够像处理其他包依赖一样管理spaCy流程包。

下载和引入包依赖项

spaCy内置的download命令主要设计为便捷的交互式封装工具。它会执行兼容性检查并打印详细的错误信息和警告。不过,如果您是在自动化构建流程中下载流程包,这只会增加不必要的复杂度。如果您清楚应用程序需要哪些包,应该直接指定它们。

由于管道包是有效的Python包,您可以将它们添加到应用程序的requirements.txt中。如果您运行自己的内部PyPi安装,可以将管道包上传到那里。pip的requirements文件格式支持通过PyPi服务器下载的包名称,以及直接URL。例如,您可以为spaCy 3.7.x指定en_core_web_sm模型如下:

requirements.txt

查看模型列表获取当前spaCy版本的模型下载链接。

所有流程包都经过版本控制并指定其spaCy依赖项。这确保了跨兼容性,并允许您为每个流程指定确切的版本要求。如果您已经训练了自己的流程,可以使用spacy package命令生成所需的元数据并将其转换为可加载的包。

加载和测试流程包

Pipeline包是常规的Python包,因此您也可以使用Python原生的import语法将其作为包导入,然后调用load方法来加载数据并返回一个nlp对象:

通常,这种方法推荐用于较大的代码库,因为它更加"原生",且不依赖spaCy的加载器将字符串名称解析为包。如果包无法导入,Python会立即抛出ImportError错误。而如果包被导入但未使用,任何linter工具都能检测到这种情况。

同样地,当编写需要加载管道的测试时,这将为您提供更大的灵活性。例如,无需围绕spaCy的加载器编写自己的tryexcept逻辑,您可以使用pytestimportorskip()方法,仅在安装了特定管道包或版本时运行测试。每个管道包都暴露了一个__version__属性,您也可以在加载前使用它来执行自己的版本兼容性检查。