模型与语言
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 目前支持以下语言。您可以通过改进现有的语言数据和扩展分词模式来提供帮助。 点击此处了解如何参与开发的详细信息。另请参阅 训练文档了解如何在自己的数据上训练自定义管道。
| 语言 | 代码 | 语言数据 | 管道 |
|---|---|---|---|
| Catalan | ca | lang/ca | 4 packages |
| Chinese | zh | lang/zh | 4 packages |
| Croatian | hr | lang/hr | 3 packages |
| Danish | da | lang/da | 4 packages |
| Dutch | nl | lang/nl | 3 packages |
| English | en | lang/en | 4 packages |
| Finnish | fi | lang/fi | 3 packages |
| French | fr | lang/fr | 4 packages |
| German | de | lang/de | 4 packages |
| Greek | el | lang/el | 3 packages |
| Italian | it | lang/it | 3 packages |
| Japanese | ja | lang/ja | 4 packages |
| Korean | ko | lang/ko | 3 packages |
| Lithuanian | lt | lang/lt | 3 packages |
| Macedonian | mk | lang/mk | 3 packages |
| Multi-language | xx | lang/xx | 2 packages |
| Norwegian Bokmål | nb | lang/nb | 3 packages |
| Polish | pl | lang/pl | 3 packages |
| Portuguese | pt | lang/pt | 3 packages |
| Romanian | ro | lang/ro | 3 packages |
| Russian | ru | lang/ru | 3 packages |
| Slovenian | sl | lang/sl | 4 packages |
| Spanish | es | lang/es | 4 packages |
| Swedish | sv | lang/sv | 3 packages |
| Ukrainian | uk | lang/uk | 4 packages |
| Afrikaans | af | lang/af | none yet |
| Albanian | sq | lang/sq | none yet |
| Amharic | am | lang/am | none yet |
| Ancient Greek | grc | lang/grc | none yet |
| Arabic | ar | lang/ar | none yet |
| Armenian | hy | lang/hy | none yet |
| Azerbaijani | az | lang/az | none yet |
| Basque | eu | lang/eu | none yet |
| Bengali | bn | lang/bn | none yet |
| Bulgarian | bg | lang/bg | none yet |
| Czech | cs | lang/cs | none yet |
| Estonian | et | lang/et | none yet |
| Faroese | fo | lang/fo | none yet |
| Gujarati | gu | lang/gu | none yet |
| Hebrew | he | lang/he | none yet |
| Hindi | hi | lang/hi | none yet |
| Hungarian | hu | lang/hu | none yet |
| Icelandic | is | lang/is | none yet |
| Indonesian | id | lang/id | none yet |
| Irish | ga | lang/ga | none yet |
| Kannada | kn | lang/kn | none yet |
| Kyrgyz | ky | lang/ky | none yet |
| Latin | la | lang/la | none yet |
| Latvian | lv | lang/lv | none yet |
| Ligurian | lij | lang/lij | none yet |
| Lower Sorbian | dsb | lang/dsb | none yet |
| Luganda | lg | lang/lg | none yet |
| Luxembourgish | lb | lang/lb | none yet |
| Malay | ms | lang/ms | none yet |
| Malayalam | ml | lang/ml | none yet |
| Marathi | mr | lang/mr | none yet |
| Nepali | ne | lang/ne | none yet |
| Norwegian Nynorsk | nn | lang/nn | none yet |
| Persian | fa | lang/fa | none yet |
| Sanskrit | sa | lang/sa | none yet |
| Serbian | sr | lang/sr | none yet |
| Setswana | tn | lang/tn | none yet |
| Sinhala | si | lang/si | none yet |
| Slovak | sk | lang/sk | none yet |
| Tagalog | tl | lang/tl | none yet |
| Tamil | ta | lang/ta | none yet |
| Tatar | tt | lang/tt | none yet |
| Telugu | te | lang/te | none yet |
| Thai | th | lang/th | none yet |
| Tigrinya | ti | lang/ti | none yet |
| Turkish | tr | lang/tr | none yet |
| Upper Sorbian | hsb | lang/hsb | none yet |
| Urdu | ur | lang/ur | none yet |
| Vietnamese | vi | lang/vi | none yet |
| Yoruba | yo | lang/yo | none yet |
多语言支持
spaCy还支持针对多种语言训练的管道。这对于命名实体识别特别有用。用于多语言或语言无关管道的语言ID是xx。包含基础语言数据的通用子类语言类可以在lang/xx中找到。
要使用中性多语言类训练一个流程,你可以在训练配置中设置lang = "xx"。你也可以直接导入MultiLanguage类,或者调用spacy.blank("xx")进行懒加载。
中文语言支持
中文语言类支持三种分词选项:char、jieba和pkuseg。
config.cfg
| 分词器 | 描述 |
|---|---|
char | Character segmentation: Character segmentation is the default segmentation option. It’s enabled when you create a new Chinese language class or call spacy.blank("zh"). |
jieba | Jieba: to use Jieba for word segmentation, you can set the option segmenter to "jieba". |
pkuseg | PKUSeg: 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_model | Name of a model provided by spacy-pkuseg or the path to a local model directory. str |
pkuseg_user_dict | Optional 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。可以通过分词器配置将切分模式设置为A、B或C。
config.cfg
额外信息,例如读音、变形形式和SudachiPy标准化形式,可在Token.morph中获取。对于B或C拆分模式,子标记存储在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()方法:
可编辑代码
如何选择加载训练好的流水线最终取决于个人偏好。但对于较大的代码库,我们通常推荐使用原生导入方式,因为这样能更轻松地将流水线包集成到现有的构建流程、持续集成工作流和测试框架中。这种方式还能避免尝试加载未安装的包,因为你的代码会立即抛出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的加载器编写自己的try和except逻辑,您可以使用pytest的importorskip()方法,仅在安装了特定管道包或版本时运行测试。每个管道包都暴露了一个__version__属性,您也可以在加载前使用它来执行自己的版本兼容性检查。