Spacy 简明教程

spaCy - Quick Guide

spaCy - Introduction

在本章中,我们将了解与 spaCy 相关的功能、扩展和可视化工具。此外,还提供了功能比较,帮助读者分析 spaCy 相较于自然语言工具包 (NLTK) 和 coreNLP 所提供的功能。此处,NLP 表示自然语言处理。

What is spaCy?

spaCy 由软件开发人员 Matthew HonnibalInes Montani 开发,是一个用于高级 NLP 的开源软件库。它用 PythonCython (Python 的 C 扩展,主要设计用于为 Python 语言程序提供类似 C 的性能)编写。

spaCy 是一个相对较新的框架,但它是最强大、最先进的库之一,用于实现 NLP。

Features

spaCy 的部分特性使其颇受欢迎,如下所述:

Fast ——spaCy 经过专门设计,尽可能快。

Accuracy ——spaCy 实现的标注依存关系分析器,使其成为同类中最精确的框架之一(达到最佳可用框架的 1% 以内)。

Batteries included ——spaCy 中包含的配套工具如下:

  1. Index preserving tokenization.

  2. “Alpha 分词”支持 50 多种语言。

  3. Part-of-speech tagging.

  4. Pre-trained word vectors.

  5. 内置简单漂亮的名实体和语法可视化器。

  6. 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

Benchmarks

spaCy 拥有全球最快的句法解析器,以及最高精度(在最佳有效精度范围内 1%)。

下表显示 spaCy 的基准 −

System

Year

Language

Accuracy

spaCy v2.x

2017

Python and Cython

92.6

spaCy v1.x

2015

Python and Cython

91.8

ClearNLP

2015

Java

91.7

CoreNLP

2015

Java

89.6

MATE

2015

Java

92.5

Turbo

2015

C++

92.4

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)ProdigyStreamlitFastAPIRay 等。

Parallel training and distributed computing with Ray

为了加速训练过程,我们可以使用 Ray,这是一个用于构建和运行分布式应用程序的快速且简单的框架,以在一台或多台远程机器上训练 spaCy。

New built-in pipeline components

这是 spaCy 的新版本,遵循新的可训练和基于规则的组件,我们可以将其添加到我们的管道中。

这些组件如下:

  1. SentenceRecognizer

  2. Morphologizer

  3. Lemmatizer

  4. AttributeRuler

  5. Transformer

  6. TrainablePipe

New pipeline component API

SpaCy v3.0 为我们提供了新的和改进的管道组件 API 和装饰器,这使得定义、配置、重用、训练和分析更加容易和方便。

Dependency matching

SpaCy v3.0 为我们提供了新的 DependencyMatcher ,它允许我们在依存解析器中匹配模式。它使用 Semgrex 运算符。

New and updated documentation

它有新的和更新的文档,包括 −

  1. 关于嵌入、转换和迁移学习的新使用指南。

  2. 关于培训管道和模型的指南。

  3. 关于 spaCy 新项目的详细信息和自定义管道组件的更新使用文档。

  4. 新的插图和新 API 参考页面记录了 spaCy 的 ML 模型架构和预测的数据格式。

Compatibility

spaCy 可以在所有主流操作系统上运行,如 Windows、macOS/OS X 和 Unix/Linux。它与 64 位 CPython 2.7/3.5+ 版本兼容。

Installing spaCy

下面阐释了安装 spaCy 的不同选项 −

Using package manager

spaCy 的最新发布版本可以通过两个包管理器 pipconda 获得。让我们了解如何使用它们来安装 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 发行版 −

  1. Header files

  2. A compiler

  3. pip

  4. virtualenv

  5. 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

Ubuntu

使用以下命令在 Ubuntu 操作系统 (OS) 中安装系统级依赖关系 −

sudo apt-get install build-essential python-dev git

macOS/OS X

实际上,macOS 和 OS X 已预装了 Python 和 git。因此,我们只需安装一个包含 CLT(命令行工具)的较新版本的 XCode。

Windows

在下面的表格中,给出了用于 Python 解释器官方分发的 Visual C++ Build Tools 或 Visual Studio Express 版本。根据您的要求选择一个并安装 −

Distribution

Version

Python 2.7

Visual Studio 2008

Python 3.4

Visual Studio 2010

Upgrading spaCy

升级 spaCy 时应牢记以下几点 −

  1. 从一个干净的虚拟环境开始。

  2. 要将 spaCy 升级到一个新的主要版本,则必须安装最新的兼容模型。

  3. 虚拟环境中不应存在旧的快捷方式链接或不兼容的模型包。

  4. 如果您已训练了自己的模型,则训练和运行时输入必须匹配,即您还必须使用较新版本重新训练模型。

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 −

  1. spaCy[cuda]

  2. spaCy[cuda90]

  3. spaCy[cuda91]

  4. spaCy[cuda92]

  5. spaCy[cuda100]

  6. spaCy[cuda101]

  7. spaCy[cuda102]

另一方面,如果您知道 cuda 的版本,显式指定符允许安装 cupy 。它将节省编译时间。

使用以下命令进行安装:

pip install -U spacy[cuda92]

在启用 GPU 的安装后,按照如下方式调用 spacy.prefer_gpuspacy.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() 通过其包名加载它。

Manually

你还可以手动下载数据,并将其放置到你选择的自定义目录中。

使用以下任何方式手动下载数据:

  1. 从最新版本中通过你的浏览器下载模型。

  2. 你可以使用存档文件的 URL(统一资源定位器)配置你自己的下载脚本。

下载完成后,我们可以在本地文件系统的任意地方放置模型包目录。现在,若要将其与 spaCy 一起使用,我们可以为数据目录创建一个快捷链接。

Using models with spaCy

这里说明了如何将模型与 spaCy 一起使用。

我们可以像上面讨论的那样手动下载所有 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

Importing as module

我们也可以 import 一个安装的模型,它可以无参数地调用其 load() 方法,如下所示:

import spaCy
import en_core_web_sm
nlp_example = en_core_web_sm.load()
my_doc = nlp_example("This is my first example.")
my_doc

Output

This is my first example.

Using own models

您也可以使用您训练过的模型。为此,您需要使用 Language.to_disk() 方法保存您的训练模型的状态。为了更方便地进行部署,您也可以将其包装为一个 Python 包。

Naming Conventions

通常, [lang_[name]] 的命名约定是 spaCy 预期其所有的模型包都遵循的一个这样的约定。

spaCy 的 model 的名称还可以进一步划分为以下三个组成部分:

  1. Type −它反映了模型的能力。例如, core 用于带有词汇表、句法和实体的通用模型。类似地, depent 仅用于词汇表、句法和实体。

  2. Genre −它显示模型的训练文本类型。例如, webnews

  3. Size −顾名思义,它是模型大小指示符。例如, sm (小)、 md (中)或 lg (大)。

Model versioning

模型版本控制反映了以下内容:

  1. Compatibility with spaCy.

  2. 主版本和次要版本。

例如,模型版本 r.s.t 翻译如下 −

  1. rspaCy major version. 例如,1 适用于 spaCy v1.x。

  2. sModel major version. 通过相同的代码,它限制了用户加载不同的主要版本。

  3. tModel minor version. 它显示相同模型结构,但参数值不同。例如,针对不同数量的迭代在不同数据上训练。

spaCy - Architecture

本章介绍了 spaCy 中的数据结构,并解释了对象及其作用。

Data Structures

spaCy 中的中心数据结构如下: −

  1. Doc − 它是 spaCy 架构中最重要的对象之一,拥有标记序列及其所有注释。

  2. 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() 时,将创建一个此类。

它包含以下内容 −

  1. Shared vocabulary

  2. Language data

  3. 从模型包加载的可选模型数据

  4. 包含标注器或解析器等组件的处理管道。

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。

Checking Available Commands

您可以使用 spacy - -help 命令查看可用命令。

下面给出了在 spaCy 中查看可用命令的示例 −

Example

C:\Users\Leekha>python -m spacy --help

Output

输出显示可用命令。

Available commands
download, link, info, train, pretrain, debug-data, evaluate, convert, package, init-model, profile, validate

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 函数将通过以下方式加载模型——

  1. Its shortcut links.

  2. 安装的模型包名称。

  3. A Unicode paths.

  4. Path-like object.

spaCy 将尝试按以下给定顺序解析加载参数——

  1. 如果模型从快捷方式链接或包名加载,spaCy 将将其视为 Python 包并调用模型自己的 load() 方法。

  2. 另一方面,如果模型从路径加载,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.blank()

它是 spacy.blank() 函数的双胞胎,创建一个给定语言类的空白模型。

Arguments

下表解释了它的参数 −

NAME

TYPE

DESCRIPTION

name

unicode

它表示要加载的语言类的 ISO 代码。

disable

list

此参数表示要禁用的管道组件的名称。

Example

在以下示例中,spacy.blank() 函数用于创建“en”语言类的空白模型。

nlp_model_en = spacy.blank("en")

spacy.info()

与 info 命令类似,spacy.info() 函数提供有关 spaCy 中安装、模型和本地设置的信息。

如果你想以字典形式获取模型元数据,可以将 meta-attribute 用在已加载模型的 nlp 对象上。例如, nlp.meta

Arguments

下表解释了它的参数 −

NAME

TYPE

DESCRIPTION

model

unicode

它是模型的快捷链接、包名称或路径。

markdown

bool

此参数会以 Markdown 形式打印信息。

Example

举例如下 −

spacy.info()
spacy.info("en")
spacy.info("de", markdown=True)

spacy.explain()

此函数会为以下项目提供说明 −

  1. POS tag

  2. Dependency label

  3. 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.prefer_gpu()

如果你有 GPU,此函数会分配数据并在 GPU 上执行操作。但是,如果数据和操作已经在 CPU 上可用,则不会将它们移至 GPU。它会返回一个布尔值输出,表示是否激活了 GPU。

Example

spacy.prefer_gpu() 的使用示例如下 −

import spacy
activated = spacy.prefer_gpu()
nlp = spacy.load("en_core_web_sm")

spacy.require_gpu()

此函数在版本 2.0.14 中引入,它还将在 GPU 上分配数据并执行操作。如果没有可用的 GPU,它将引发错误。如果数据和操作已经在 CPU 上可用,则不会将它们移至 GPU。

建议在导入 spacy 和加载任何模型之前立即调用此函数。它还将返回一个布尔类型输出。

Example

spacy.require_gpu() 函数的使用示例如下 −

import spacy
spacy.require_gpu()
nlp = spacy.load("en_core_web_sm")

spaCy - Visualization Function

可视化函数主要用于可视化依赖项,还用于在浏览器或笔记本中可视化命名实体。从spaCy版本2.0开始,有两个流行的可视化器,即 displaCydisplaCyENT

它们都是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

它提供以下输出 −

visualizing the dependency parse

我们还可以指定设置的字典以自定义布局。 它将在参数 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

给出以下输出 −

displacy

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

输出如下 −

visualizing named entities

我们还可以指定设置的字典以自定义布局。 它将在参数 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

输出如下:

google org

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 serve

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

displacy render

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

Doc,一个访问语言注释的容器,是令牌对象的一个序列。在 Doc 类的帮助下,我们可以访问句子和命名实体。

我们还可以将注释导出到 numpy 数组并序列化为压缩的二进制字符串。Doc 对象包含一个 TokenC 结构数组,而 Token 和 Span 对象只能查看此数组,不能保存任何数据。

Token

顾名思义,它表示单个标记,如单词、标点符号、空格、符号等。

Span

它是从我们上面讨论的 Doc 对象中切分的一部分。

Lexeme

可将其定义为词表中的一个条目。与单词令牌相反,词素没有字符串上下文。它是一个单词类型,因此没有 PoS(词性)、依赖关系分析或词根。

现在,让我们详细讨论所有四个类 -

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,)

Token.vector_norm

此标记属性表示标记向量表示的 L2 范数。

Example

以下是 Token.vector_norm 属性的示例:

import spacy
nlp_model = spacy.load("en_core_web_sm")
doc1 = nlp_model("The website is Tutorialspoint.com.")
doc2 = nlp_model("It is having best technical tutorials.")
doc1[2].vector_norm !=doc2[2].vector_norm

Output

True

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']

Span.vector

此 Span 属性表示一个实值含义。默认值是标记向量的平均值。

Example 1

Span.vector 属性示例如下所示 −

import spacy
nlp_model = spacy.load("en_core_web_sm")
doc = nlp_model("The website is Tutorialspoint.com.")
doc[1:].vector.dtype

Output

您将收到以下输出 −

dtype('float32')

Example 2

Span.vector 属性的另一个示例如下所示 −

Output

您将收到以下输出 −

(96,)

Span.vector_norm

此 doc 属性表示文档向量表示的 L2 范数。

Example

Span.vector_norm 属性示例如下所示 −

import spacy
nlp_model = spacy.load("en_core_web_sm")
doc = nlp_model("The website is Tutorialspoint.com.")
doc[1:].vector_norm
doc[2:].vector_norm
doc[1:].vector_norm != doc[2:].vector_norm

Output

您将收到以下输出 −

True

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 范数。

Lexeme.vector

此 Lexeme 属性表示实值含义。它将返回一个一维数组,表示词素的语义。

Example

以下提供 Lexeme.vector 属性的一个示例:

import spacy
nlp_model = spacy.load("en_core_web_sm")
apple = nlp_model.vocab["apple"]
apple.vector.dtype

Output

您将看到以下输出 −

dtype('float32')

Lexeme.vector_norm

此 token 属性表示词素的向量表示的 L2 范数。

Example

以下提供 Lexeme.vector_norm 属性的一个示例:

import spacy
nlp_model = spacy.load("en_core_web_sm")
apple = nlp.vocab["apple"]
pasta = nlp.vocab["pasta"]
apple.vector_norm != pasta.vector_norm

Output

您将看到以下输出 −

True

spaCy - Training Neural Network Model

在本章中,让我们学习如何在 spaCy 中训练神经网络模型。

在这里,我们将了解如何更新 spaCy 的统计模型以将其定制用于我们的用例。例如,要预测在线评论中的一个新的实体类型。要自定义,我们首先需要训练自己的模型。

Steps for Training

让我们了解在 spaCy 中训练神经网络模型的步骤。

  1. 步骤 1- Initialization - 如果您没有采用预训练模型,那么首先我们需要使用 nlp.begin_training 随机初始化模型权重。

  2. 步骤 2- Prediction - 下一步,我们需要使用当前权重预测一些示例。可以通过调用 nlp.updates 来完成。

  3. 步骤 3 − Compare - 现在,模型将根据真实标签检查预测。

  4. 步骤 4 − Calculate - 在进行比较后,我们将决定如何更改权重以在下次预测中获得更好的结果。

  5. 步骤 5 − Update - 最后对当前权重进行微小更改,然后挑选下一批示例。继续对您获取的每批示例调用 nlp.updates

现在让我们借助以下图表了解这些步骤 −

steps for training

这里 -

  1. Training Data - 训练数据是示例及其注释。这些是希望用其更新模型的示例。

  2. Text - 它表示输入文本,模型应为其预测一个标签。它应该是句子、段落或较长的文档。

  3. Label - 标签实际上是我们希望模型预测的结果。例如,它可以是文本类别。

  4. Gradient - 梯度是我们应如何更改权重来减少误差。将在将预测标签与真实标签相比较后进行计算。

Training the Entity Recognizer

首先,实体识别器会提取文档并预测短语及其标签。

这意味着训练数据需要包含以下内容 −

  1. Texts.

  2. The entities they contain.

  3. 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 1Loop - 第一步是循环,我们通常需要执行多次,以便模型可以从中学习。例如,如果您想为模型训练 20 次迭代,则需要循环 20 次。

Step 2Shuffle - 第二步是随机播放训练数据。我们需要为每次迭代随机播放数据。这有助于防止模型陷入次优解。

Step 3Divide – 稍后将数据分成批次。在此,我们将训练数据分成小批次。它有助于提高梯度估计的可读性。

Step 4Update - 下一步是为每个步骤更新模型。现在,我们需要更新模型并重新开始循环,直到达到最后一次迭代。

Step 5Save - 最后,我们可以保存此训练过的模型并在 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

以下是更新现有模型的原因 −

  1. 更新后的模型将在您的特定领域提供更好的结果。

  2. 在更新现有模型的同时,您可以了解特定问题的分类方案。

  3. 更新现有模型对于文本分类至关重要。

  4. 它对命名实体识别特别有用。

  5. 它对词性标注和依存关系分析也不是至关重要的。

Updating an existing model

借助 spaCy,我们可以使用更多数据更新现有的预训练模型。例如,我们可以更新模型以改进其在不同文本上的预测。

更新现有预训练模型非常有用,如果你想对其已知的类别进行改进。例如,“人”或“组织”。我们还可以更新现有预训练模型以添加新类别。

我们建议始终用新类别的示例以及该模型之前正确预测的其他类别的示例更新现有预训练模型。如果不这样做,那么改进新类别可能会损害其他类别。

Setting up a new pipeline

从以下给定的示例中,让我们了解如何从头开始设置一个新管道以更新现有模型-

  1. 首先,我们将使用以下 spacy.blank 方法从空白英语模型开始。它只包含语言数据和标记规则,并且没有任何管道组件。

  2. 然后,我们将创建一个空白实体识别器并将它添加到管道中。接下来,我们将使用以下 add_label ,将新的字符串标签添加到模型中。

  3. 现在,我们可以通过调用以下 nlp.begin_training ,用随机权重初始化该模型。

  4. 接下来,我们需要在每次迭代中随机对数据进行混洗。这是为了提高准确性。

  5. 一旦打乱顺序,就使用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)