Spacy 简明教程
spaCy - Introduction
在本章中,我们将了解与 spaCy 相关的功能、扩展和可视化工具。此外,还提供了功能比较,帮助读者分析 spaCy 相较于自然语言工具包 (NLTK) 和 coreNLP 所提供的功能。此处,NLP 表示自然语言处理。
What is spaCy?
spaCy 由软件开发人员 Matthew Honnibal 和 Ines Montani 开发,是一个用于高级 NLP 的开源软件库。它用 Python 和 Cython (Python 的 C 扩展,主要设计用于为 Python 语言程序提供类似 C 的性能)编写。
spaCy 是一个相对较新的框架,但它是最强大、最先进的库之一,用于实现 NLP。
Features
spaCy 的部分特性使其颇受欢迎,如下所述:
Fast ——spaCy 经过专门设计,尽可能快。
Accuracy ——spaCy 实现的标注依存关系分析器,使其成为同类中最精确的框架之一(达到最佳可用框架的 1% 以内)。
Batteries included ——spaCy 中包含的配套工具如下:
-
Index preserving tokenization.
-
“Alpha 分词”支持 50 多种语言。
-
Part-of-speech tagging.
-
Pre-trained word vectors.
-
内置简单漂亮的名实体和语法可视化器。
-
Text classification.
Extensile ——你可以轻松地将 spaCy 与其他现有工具一起使用,如 TensorFlow、Gensim、scikit-Learn 等。
Deep learning integration ——它具有 Thinc(一个深度学习框架),专为 NLP 任务而设计。
Extensions and visualisers
spaCy 随附的部分易用扩展和可视化工具是免费的开源库,如下所列:
Thinc ——它是针对中央处理器 (CPU) 使用进行优化的机器学习 (ML) 库。它还设计用于具有文本输入和 NLP 任务的深度学习。
sense2vec ——这个库用于计算单词相似度。它基于 Word2vec。
displaCy ——它是一个开源依存关系分析树可视化器。它用 JavaScript、CSS(层叠样式表)和 SVG(可缩放矢量图形)构建。
displaCy ENT ——它是 spaCy 附带的内置命名实体可视化器。它用 JavaScript 和 CSS 构建。它允许用户在浏览器中查看其模型的预测。
Feature Comparison
下表展示了 spaCy、NLTK 和 CoreNLP 所提供的功能比较:
Features |
spaCy |
NLTK |
CoreNLP |
Python API |
Yes |
Yes |
No |
Easy installation |
Yes |
Yes |
Yes |
Multi-language Support |
Yes |
Yes |
Yes |
Integrated word vectors |
Yes |
No |
No |
Tokenization |
Yes |
Yes |
Yes |
Part-of-speech tagging |
Yes |
Yes |
Yes |
Sentence segmentation |
Yes |
Yes |
Yes |
Dependency parsing |
Yes |
No |
Yes |
Entity Recognition |
Yes |
Yes |
Yes |
Entity linking |
Yes |
No |
No |
Coreference Resolution |
No |
No |
Yes |
spaCy - Getting Started
本章将帮助读者了解 spaCy 的最新版本。此外,读者可以了解各个版本中的新特性和改进内容、其兼容性以及如何安装 spaCy。
Latest version
spaCy v3.0 是最新版本,以夜间发布的形式提供。这是 spaCy 通过一个名为 spacy-nightly 的单独渠道进行的实验和 alpha 版发布。它反映了“未来的 spaCy”,不能用于生产用途。
为了防止潜在的冲突,请尝试使用一个新的虚拟环境。
您可以使用以下给出的 pip 命令来安装它:
pip install spacy-nightly --pre
New Features and Improvements
下面解释了 spaCy 最新版本中的新特性和改进:
Transformer-based pipelines
它具有所有新的基于转换器的管道,并支持多任务学习。这些新的基于转换器的管道使其成为最高精度的框架(在最佳可用精度范围内 1%)。
您可以为您的管道访问数千个预训练模型,因为 spaCy 的转换器支持与 PyTorch 和 HuggingFace 转换器等其他框架互操作。
New training workflow and config system
spaCy v3.0 提供了我们训练运行的单个配置文件。
没有隐藏的默认值,因此,它使我们能够轻松地返回实验并跟踪更改。
Custom models using any ML framework
spaCy v3.0 的新配置系统使我们能够轻松定制神经网络 (NN) 模型,并通过 ML 库 Thinc 实现我们自己的架构。
Manage end-to-end workflows and projects
spaCy 项目让我们可以管理和共享各种用例和域的端到端工作流。
它还允许我们组织训练、打包和提供我们自己的管道服务。
另一方面,我们还可以与其他数据科学和 ML 工具集成,例如 DVC (Data Vision Control) 、 Prodigy 、 Streamlit 、 FastAPI 、 Ray 等。
Parallel training and distributed computing with Ray
为了加速训练过程,我们可以使用 Ray,这是一个用于构建和运行分布式应用程序的快速且简单的框架,以在一台或多台远程机器上训练 spaCy。
New built-in pipeline components
这是 spaCy 的新版本,遵循新的可训练和基于规则的组件,我们可以将其添加到我们的管道中。
这些组件如下:
-
SentenceRecognizer
-
Morphologizer
-
Lemmatizer
-
AttributeRuler
-
Transformer
-
TrainablePipe
Installing spaCy
下面阐释了安装 spaCy 的不同选项 −
Using package manager
spaCy 的最新发布版本可以通过两个包管理器 pip 和 conda 获得。让我们了解如何使用它们来安装 spaCy −
pip − 要使用 pip 安装 Spacy,可以使用以下命令 −
pip install -U spacy
为了避免修改系统状态,建议在虚拟环境中安装 spacy 包,如下所示 −
python -m venv .env
source .env/bin/activate
pip install spacy
conda − 要通过 conda-forge 安装 spaCy,可以使用以下命令 −
conda install -c conda-forge spacy
From source
您还可以通过从 GitHub repository 制作克隆并从源代码构建来安装 spaCy。这是对代码库进行更改的最常用方式。
但是,为此,您需要拥有包含以下内容的 python 发行版 −
-
Header files
-
A compiler
-
pip
-
virtualenv
-
git
使用以下命令 −
首先,依次 update pip −
python -m pip install -U pip
现在,使用下面给出的命令 clone spaCy :
git clone https://github.com/explosion/spaCy
现在,我们需要通过使用下面提到的命令 navigate into directory −
cd spaCy
接下来,我们需要 create environment in .env ,如下所示 −
python -m venv .env
现在, activate the above created virtual environment 。
source .env/bin/activate
接下来,我们需要按如下方式 set the Python path to spaCy directory −
export PYTHONPATH=`pwd`
现在,按如下方式 install all requirements −
pip install -r requirements.txt
最后, compile spaCy −
python setup.py build_ext --inplace
Upgrading spaCy
升级 spaCy 时应牢记以下几点 −
-
从一个干净的虚拟环境开始。
-
要将 spaCy 升级到一个新的主要版本,则必须安装最新的兼容模型。
-
虚拟环境中不应存在旧的快捷方式链接或不兼容的模型包。
-
如果您已训练了自己的模型,则训练和运行时输入必须匹配,即您还必须使用较新版本重新训练模型。
SpaCy v2.0 和更高版本提供了一个 validate 命令,它允许用户验证是否所有已安装的模型都与已安装的 spaCy 版本兼容。
如果存在任何不兼容模型, validate 命令将打印提示和安装说明。此命令还可以检测在不同虚拟环境中创建的、不同步的模型链接。
您可以按如下方式使用 validate 命令 −
pip install -U spacy
python -m spacy validate
在上述命令中,使用 python -m 确保我们执行的是正确的 spaCy 版本。
Running spaCy with GPU
spaCy v2.0 及更高版本附带了可以在 Thinc 中实现的神经网络 (NN) 模型。如果想要使用图形处理器 (GPU) 支持运行 spaCy,请使用 Chainer 的 CuPy 模块。此模块为 GPU 数组提供了一个兼容 numpy 的接口。
您可以通过指定以下内容在 GPU 上安装 spaCy −
-
spaCy[cuda]
-
spaCy[cuda90]
-
spaCy[cuda91]
-
spaCy[cuda92]
-
spaCy[cuda100]
-
spaCy[cuda101]
-
spaCy[cuda102]
另一方面,如果您知道 cuda 的版本,显式指定符允许安装 cupy 。它将节省编译时间。
使用以下命令进行安装:
pip install -U spacy[cuda92]
在启用 GPU 的安装后,按照如下方式调用 spacy.prefer_gpu 或 spacy.require_gpu 激活它:
import spacy
spacy.prefer_gpu()
nlp_model = spacy.load("en_core_web_sm")
spaCy - Models and Languages
让我们来了解一下 spaCy 支持的语言及其统计模型。
Language Support
目前,spaCy 支持以下语言:
Language |
Code |
Chinese |
zh |
Danish |
da |
Dutch |
nl |
English |
en |
French |
fr |
German |
de |
Greek |
el |
Italian |
it |
Japanese |
ja |
Lithuanian |
lt |
Multi-language |
xx |
Norwegian Bokmål |
nb |
Polish |
pl |
Portuguese |
pt |
Romanian |
ro |
Spanish |
es |
Afrikaans |
af |
Albanian |
sq |
Arabic |
ar |
Armenian |
hy |
Basque |
eu |
Bengali |
bn |
Bulgarian |
bg |
Catalan |
ca |
Croatian |
hr |
Czech |
cs |
Estonian |
et |
Finnish |
fi |
Gujarati |
gu |
Hebrew |
he |
Hindi |
hi |
Hungarian |
hu |
Icelandic |
is |
Indonesian |
id |
Irish |
ga |
Kannada |
kn |
Korean |
ko |
Latvian |
lv |
Ligurian |
lij |
Luxembourgish |
lb |
Macedonian |
mk |
Malayalam |
ml |
Marathi |
mr |
Nepali |
ne |
Persian |
fa |
Russian |
ru |
Serbian |
sr |
Sinhala |
si |
Slovak |
sk |
Slovenian |
sl |
Swedish |
sv |
Tagalog |
tl |
Tamil |
ta |
Tatar |
tt |
Telugu |
te |
Thai |
th |
Turkish |
tr |
Ukrainian |
uk |
Urdu |
ur |
Vietnamese |
vi |
Yoruba |
yo |
spaCy’s statistical models
众所周知,spaCy 的模型可以作为 Python 包安装,这意味着它们就像其他任何模块一样是我们应用程序的组件。这些模块可以在 requirement.txt 文件中进行版本管理和定义。
Installing spaCy’s Statistical Models
spaCy 统计模型的安装说明如下:
Using Download command
使用 spaCy 的 download 命令是最简单的下载模型的方式之一,因为它会自动找到与我们的 spaCy 版本最匹配的模型。
你可以按照以下方式使用 download 命令:
以下命令将下载与你的 spaCy 版本最匹配的特定模型版本:
python -m spacy download en_core_web_sm
以下命令将下载与之最匹配的默认模型,此外还会创建一个快捷链接:
python -m spacy download en
以下命令将下载准确的模型版本,并且不会创建任何快捷链接:
python -m spacy download en_core_web_sm-2.2.0 --direct
Via pip
我们还可以直接通过 pip 下载和安装模型。为此,你需要使用 pip install ,并附带档案文件的 URL 或本地路径。如果你没有模型的直接链接,请转至模型发布版本,然后从那里复制。
例如,
以下是在使用 pip 安装具有外部 URL 的模型的命令:
pip install https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-2.2.0/en_core_web_sm-2.2.0.tar.gz
installing model using pip with local file 命令如下:
pip install /Users/you/en_core_web_sm-2.2.0.tar.gz
上述命令会将特定模型安装到你的站点包目录中。完成后,我们可以使用 spacy.load() 通过其包名加载它。
Using models with spaCy
这里说明了如何将模型与 spaCy 一起使用。
Using custom shortcut links
我们可以像上面讨论的那样手动下载所有 spaCy 模型,并将其放在我们的本地目录中。现在,当 spaCy 项目需要任何模型时,我们可以创建一个快捷链接,以便 spaCy 可以从那里加载模型。有了这个,你将不会出现重复数据的情况。
为此,spaCy 为我们提供了可按以下方式使用的链接命令:
python -m spacy link [package name or path] [shortcut] [--force]
在以上命令中,第一个参数是包名称或本地路径。如果你已通过 pip 安装了模型,你可以使用这里的包名称。或者,你需要一个到模型包的本地路径。
第二个参数是内部名称。这是你要用于模型的名称。以上命令中的 –- force 标志将覆盖任何现有的链接。
以下是这两个案例的示例。
Example
以下是将已安装包设置为“ default_model ”的快捷链接的示例:
python -m spacy link en_core_web_md en_default
以下是将本地模型设置为“ my_default_model ”的快捷链接的示例:
python -m spacy link /Users/Leekha/model my_default_en
spaCy - Architecture
本章介绍了 spaCy 中的数据结构,并解释了对象及其作用。
Data Structures
spaCy 中的中心数据结构如下: −
-
Doc − 它是 spaCy 架构中最重要的对象之一,拥有标记序列及其所有注释。
-
Vocab − spaCy 中心数据结构的另一个重要对象是词库。它拥有一个查找表集合,使常见信息可在文档中获得。
spaCy 的数据结构有助于集中字符串、字向量和词汇属性,通过避免存储数据的多个副本从而节省内存。
Objects and their role
下文解释了 spaCy 中的对象及其作用以及一个示例 −
Span
它是 Doc 对象的切片,我们已在上面讨论过。借助以下命令,我们可以从该切片创建 Span 对象 −
doc[start : end]
Example
下面给出了 span 的示例 −
import spacy
import en_core_web_sm
nlp_example = en_core_web_sm.load()
my_doc = nlp_example("This is my first example.")
span = my_doc[1:6]
span
Output
is my first example.
Token
顾名思义,它表示单个标记,如单词、标点符号、空格、符号等。
Example
下面给出了标记的示例 −
import spacy
import en_core_web_sm
nlp_example = en_core_web_sm.load()
my_doc = nlp_example("This is my first example.")
token = my_doc[4]
token
Output
example
Tokenizer
顾名思义,分词器类将文本细分为单词、标点符号等。
Example
此示例将创建一个仅使用英语词表的空白分词器 −
from spacy.tokenizer import Tokenizer
from spacy.lang.en import English
nlp_lang = English()
blank_tokenizer = Tokenizer(nlp_lang.vocab)
blank_tokenizer
Output
<spacy.tokenizer.Tokenizer at 0x26506efc480>
Language
它是一个文本处理管道,我们每次仅需加载一个进程并将其实例传递给应用程序。当我们调用方法 spacy.load() 时,将创建一个此类。
它包含以下内容 −
-
Shared vocabulary
-
Language data
-
从模型包加载的可选模型数据
-
包含标注器或解析器等组件的处理管道。
Example
此语言示例将初始化英语语言对象
from spacy.vocab import Vocab
from spacy.language import Language
nlp_lang = Language(Vocab())
from spacy.lang.en import English
nlp_lang = English()
nlp_lang
Output
运行代码后,你将看到以下输出 −
<spacy.lang.en.English at 0x26503773cf8>
spaCy - Command Line Helpers
本章节提供了 spaCy 中使用的命令行帮助器的信息。
Why Command Line Interface?
spaCy v1.7.0 及更高版本随附新的命令行助手。它用于下载和链接模型。您还可以使用它来显示有用的调试信息。总之,命令行助手用于下载、训练、打包模型和调试 spaCy。
Available Commands
以下给出了 spaCy 中的命令及其各自的描述。
Sr.No. |
Command & Description |
1 |
Download 下载 spaCy 模型。 |
2 |
Link 为模型创建快捷方式链接。 |
3 |
InfoTo print the information. |
4 |
Validate 检查已安装模型的兼容性。 |
5 |
Convert 将文件转换为 spaCy 的 JSON 格式。 |
6 |
Pretrain 预训练管道组件的“标记到向量 (tok2vec)” 层。 |
7 |
Init-model 从原始数据创建新的模型目录。 |
8 |
Evaluate 评估模型的准确性和速度。 |
9 |
Package 从现有模型数据目录生成模型 python 包。 |
10 |
Debug-data 分析、调试和验证我们的训练和开发数据。 |
11 |
TrainTo train a model. |
spaCy - Top-level Functions
在本文中,我们将讨论 spaCy 中使用的一些顶级函数。以下是所列函数及其说明——
Sr.No. |
Command & Description |
1 |
spacy.load() To load a model. |
2 |
spacy.blank() 创建一个空白模型。 |
3 |
spacy.info() 从 spaCy 内部提供有关安装、模型和本地设置的信息。 |
4 |
spacy.explain() To give a description. |
5 |
spacy.prefer_gpu() 在 GPU 上分配数据并执行操作。 |
6 |
spacy.require_gpu() 在 GPU 上分配数据并执行操作。 |
spacy.load()
顾名思义,此 spaCy 函数将通过以下方式加载模型——
-
Its shortcut links.
-
安装的模型包名称。
-
A Unicode paths.
-
Path-like object.
spaCy 将尝试按以下给定顺序解析加载参数——
-
如果模型从快捷方式链接或包名加载,spaCy 将将其视为 Python 包并调用模型自己的 load() 方法。
-
另一方面,如果模型从路径加载,spaCy 将将其视为数据目录,因此初始化 Language 类。
使用此函数后,数据将通过 Language.from_disk 加载。
Arguments
下表解释了它的参数 −
NAME |
TYPE |
DESCRIPTION |
name |
unicode / Path |
它是要加载的模型的快捷方式链接、包名或路径。 |
disable |
List |
它表示要禁用的管道组件名称。 |
Example
在以下示例中,spacy.load() 函数通过使用快捷方式链接、包、unicode 路径和 pathlib 路径加载模型——
以下是用于通过使用 shortcut link 加载模型的 spacy.load() 函数的命令——
nlp_model = spacy.load("en")
以下是用于通过使用 package 加载模型的 spacy.load() 函数的命令——
nlp_model = spacy.load("en_core_web_sm")
以下是用于通过使用 Unicode path 加载模型的 spacy.load() 函数的命令——
nlp_model = spacy.load("/path/to/en")
以下是用于通过使用 pathlib path 加载模型的 spacy.load() 函数的命令——
nlp_model = spacy.load(Path("/path/to/en"))
以下是用于 with all the arguments 加载模型的 spacy.load() 函数的命令——
nlp_model = spacy.load("en_core_web_sm", disable=["parser", "tagger"])
spacy.info()
与 info 命令类似,spacy.info() 函数提供有关 spaCy 中安装、模型和本地设置的信息。
如果你想以字典形式获取模型元数据,可以将 meta-attribute 用在已加载模型的 nlp 对象上。例如, nlp.meta 。
spacy.explain()
此函数会为以下项目提供说明 −
-
POS tag
-
Dependency label
-
Entity type
Arguments
下表解释了它的参数 −
NAME |
TYPE |
DESCRIPTION |
term |
unicode |
这是我们想要解释的术语。 |
Example
spacy.explain() 函数的使用示例如下 −
import spacy
import en_core_web_sm
nlp= en_core_web_sm.load()
spacy.explain("NORP")
doc = nlp("Hello TutorialsPoint")
for word in doc:
print(word.text, word.tag_, spacy.explain(word.tag_))
Output
Hello UH interjection
TutorialsPoint NNP noun, proper singular
spaCy - Visualization Function
可视化函数主要用于可视化依赖项,还用于在浏览器或笔记本中可视化命名实体。从spaCy版本2.0开始,有两个流行的可视化器,即 displaCy 和 displaCyENT 。
它们都是spaCy内置的可视化套件的一部分。通过使用这个名为displaCy的可视化套件,我们可以可视化文本中的依存句法分析器或命名实体。
displaCy()
在这里,我们将了解displayCy依存项可视化器和displayCy实体可视化器。
Visualizing the dependency parse
displaCy依存项可视化器(dep)将显示POS(词性)标签和句法依赖项。
Example
下面给出使用 displaCy() 依赖项可视化器可视化依赖项分析的实例 −
import spacy
from spacy import displacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("This is Tutorialspoint.com.")
displacy.serve(doc, style="dep")
Output
它提供以下输出 −
我们还可以指定设置的字典以自定义布局。 它将在参数 option (稍后详细讨论)中。
带有选项的示例如下 −
import spacy
from spacy import displacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("This is Tutorialspoint.com.")
options = {"compact": True, "bg": "#09a3d5",
"color": "red", "font": "Source Sans Pro"}
displacy.serve(doc, style="dep", options=options)
Output
给出以下输出 −
Visualizing named entities
displaCy 实体可视化器 (ent) 将突出显示文本中的命名实体及其标签。
Example
下面给出使用 displaCy 实体可视化器来识别命名实体的示例 −
import spacy
from spacy import displacy
text = "When Sebastian Thrun started working on self-driving cars at Google in
2007, few people outside of the company took him seriously. But Google is
starting from behind. The company made a late push into hardware, and Apple's
Siri has clear leads in consumer adoption."
nlp = spacy.load("en_core_web_sm")
doc = nlp(text)
displacy.serve(doc, style="ent")
Output
输出如下 −
我们还可以指定设置的字典以自定义布局。 它将在参数 option (稍后详细讨论)中。
带有选项的示例如下 −
import spacy
from spacy import displacy
text = "When Sebastian Thrun started working on self-driving cars at Google in
2007, few people outside of the company took him seriously. But Google is
starting from behind. The company made a late push into hardware, and Apple's
Siri has clear leads in consumer adoption."
nlp = spacy.load("en_core_web_sm")
doc = nlp(text)
colors = {"ORG": "linear-gradient(90deg, #aa9cfc, #fc9ce7)"}
options = {"ents": ["ORG"], "colors": colors}
displacy.serve(doc, style="ent", options=options)
Output
输出如下:
displaCy() methods
从 2.0 版本开始,displaCy() 函数有两种方法,分别是 serve 和 render。 让我们详细讨论一下它们。 下表列出了这些方法及各自的说明。
Sr.No. |
Method & Description |
1 |
displayCy.serve 它将提供依赖项分析树。 |
2 |
displayCy.render 它将呈现依赖项分析树。 |
displaCy.serve
此方法将提供依赖项分析树/可视化的命名实体,以便在 Web 浏览器中查看。 它将运行一个简单的 Web 浏览器。
Arguments
下表解释了它的参数 −
NAME |
TYPE |
DESCRIPTION |
DEFAULT |
Docs |
list, doc, Span |
它表示要可视化的文档。 |
|
Style |
Unicode |
我们有两种可视化样式,即“dep”或“ent”。 |
默认值是“dep”。 |
Page |
bool |
它将呈现标记为完整的 HTML 页面。 |
它的默认值为真。 |
minify |
bool |
此参数将压缩 HTML 标记。 |
默认值为 false。 |
options |
dict |
它表示特定于可视化程序的选项。例如,颜色。 |
{} |
manual |
bool |
此参数不会解析 Doc,而是希望一个字典或字典列表。 |
默认值为 false。 |
Port |
int |
它是用于提供可视化的端口号。 |
5000 |
Host |
unicode |
它是用于提供可视化的主机号。 |
'0.0.0.0' |
Example
下面给出了 displayCy.serve 方法的一个示例 −
import spacy
from spacy import displacy
nlp = spacy.load("en_core_web_sm")
doc1 = nlp("This is Tutorialspoint.com")
displacy.serve(doc1, style="dep")
Output
它提供以下输出 −
displaCy.render
此 dispaCy 方法将呈现依存关系解析树或命名实体可视化。
Arguments
下表解释了它的参数 −
NAME |
TYPE |
DESCRIPTION |
DEFAULT |
Docs |
list, doc, Span |
它表示要可视化的文档。 |
|
Style |
Unicode |
我们有两种可视化样式,即“dep”或“ent”。 |
默认值是“dep”。 |
Page |
Bool |
它将呈现标记为完整的 HTML 页面。 |
默认值为 false。 |
minify |
Bool |
此参数将压缩 HTML 标记。 |
默认值为 false。 |
options |
Dict |
它表示特定于可视化程序的选项。例如,颜色。 |
{} |
manual |
Bool |
此参数不会解析 Doc,而是希望一个字典或字典列表。 |
默认值为 false。 |
jupyter |
Bool |
要返回准备在笔记本中呈现的标记,此参数将明确启用或禁用 Jupyter 模式。如果我们不提供此参数,它将自动检测。 |
None |
Example
下面给出了 displaCy.render 方法的一个示例 −
import spacy
from spacy import displacy
nlp = spacy.load("en_core_web_sm")
doc = nlp("This is Tutorialspoint.")
html = displacy.render(doc, style="dep")
Output
Visualizer options
dispaCy () 函数的 option 参数允许我们为每个可视化程序指定附加设置,依赖关系以及命名实体可视化程序。
Dependency Visualizer options
下表说明了依存关系可视化程序选项 −
NAME |
TYPE |
DESCRIPTION |
DEFAULT |
fine_grained |
bool |
如果要使用细粒度的词性标签 (Token.tag_) 而不是粗粒度的标签 (Token.pos_),请将此参数的值置为 True。 |
默认值为 False。 |
add_lemma |
bool |
此参数是在 2.2.4 版本中引入的,它在标记文本下方单独的一行中打印引理。 |
默认值为 False。 |
collapse_punct |
bool |
它将标点符号附加到标记。 |
默认值为 True。 |
collapse_phrases |
bool |
此参数将名词短语合并到一个标记中。 |
默认值为 False。 |
compact |
bool |
如果你认为此参数为真,则可以获得占用空间更小的带有矩形箭头的“紧凑模式”。 |
默认值为 False。 |
color |
unicode |
顾名思义,此参数适用于文本颜色(HEX、RGB 或颜色名称)。 |
'#000000' |
bg |
unicode |
顾名思义,此参数适用于背景颜色(HEX、RGB 或颜色名称)。 |
'#ffffff' |
font |
unicode |
适用于字体名称。 |
Default value is 'Arial'. |
offset_x |
int |
此参数用于 SVG 左侧间距,以像素为单位。 |
此参数的默认值为 50。 |
arrow_stroke |
int |
此参数用于调整箭头路径的宽度,以像素为单位。 |
此参数的默认值为 2。 |
arrow_width |
int |
此参数用于调整箭头头的宽度,以像素为单位。 |
此参数的默认值为 10/8(紧凑)。 |
arrow_spacing |
int |
此参数用于调整箭头的间隔,以避免重叠,以像素为单位。 |
此参数的默认值为 20/12(紧凑)。 |
word_spacing |
int |
此参数用于调整单词和弧线之间的垂直间距,以像素为单位。 |
此参数的默认值为 45。 |
distance |
int |
此参数用于调整单词之间的距离,以像素为单位。 |
此参数的默认值为 175/150(紧凑)。 |
Named Entity Visualizer options
下表解释了命名实体可视化程序选项:
NAME |
TYPE |
DESCRIPTION |
DEFAULT |
ents |
list |
它表示要高亮的实体类型。对所有类型均设为无。 |
默认值为 None。 |
colors |
Dict |
顾名思义,它用于颜色覆盖。大写的实体类型必须映射到颜色名称。 |
{} |
spaCy - Utility Functions
我们可以在 spacy/util.py 中找到 spaCy 的一些实用工具函数。让我们了解这些函数及其用法。
实用工具函数在下表中列出,并附有说明。
Sr.No. |
Utility Function & Description |
1 |
Util.get_data_path 获取数据目录的路径。 |
2 |
Util.set_data_path 设置数据目录的自定义路径。 |
3 |
Util.get_lang_class 导入并加载语言类。 |
4 |
Util.set_lang_class 设置自定义语言类。 |
5 |
Util.lang_class_is_loaded 查找语言类是否已加载。 |
6 |
Util.load_model 此函数将加载模型。 |
7 |
Util.load_model_from_path 此函数将从数据目录路径加载模型。 |
8 |
Util.load_model_from_init_py 它是一个帮助函数,用于模型包的 load() 方法中。 |
9 |
Util.get_model_meta 从目录路径获取模型的 meta.json。 |
10 |
Util.update_exc 此函数将更新、验证并覆盖标记器期望。 |
11 |
Util.is_in_jupyter 检查我们是否正在从 Jupyter 笔记本中运行 spaCy。 |
12 |
Util.get_package_path 获取已安装 spaCy 包的路径。 |
13 |
Util.is_packageTo validate model packages. |
14 |
Util.compile_prefix_regex 此函数将编译一系列前缀规则以生成 regex 对象。 |
15 |
Util.compile_suffix_regex 此函数将编译一系列后缀规则以生成 regex 对象。 |
16 |
Util.compile_infix_regex 此函数将编译一系列中缀规则以生成 regex 对象。 |
17 |
Util.compounding 此函数将获得无限个复合值的序列。 |
18 |
Util.decaying 此函数将获得无限个线性衰减值的序列。 |
19 |
Util.itershuffleTo shuffle an iterator. |
20 |
Util.filter_spans 筛选跨度对象序列并删除重复项。 |
spaCy - Compatibility Functions
众所周知,所有 Python 代码都是用 Python2 和 Python3 的交集编写的,这在 Python 中可能不是那么好。但在 Cython 中这很简单。
spaCy 中的兼容性函数及其说明如下 −
Compatibility Function |
Description |
Spacy.compat() |
处理 Python 或平台兼容性。 |
compat.is_config() |
检查 Python 版本和操作系统 (OS) 的特定配置是否与用户的设置匹配。 |
Spacy.compat()
它是处理 Python 或平台兼容性的所有逻辑的函数。以一个下划线作为后缀来区别于其他内置函数。比如,unicode_。
下方表格中给出了几个示例 -
NAME |
PYTHON 2 |
PYTHON 3 |
compat.bytes_ |
str |
bytes |
compat.unicode_ |
unicode |
str |
compat.basestring_ |
basestring |
str |
compat.input_ |
raw_input |
input |
compat.path2str |
str(path) with .decode('utf8') |
str(path) |
Example
spacy.compat() 函数的一个示例如下 -
import spacy
from spacy.compat import unicode_
compat_unicode = unicode_("This is Tutorialspoint")
compat_unicode
Output
执行后,您将收到以下输出:
'This is Tutorialspoint'
compat.is_config()
它是检查 Python 版本和操作系统(OS)的特定配置是否与用户设置匹配的函数。此函数主要用于显示目标错误消息。
Arguments
下表解释了它的参数 −
NAME |
TYPE |
DESCRIPTION |
python2 |
Bool |
不管是否使用 Python 2.x 执行 spaCy。 |
python3 |
Bool |
不管是否使用 Python 3.x 执行 spaCy。 |
windows |
Bool |
不管是否在 Windows 上执行 spaCy。 |
linux |
Bool |
不管是否在 Linux 上执行 spaCy。 |
OS X |
Bool |
不管是否在 OS X 上执行 spaCy。 |
Example
compat.is_config() 函数的一个示例如下 -
import spacy
from spacy.compat import is_config
if is_config(python3=True, windows=True):
print("Spacy is executing on Python 3 on Windows.")
Output
执行后,您将收到以下输出:
Spacy is executing on Python 3 on Windows.
spaCy - Containers
在本章中,我们将学习 spaCy 容器。让我们先了解一下 spaCy 容器所在的类。
Classes
我们有四个类由 spaCy 容器组成 -
Doc Class
Doc 类中使用的参数、序列化字段和方法解释如下:
Arguments
下表解释了它的参数 −
NAME |
TYPE |
DESCRIPTION |
text |
unicode |
此属性表示 Unicode 文档文本。 |
mem |
Pool |
顾名思义,此属性用于文档的本地内存堆,供其拥有的所有 C 数据使用。 |
vocab |
Vocab |
它存储所有词汇类型。 |
tensor |
ndarray |
它在版本 2.0 中引入,是密集型矢量表示的容器。 |
cats |
dict |
它在版本 2.0 中引入,此属性将标签映射到应用于文档的类别的分数。请注意,标签为字符串,分数应为浮点值。 |
user_data |
- |
它表示通用存储区域,主要用于用户自定义数据。 |
lang |
int |
它在版本 2.1 中引入,表示文档词汇的语言。 |
lang_ |
unicode |
它在版本 2.1 中引入,表示文档词汇的语言。 |
is_tagged |
bool |
它是一个标记,指示文档是否已标注词性。如果 Doc 为空,则它会返回 True。 |
is_parsed |
bool |
它是一个标记,指示文档是否已进行句法解析。如果 Doc 为空,则它会返回 True。 |
is_sentenced |
bool |
它是一个标记,指示是否已对文档应用句子边界。如果 Doc 为空,则它会返回 True。 |
is_nered |
bool |
此属性在版本 2.1 中引入。它是表明是否已设置命名实体的标记。如果 Doc 为空,它会返回 True。如果任何标记均具有实体标记集,它也将返回 True。 |
sentiment |
float |
它将返回文档的积极性/消极性分数(如果有),为浮点数。 |
user_hooks |
dict |
此属性是允许自定义 Doc’s 属性的字典。 |
user_token_hooks |
dict |
此属性是允许自定义 Token 子级的属性的字典。 |
user_span_hooks |
dict |
此属性是允许自定义 Span 子级的属性的字典。 |
_ |
Underscore |
它表示添加自定义属性扩展的用户空间。 |
Serialization fields
在序列化过程中,spaCy 将导出一些数据字段以还原对象的各个方面。我们还可以通过 exclude 参数传递名称,从序列化中排除数据字段。
下表解释了序列化字段:
Sr.No. |
Name & Description |
1 |
Text 它表示 Doc.text 属性的值。 |
2 |
Sentiment 它表示 Doc.sentiment 属性的值。 |
3 |
Tensor 它表示 Doc.tensor 属性的值。 |
4 |
user_data 它表示 Doc.user_data 字典的值。 |
5 |
user_data_keys 它表示 Doc.user_data 字典的键。 |
6 |
user_data_values 它表示 Doc.user_data 字典的值。 |
Methods
以下是 Doc 类中使用的函数 −
Sr.No. |
Method & Description |
1 |
Doc._ init _ 构造 Doc 对象。 |
2 |
Doc._ getitem _ 从某个特定位置获取一个 token 对象。 |
3 |
Doc._ iter _ 遍历那些 token 对象,其中可以轻松读取注释。 |
4 |
Doc._ len _ 获取文档中的 token 总数。 |
ClassMethods
以下是 Doc 类中使用的类方法 −
Sr.No. |
Classmethod & Description |
1 |
Doc.set_extension 它会在 Doc 中定义一个自定义属性。 |
2 |
Doc.get_extension 它会按名称查找以前扩展的属性。 |
3 |
Doc.has_extension 它会检查 Doc 类中是否已注册扩展。 |
4 |
Doc.remove_extension 它会移除 Doc 类中以前注册的扩展。 |
Doc Class ContextManager and Property
在本章中,我们来了解 spaCy 中的上下文管理器和 Doc 类的属性。
Context Manager
它是一个上下文管理器,用于处理 Doc 类的重新 token 化。现在,我们来详细了解一下它。
Doc.retokenize
当您使用此上下文管理器时,它首先会修改 Doc 的 token 化,存储起来,然后在上下文管理器存在时一次性做出所有的改变。
此上下文管理器的优势在于它更有效率且更不容易出错。
Example 1
请参阅下面给出的 Doc.retokenize 上下文管理器示例 −
import spacy
nlp_model = spacy.load("en_core_web_sm")
from spacy.tokens import Doc
doc = nlp_model("This is Tutorialspoint.com.")
with doc.retokenize() as retokenizer:
retokenizer.merge(doc[0:0])
doc
Output
您将看到以下输出 −
is Tutorialspoint.com.
Example 2
以下是 Doc.retokenize 上下文管理器的另一个示例 −
import spacy
nlp_model = spacy.load("en_core_web_sm")
from spacy.tokens import Doc
doc = nlp_model("This is Tutorialspoint.com.")
with doc.retokenize() as retokenizer:
retokenizer.merge(doc[0:2])
doc
Output
您将看到以下输出 −
This is Tutorialspoint.com.
Retokenize Methods
下面是表,它简要提供了有关 retokenize 方法的信息。下表详细介绍了两种 retokenize 方法。
Sr.No. |
Method & Description |
1 |
Retokenizer.merge 这将标记一个用于合并的跨度。 |
2 |
Retokenizer.split 这将标记一个用于拆分为指定 orth 的标记。 |
Properties
下面介绍了 spaCy 中 Doc 类的属性 −
Sr.No. |
Doc Property & Description |
1 |
Doc.ents 用于文档中的命名实体。 |
2 |
Doc.noun_chunks 用于在一个特定文档中迭代基本名词短语。 |
3 |
Doc.sents 用于在一个特定文档中迭代句子。 |
4 |
Doc.has_vector 表示布尔值,指示单词向量是否与对象关联。 |
5 |
Doc.vectorRepresents a real-valued meaning. |
6 |
Doc.vector_norm 表示文档的向量表示的 L2 范数。 |
spaCy - Container Token Class
本章将帮助读者理解 spaCy 中的 Token 类。
Token Class
如前面所讨论的,Token 类表示单独的标记,如单词、标点符号、空格、符号等。
Attributes
下表解释了它的属性 −
NAME |
TYPE |
DESCRIPTION |
Doc |
Doc |
它表示父文档。 |
sent |
Span |
在版本 2.0.12 中引入,表示此标记所隶属的句子跨度。 |
Text |
unicode |
它是 Unicode 原生文本内容。 |
text_with_ws |
unicode |
它表示文本内容,带尾随空格字符(如果存在)。 |
whitespace_ |
unicode |
顾名思义,就是尾随空格字符(如果存在)。 |
Orth |
int |
这是 Unicode 原文文本内容的 ID。 |
orth_ |
unicode |
这是 Unicode 原文文本内容,与 Token.text 相同。此文本内容主要用于与其他属性保持一致。 |
Vocab |
Vocab |
此属性代表父级 Doc 的词库对象。 |
tensor |
ndarray |
从 2.1.7 版本开始引入,表示标记在父级 Doc 张量的切片。 |
Head |
Token |
这是此标记的句法父级。 |
left_edge |
Token |
顾名思义,这是此标记的句法后代的最左标记。 |
right_edge |
Token |
顾名思义,这是此标记的句法后代的最右标记。 |
I |
Int |
表示标记在父级文档中的索引的整数类型属性。 |
ent_type |
int |
这是命名实体类型。 |
ent_type_ |
unicode |
这是命名实体类型。 |
ent_iob |
int |
这是命名实体标记的 IOB 代码。此处,3 = 标记开始一个实体,2 = 标记在实体外部,1 = 标记在实体内部,0 = 未设置实体标记。 |
ent_iob_ |
unicode |
这是命名实体标记的 IOB 代码。“B” = 标记开始一个实体,“I” = 标记在实体内部,“O” = 标记在实体外部,"" = 未设置实体标记。 |
ent_kb_id |
int |
从 2.2 版本开始引入,表示引用此标记是其一部分的命名实体的知识库 ID。 |
ent_kb_id_ |
unicode |
从 2.2 版本开始引入,表示引用此标记是其一部分的命名实体的知识库 ID。 |
ent_id |
int |
该标记是实体的 ID(如有)。此属性当前并未使用,但可能用于共指解析。 |
ent_id_ |
unicode |
该标记是实体的 ID(如有)。此属性当前并未使用,但可能用于共指解析。 |
Lemma |
int |
词干是标记的基本形式,没有任何屈折后缀。 |
lemma_ |
unicode |
这是标记的基本形式,没有任何屈折后缀。 |
Norm |
int |
此属性代表标记的规范。 |
norm_ |
unicode |
此属性代表标记的规范。 |
Lower |
int |
顾名思义,它是令牌的小写形式。 |
lower_ |
unicode |
它也是令牌文本的小写形式,等效于 Token.text.lower()。 |
Shape |
int |
为了显示正字法特征,此属性用于转换标记的字符串。 |
shape_ |
unicode |
为了显示正字法特征,此属性用于转换标记的字符串。 |
Prefix |
int |
它是令牌开头的长度为 N 的子字符串的哈希值。默认值为 N=1。 |
prefix_ |
unicode |
它是令牌开头的长度为 N 的子字符串。默认值为 N=1。 |
Suffix |
int |
它是令牌结尾的长度为 N 的子字符串的哈希值。默认值为 N=3。 |
suffix_ |
unicode |
它是令牌结尾的长度为 N 的子字符串。默认值为 N=3。 |
is_alpha |
bool |
此属性表示令牌是否由字母字符组成? 它等效于 token.text.isalpha()。 |
is_ascii |
bool |
此属性表示令牌是否由 ASCII 字符组成? 它等效于 all(ord(c) < 128 for c in token.text)。 |
is_digit |
Bool |
此属性表示令牌是否由数字组成? 它等效于 token.text.isdigit()。 |
is_lower |
Bool |
此属性表示令牌是否为小写? 它等效于 token.text.islower()。 |
is_upper |
Bool |
此属性表示令牌是否为大写? 它等效于 token.text.isupper()。 |
is_title |
bool |
此属性表示令牌是否为标题形式? 它等效于 token.text.istitle()。 |
is_punct |
bool |
此属性表示令牌是否标点符号? |
is_left_punct |
bool |
此属性表示令牌是否左标点符号,例如“(“? |
is_right_punct |
bool |
此属性表示令牌是否右标点符号,例如“)”? |
is_space |
bool |
此属性表示令牌是否由空格字符组成? 它等效于 token.text.isspace()。 |
is_bracket |
bool |
此属性表示令牌是否为括号? |
is_quote |
bool |
此属性表示令牌是否引号? |
is_currency |
bool |
此属性在版本 2.0.8 中引入,它表示令牌是否为货币符号? |
like_url |
bool |
此属性表示令牌是否类似于 URL? |
like_num |
bool |
此属性表示标记是否表示一个数字? |
like_email |
bool |
此属性表示标记是否类似于电子邮件地址? |
is_oov |
bool |
此属性表示标记是否具有词向量? |
is_stop |
bool |
此属性表示标记是否属于"停用列表"? |
Pos |
int |
它表示通用词性标记集中的词性粗标注。 |
pos_ |
unicode |
它表示通用词性标记集中的词性粗标注。 |
Tag |
int |
它表示词性细标注。 |
tag_ |
unicode |
它表示词性细标注。 |
Dep |
int |
此属性表示句法依存关系。 |
dep_ |
unicode |
此属性表示句法依存关系。 |
Lang |
Int |
此属性表示父文档词汇的语言。 |
lang_ |
unicode |
此属性表示父文档词汇的语言。 |
Prob |
float |
它是标记词类型的平滑对数似然估计值。 |
Idx |
int |
它是标记在父文档中的字符偏移量。 |
Sentiment |
float |
它表示一个标量值,指示标记的正负性。 |
lex_id |
int |
它表示标记词法类型的顺序 ID,用于对表进行索引。 |
Rank |
int |
它表示标记词法类型的顺序 ID,用于对表进行索引。 |
Cluster |
int |
它是 Brown cluster ID。 |
_ |
Underscore |
它表示添加自定义属性扩展的用户空间。 |
Methods
以下是 Token 类中使用的方法 -
Sr.No. |
Method & Description |
1 |
Token._ init _ 用于构建 Token 对象。 |
2 |
Token.similarity 用于计算语义相似度估计值。 |
3 |
Token.check_flag 用于检查布尔标志的值。 |
4 |
Token._ len _ 用于计算标记中的 Unicode 字符数量。 |
ClassMethods
以下是 Token 类中使用的类方法 -
Sr.No. |
Classmethod & Description |
1 |
Token.set_extension 它在令牌上定义一个自定义属性。 |
2 |
Token.get_extension 它将按名称查找以前的扩展。 |
3 |
Token.has_extension 它将检查令牌类上是否已注册扩展。 |
4 |
Token.remove_extension 它将移除令牌类上以前注册的扩展。 |
spaCy - Token Properties
在本章中,我们将了解与 spaCy 中令牌类有关的属性。
Properties
令牌属性及其各自的描述如下:
Sr.No. |
Token Property & Description |
1 |
Token.ancestors 用于此令牌的句法后代的最右令牌。 |
2 |
Token.conjuncts 用于返回协调令牌的元组。 |
3 |
Token.children 用于返回令牌的直接句法子项的序列。 |
4 |
Token.lefts 用于单词的向左直接子项。 |
5 |
Token.rights 用于单词的向右直接子项。 |
6 |
Token.n_rights 用于单词的向右直接子项数。 |
7 |
Token.n_lefts 用于单词的向左直接子项数。 |
8 |
Token.subtree 这会产生一个包含令牌及其所有令牌句法后代的序列。 |
9 |
Token.vector 这表示实值含义。 |
10 |
Token.vector_norm 这表示令牌向量表示的 L2 范数。 |
Token.ancestors
此令牌属性用于此令牌的句法后代的最右令牌。
Example
下面给出了令牌的 ancestors 属性示例 -
import spacy
nlp_model = spacy.load("en_core_web_sm")
from spacy.tokens import Token
doc = nlp_model("Give it back! He pleaded.")
it_ancestors = doc[1].ancestors
[t.text for t in it_ancestors]
Output
['Give']
Token.conjuncts
此令牌属性用于返回协调令牌的元组。在此处,令牌本身将不包括在内。
Example
以下是 Token.conjuncts 属性的示例:
import spacy
nlp_model = spacy.load("en_core_web_sm")
from spacy.tokens import Token
doc = nlp_model("I like cars and bikes")
cars_conjuncts = doc[2].conjuncts
[t.text for t in cars_conjuncts]
Output
输出如下:
['bikes']
Token.children
此标记属性用于返回标记的直接句法子级的序列。
Example
以下是 Token.children 属性的示例:
import spacy
nlp_model = spacy.load("en_core_web_sm")
from spacy.tokens import Token
doc = nlp_model("This is Tutorialspoint.com.")
give_child = doc[1].children
[t.text for t in give_child]
Output
['This', 'Tutorialspoint.com', '.']
Token.lefts
此标记属性用于单词的左向直接子级。这会在句法依存关系解析中。
Example
以下是 Token.lefts 属性的示例:
import spacy
nlp_model = spacy.load("en_core_web_sm")
from spacy.tokens import Token
doc = nlp_model("This is Tutorialspoint.com.")
left_child = [t.text for t in doc[1].lefts]
left_child
Output
你将获得以下输出 -
['This']
Token.rights
此标记属性用于单词的右向直接子级。这会在句法依存关系解析中。
Example
以下是 Token.rights 属性的示例:
import spacy
nlp_model = spacy.load("en_core_web_sm")
from spacy.tokens import Token
doc = nlp_model("This is Tutorialspoint.com.")
right_child = [t.text for t in doc[1].rights]
right_child
Output
['Tutorialspoint.com', '.']
Token.n_rights
此标记属性用于单词的右向直接子级的数量。这会在句法依存关系解析中。
Example
以下是 Token.n_rights 属性的示例:
import spacy
nlp_model = spacy.load("en_core_web_sm")
from spacy.tokens import Token
doc = nlp_model("This is Tutorialspoint.com.")
doc[1].n_rights
Output
2
Token.n_lefts
此标记属性用于单词的左向直接子级的数量。这会在句法依存关系解析中。
Example
以下是 Token.n_lefts 属性的示例:
import spacy
nlp_model = spacy.load("en_core_web_sm")
from spacy.tokens import Token
doc = nlp_model("This is Tutorialspoint.com.")
doc[1].n_lefts
Output
输出如下 −
1
Token.subtree
此标记属性会生成一个包含标记和所有标记句法后代的序列。
Example
以下是 Token.subtree 属性的示例:
import spacy
nlp_model = spacy.load("en_core_web_sm")
from spacy.tokens import Token
doc = nlp_model("This is Tutorialspoint.com.")
subtree_doc = doc[1].subtree
[t.text for t in subtree_doc]
Output
['This', 'is', 'Tutorialspoint.com', '.']
Token.vector
此标记属性表示实值含义。它会返回一个表示标记语义的一维数组。
Example 1
以下是 Token.vector 属性的示例:
import spacy
nlp_model = spacy.load("en_core_web_sm")
doc = nlp_model("The website is Tutorialspoint.com.")
doc.vector.dtype
Output
输出如下 −
dtype('float32')
Example 2
以下是 Token.vector 属性的另一个示例:
doc.vector.shape
Output
输出如下 −
(96,)
spaCy - Container Span Class
本章将帮助你了解 spaCy 中的 Span 类。
Span Class
这是上面我们讨论过的 Doc 对象中的切片。
Attributes
下表解释了它的参数 −
NAME |
TYPE |
DESCRIPTION |
doc |
Doc |
它表示父文档。 |
tensor V2.1.7 |
Ndarray |
在 2.1.7 版本中引入,表示父 Doc’s 张量的跨度切片。 |
sent |
Span |
实际上是这个跨度所在的句子跨度。 |
start |
Int |
此属性是跨度开始处的标记偏移量。 |
end |
Int |
此属性是跨度结尾处的标记偏移量。 |
start_char |
Int |
整型属性,表示跨度开始处的字符偏移量。 |
end_char |
Int |
整型属性,表示跨度结尾处的字符偏移量。 |
text |
Unicode |
它是表示跨度文本的 Unicode。 |
text_with_ws |
Unicode |
它表示跨度的文本内容,如果最后一个标记有尾随空格字符,则也会有尾随空格字符。 |
orth |
Int |
此属性是逐字文本内容的 ID。 |
orth_ |
Unicode |
它是 Unicode 逐字文本内容,与 Token.text 相同。此文本内容主要用于与其他属性保持一致性。 |
label |
Int |
此整型属性是跨度标签的哈希值。 |
label_ |
Unicode |
它是跨度的标签。 |
lemma_ |
Unicode |
它是跨度的词根。 |
kb_id |
Int |
它表示知识库 ID 的哈希值,该 ID 由跨度引用。 |
kb_id_ |
Unicode |
它表示跨度引用的知识库 ID。 |
ent_id |
Int |
此属性表示标记是其实例的命名实体的哈希值。 |
ent_id_ |
Unicode |
此属性表示标记是其实例的命名实体的字符串 ID。 |
sentiment |
Float |
一个浮点类型标量值,表示跨度的正负性。 |
_ |
Underscore |
它代表了用于添加自定义属性扩展的用户空间。 |
Methods
跨度类中使用的方法如下 -
Sr.No. |
Method & Description |
1 |
Span._ init _ 从片段 doc[start : end] 构建跨度对象。 |
2 |
Span._ getitem _ 获取特定位置 n 处的标记对象,其中 n 为整数。 |
3 |
Span._ iter _ 遍历可轻松访问其标注的那些标记对象。 |
4 |
Span._ len _ 获取跨度中标记的数量。 |
5 |
Span.similarity 进行语义相似性估计。 |
6 |
Span.merge 对文档重新标记,将跨度合并成单个标记。 |
ClassMethods
跨度类中使用的类方法如下 -
Sr.No. |
Classmethod & Description |
1 |
Span.set_extension 在跨度上定义自定义属性。 |
2 |
Span.get_extension 通过名称查找以前的扩展。 |
3 |
Span.has_extension 检查扩展名是否已在跨度类上注册。 |
4 |
Span.remove_extension 删除以前在跨度类上注册的扩展名。 |
spaCy - Span Class Properties
在本章中,让我们学习 spaCy 中跨度的属性。
Properties
以下是 spaCy 中跨度类的属性。
Sr.No. |
Span Properties & Description |
1 |
Span.ents 用于跨度中的命名实体。 |
2 |
Span.as_doc 用于创建与跨度对应的新的文档对象。它还将复制其数据。 |
3 |
Span.root 向标记提供到句子的根部的最短路径。 |
4 |
Span.lefts 用于跨度左侧的标记,它们的头位于跨度内。 |
5 |
Span.rights 用于位于 span 右侧并且头部位于 span 之内的标记。 |
6 |
Span.n_rights 用于位于 span 右侧并且头部位于 span 之内的标记。 |
7 |
Span.n_lefts 用于位于 span 左侧并且头部位于 span 之内的标记。 |
8 |
Span.subtree 返回位于 span 之内并且从 span 派生的标记。 |
9 |
Span.vector Represents a real-valued meaning. |
10 |
Span.vector_norm 表示文档向量表示的 L2 范数。 |
Span.ents
此 Span 属性用于 span 中的命名实体。如果已应用实体识别器,则此属性将返回命名实体 span 对象元组。
Example 1
Span.ents 属性的一个示例如下所示 −
import spacy
nlp_model = spacy.load("en_core_web_sm")
doc = nlp_model("This is Tutorialspoint.com.")
span = doc[0:5]
ents = list(span.ents)
ents[0].label
Output
您将收到以下输出 −
383
Example 2
Span.ents 属性的另一个示例如下所示 −
ents[0].label_
Output
您将收到以下输出 −
‘ORG’
Example 3
以下是 Span.ents 属性的另一个示例 −
ents[0].text
Output
您将收到以下输出 −
'Tutorialspoint.com'
Span.as_doc
顾名思义,此 Span 属性将创建一个对应于 Span 的新 Doc 对象。它还将拥有数据副本。
Example
Span.as_doc 属性的一个示例如下所示 −
import spacy
nlp_model = spacy.load("en_core_web_sm")
doc = nlp_model("I like India.")
span = doc[2:4]
doc2 = span.as_doc()
doc2.text
Output
您将收到以下输出 −
India
Span.root
此 Span 属性将提供标记与句子根之间的最短路径。如果有多个标记在树中高度较高,它将采用第一个标记。
Example 1
Span.root 属性的一个示例如下所示 −
import spacy
nlp_model = spacy.load("en_core_web_sm")
doc = nlp_model("I like New York in Autumn.")
i, like, new, york, in_, autumn, dot = range(len(doc))
doc[new].head.text
Output
您将收到以下输出 −
'York'
Example 2
Span.root 属性的另一个示例如下所示 −
doc[york].head.text
Output
您将收到以下输出 −
'like'
Example 3
以下是 Span.root 属性的一个示例 −
new_york = doc[new:york+1]
new_york.root.text
Output
您将收到以下输出 −
'York'
Span.lefts
此 Span 属性用于 span 左侧并且头部位于 span 之内的标记。
Example
Span.lefts 属性的一个示例如下所示 −
import spacy
nlp_model = spacy.load("en_core_web_sm")
doc = nlp_model("This is Tutorialspoint.com.")
lefts = [t.text for t in doc[1:4].lefts]
lefts
Output
您将收到以下输出 −
['This']
Span.rights
此 Span 属性用于 span 右侧并且头部位于 span 之内的标记。
Example
Span.rights 属性的一个示例如下所示 −
import spacy
nlp_model = spacy.load("en_core_web_sm")
doc = nlp_model("This is Tutorialspoint.com.")
rights = [t.text for t in doc[1:2].rights]
rights
Output
您将收到以下输出 −
['Tutorialspoint.com', '.']
Span.n_rights
此 Span 属性用于 span 右侧并且头部位于 span 之内的标记。
Example
Span.n_rights 属性示例如下所示 −
import spacy
nlp_model = spacy.load("en_core_web_sm")
doc = nlp_model("This is Tutorialspoint.com.")
doc[1:2].n_rights
Output
您将收到以下输出 −
2
Span.n_lefts
此 Span 属性用于那些在其头部位于 span 内的 span 左侧的标记中。
Example
Span.n_lefts 属性示例如下所示 −
import spacy
nlp_model = spacy.load("en_core_web_sm")
doc = nlp_model("This is Tutorialspoint.com.")
doc[1:2].n_lefts
Output
您将收到以下输出 −
1
Span.subtree
此 Span 属性产生 span 内的标记以及从它们派生的标记。
Example
Span.subtree 属性示例如下所示 −
import spacy
nlp_model = spacy.load("en_core_web_sm")
doc = nlp_model("This is Tutorialspoint.com.")
subtree = [t.text for t in doc[:1].subtree]
subtree
Output
您将收到以下输出 −
['This']
spaCy - Container Lexeme Class
在本章中,spaCy 中的 Lexeme 类进行了详细说明。
Lexeme Class
Lexeme 类是词汇中的一个条目。它没有字符串上下文。与一个单词标记相反,它是一种单词类型。这就是它没有 POS(词性)标记、依存关系分析或词干的原因。
Attributes
下表解释了它的参数 −
NAME |
TYPE |
DESCRIPTION |
vocab |
Vocab |
它表示词条的词汇。 |
text |
unicode |
表示逐字文本内容的 Unicode 属性。 |
orth |
int |
它是一个表示逐字文本内容 ID 的整型属性。 |
orth_ |
unicode |
它与 Lexeme.text 相同的 Unicode 逐字文本内容。此文本内容主要用于与其他属性保持一致。 |
rank |
int |
它表示词条词法类型的顺序 ID,用于索引表。 |
flags |
int |
它表示词条二进制标记的容器。 |
norm |
int |
此属性表示词条的范数。 |
norm_ |
unicode |
此属性表示词条的范数。 |
lower |
int |
如同该名称所暗示的那样,这是该单词的小写形式。 |
lower_ |
unicode |
它也是该单词的小写形式。 |
shape |
int |
为了显示正字法特征,此属性用于转换单词的字符串。 |
shape_ |
unicode |
为了显示正字法特征,此属性用于转换单词的字符串。 |
prefix |
int |
这是一个从单词开头开始的长度 N 子串的哈希值。默认值为 N=1。 |
prefix_ |
unicode |
这是一个从单词开头开始的长度 N 子串。默认值为 N=1。 |
suffix |
int |
这是一个从单词结尾开始的长度 N 子串的哈希值。默认值为 N=3。 |
suffix_ |
unicode |
这是一个从单词结尾开始的长度 N 子串。默认值为 N=3。 |
is_alpha |
bool |
该属性表示词素是否包含字母字符?它等效于 lexeme.text.isalpha()。 |
is_ascii |
bool |
该属性表示词素是否包含 ASCII 字符?它等效于 all(ord(c) < 128 for c in lexeme.text)。 |
is_digit |
Bool |
该属性表示词素是否包含数字?它等效于 lexeme.text.isdigit()。 |
is_lower |
Bool |
该属性表示词素是小写还是非小写?它等效于 lexeme.text.islower()。 |
is_upper |
Bool |
该属性表示词素是大写还是非大写?它等效于 lexeme.text.isupper()。 |
is_title |
bool |
该属性表示词素标题还是非标题?它等效于 lexeme.text.istitle()。 |
is_punct |
bool |
该属性表示词素是否为标点符号? |
is_left_punct |
bool |
该属性表示词素是左标点符号(例如 '(')? |
is_right_punct |
bool |
该属性表示词素是右标点符号(例如 ')')? |
is_space |
bool |
该属性表示词素是否包含空白字符?它等效于 lexeme.text.isspace()。 |
is_bracket |
bool |
该属性表示词素是否为括号? |
is_quote |
bool |
该属性表示词素是否为引号? |
is_currency |
bool |
在 2.0.8 版本中引入,此属性表示词素是否为货币符号? |
like_url |
bool |
此属性表示词素是否类似于 URL? |
like_num |
bool |
此属性表示词素是否表示数字? |
like_email |
bool |
此属性表示词素是否类似于电子邮件地址? |
is_oov |
bool |
此属性表示词素是否具有词向量? |
is_stop |
bool |
此属性表示词素是否属于“停用词表”? |
Lang |
Int |
此属性表示父文档词汇的语言。 |
lang_ |
unicode |
此属性表示父文档词汇的语言。 |
Prob |
float |
它是词素词型的平滑对数概率估计。 |
cluster |
int |
它表示布朗簇 ID。 |
Sentiment |
float |
它表示一个标量值,表示词素的正负性。 |
Methods
以下是 Lexeme 类中使用的方法 −
Sr.No. |
Methods & Description |
1 |
Lexeme._ init _ 构造 Lexeme 对象。 |
2 |
Lexeme.set_flag 更改布尔标记的值。 |
3 |
Lexeme.check_flag 检查布尔标记的值。 |
4 |
Lexeme.similarity 计算语义相似度估计。 |
Lexeme._ init _
这是 Lexeme 类最有用的方法之一。顾名思义,用于构造 Lexeme 对象。
Arguments
下表解释了它的参数 −
NAME |
TYPE |
DESCRIPTION |
Vocab |
Vocab |
此参数表示父词表。 |
Orth |
int |
它是词素的 orth id。 |
Example
下面给出了 Lexeme._ init _ 方法的示例 −
import spacy
nlp_model = spacy.load("en_core_web_sm")
doc = nlp_model("The website is Tutorialspoint.com.")
lexeme = doc[3]
lexeme.text
Output
运行代码后,你将看到以下输出 −
'Tutorialspoint.com'
Lexeme.set_flag
此方法用于更改布尔标记的值。
Arguments
下表解释了它的参数 −
NAME |
TYPE |
DESCRIPTION |
flag_id |
Int |
它表示要设置的标志的属性 ID。 |
value |
bool |
它是标志的新值。 |
Example
以下提供 Lexeme.set_flag 方法的一个示例:
import spacy
nlp_model = spacy.load("en_core_web_sm")
New_FLAG = nlp_model.vocab.add_flag(lambda text: False)
nlp_model.vocab["Tutorialspoint.com"].set_flag(New_FLAG, True)
New_FLAG
Output
运行代码后,你将看到以下输出 −
25
Lexeme.check_flag
此方法用于检查布尔标志的值。
Argument
下表解释了它的参数:
NAME |
TYPE |
DESCRIPTION |
flag_id |
Int |
它表示要检查的标志的属性 ID。 |
Example 1
以下提供 Lexeme.check_flag 方法的一个示例:
import spacy
nlp_model = spacy.load("en_core_web_sm")
library = lambda text: text in ["Website", "Tutorialspoint.com"]
my_library = nlp_model.vocab.add_flag(library)
nlp_model.vocab["Tutorialspoint.com"].check_flag(my_library)
Output
运行代码后,你将看到以下输出 −
True
Example 2
以下提供 Lexeme.check_flag 方法的另一示例:
nlp_model.vocab["Hello"].check_flag(my_library)
Output
运行代码后,你将看到以下输出 −
False
Lexeme.similarity
此方法用于计算语义相似度估计值。默认情况下,对向量使用余弦定理。
Argument
下表解释了它的参数:
NAME |
TYPE |
DESCRIPTION |
Other |
- |
它是将执行比较的对象。默认情况下,它将接受 Doc、Span、Token 和 Lexeme 对象。 |
Example
以下提供 Lexeme.similarity 方法的一个示例:
import spacy
nlp_model = spacy.load("en_core_web_sm")
apple = nlp.vocab["apple"]
orange = nlp.vocab["orange"]
apple_orange = apple.similarity(orange)
orange_apple = orange.similarity(apple)
apple_orange == orange_apple
Output
运行代码后,你将看到以下输出 −
True
Properties
以下是 Lexeme 类的属性。
Sr.No. |
Property & Description |
1 |
Lexeme.vector 它将返回一个一维数组,表示词素的语义。 |
2 |
Lexeme.vector_norm 它表示词素的向量表示的 L2 范数。 |
spaCy - Training Neural Network Model
在本章中,让我们学习如何在 spaCy 中训练神经网络模型。
在这里,我们将了解如何更新 spaCy 的统计模型以将其定制用于我们的用例。例如,要预测在线评论中的一个新的实体类型。要自定义,我们首先需要训练自己的模型。
Steps for Training
让我们了解在 spaCy 中训练神经网络模型的步骤。
-
步骤 1- Initialization - 如果您没有采用预训练模型,那么首先我们需要使用 nlp.begin_training 随机初始化模型权重。
-
步骤 2- Prediction - 下一步,我们需要使用当前权重预测一些示例。可以通过调用 nlp.updates 来完成。
-
步骤 3 − Compare - 现在,模型将根据真实标签检查预测。
-
步骤 4 − Calculate - 在进行比较后,我们将决定如何更改权重以在下次预测中获得更好的结果。
-
步骤 5 − Update - 最后对当前权重进行微小更改,然后挑选下一批示例。继续对您获取的每批示例调用 nlp.updates 。
现在让我们借助以下图表了解这些步骤 −
这里 -
-
Training Data - 训练数据是示例及其注释。这些是希望用其更新模型的示例。
-
Text - 它表示输入文本,模型应为其预测一个标签。它应该是句子、段落或较长的文档。
-
Label - 标签实际上是我们希望模型预测的结果。例如,它可以是文本类别。
-
Gradient - 梯度是我们应如何更改权重来减少误差。将在将预测标签与真实标签相比较后进行计算。
Training the Entity Recognizer
首先,实体识别器会提取文档并预测短语及其标签。
这意味着训练数据需要包含以下内容 −
-
Texts.
-
The entities they contain.
-
The entity labels.
每个标记只能是某个实体的一部分。因此,实体不能重叠。
我们还应该对实体及其周围语境进行训练,因为实体识别器在语境中预测实体。
可以通过向模型显示文本和一组字符偏移量来完成此操作。
举例如下:在下面给出的代码中,phone 是一个始于字符 0 并结束于字符 8 的小工具。
("Phone is coming", {"entities": [(0, 8, "GADGET")]})
在此,模型还应当学习除了实体以外的单词。
考虑以下Training实体识别程序的另一个示例:
("I need a new phone! Any suggestions?", {"entities": []})
主要目标应该是教会我们的实体识别程序模型在相似上下文中识别新的实体,即使这些实体不在训练数据中。
spaCy’s Training Loop
一些库为我们提供了处理模型训练的方法,但另一方面,spaCy 为我们提供了对训练循环的完全控制。
训练循环可以定义为执行的一系列步骤,用于更新和训练模型。
Steps for Training Loop
让我们看看训练循环的步骤,如下所示:
Step 1 – Loop - 第一步是循环,我们通常需要执行多次,以便模型可以从中学习。例如,如果您想为模型训练 20 次迭代,则需要循环 20 次。
Step 2 – Shuffle - 第二步是随机播放训练数据。我们需要为每次迭代随机播放数据。这有助于防止模型陷入次优解。
Step 3 – Divide – 稍后将数据分成批次。在此,我们将训练数据分成小批次。它有助于提高梯度估计的可读性。
Step 4 – Update - 下一步是为每个步骤更新模型。现在,我们需要更新模型并重新开始循环,直到达到最后一次迭代。
Step 5 – Save - 最后,我们可以保存此训练过的模型并在 spaCy 中使用它。
Example
以下示例说明了 spaCy 的训练循环:
DATA = [
("How to order the Phone X", {"entities": [(20, 28, "GADGET")]})
]
# Step1: Loop for 10 iterations
for i in range(10):
# Step2: Shuffling the training data
random.shuffle(DATA)
# Step3: Creating batches and iterating over them
for batch in spacy.util.minibatch(DATA):
# Step4: Splitting the batch in texts and annotations
texts = [text for text, annotation in batch]
annotations = [annotation for text, annotation in batch]
# Step5: Updating the model
nlp.update(texts, annotations)
# Step6: Saving the model
nlp.to_disk(path_to_model)
spaCy - Updating Neural Network Model
在本章中,我们将了解如何在 spaCy 中更新神经网络模型。
Reasons to update
以下是更新现有模型的原因 −
-
更新后的模型将在您的特定领域提供更好的结果。
-
在更新现有模型的同时,您可以了解特定问题的分类方案。
-
更新现有模型对于文本分类至关重要。
-
它对命名实体识别特别有用。
-
它对词性标注和依存关系分析也不是至关重要的。
Updating an existing model
借助 spaCy,我们可以使用更多数据更新现有的预训练模型。例如,我们可以更新模型以改进其在不同文本上的预测。
更新现有预训练模型非常有用,如果你想对其已知的类别进行改进。例如,“人”或“组织”。我们还可以更新现有预训练模型以添加新类别。
我们建议始终用新类别的示例以及该模型之前正确预测的其他类别的示例更新现有预训练模型。如果不这样做,那么改进新类别可能会损害其他类别。
Setting up a new pipeline
从以下给定的示例中,让我们了解如何从头开始设置一个新管道以更新现有模型-
-
首先,我们将使用以下 spacy.blank 方法从空白英语模型开始。它只包含语言数据和标记规则,并且没有任何管道组件。
-
然后,我们将创建一个空白实体识别器并将它添加到管道中。接下来,我们将使用以下 add_label ,将新的字符串标签添加到模型中。
-
现在,我们可以通过调用以下 nlp.begin_training ,用随机权重初始化该模型。
-
接下来,我们需要在每次迭代中随机对数据进行混洗。这是为了提高准确性。
-
一旦打乱顺序,就使用spaCy的微批处理函数将示例分成批次。最后,使用文本和注释更新模型,然后继续循环。
Examples
下面是 starting with blank English model by using spacy.blank 的一个示例-
nlp = spacy.blank("en")
以下是 creating blank entity recognizer and adding it to the pipeline 的一个示例-
ner = nlp.create_pipe("ner")
nlp.add_pipe(ner)
这是 adding a new label by using add_label 的一个示例-
ner.add_label("GADGET")
starting the training by using nlp.begin_training is as follows 的一个示例-
nlp.begin_training()
这是一个 training for iterations and shuffling the data on each iteration 的示例。
for itn in range(10):
random.shuffle(examples)
这是一个 dividing the examples into batches using minibatch utility function for batch in spacy.util.minibatch(examples, size=2) 的示例。
texts = [text for text, annotation in batch]
annotations = [annotation for text, annotation in batch]
下面是 updating the model with texts and annotations 的一个示例-
nlp.update(texts, annotations)