SpaCy官方中文教程:一文快速入门SpaCy

该文章已生成可运行项目,

在这里插入图片描述

官网英文教程:https://spacy.io/usage/spacy-101#architecture

spaCy是什么?

spaCy 是一个免费的开源库,用于 Python 中的高级自然语言处理(NLP)。

如果你正在处理大量文本,你会想要了解spaCy的更多内容。例如,它是关于什么的?单词在上下文中是什么意思?谁对谁做了什么?文本中提到了哪些公司和产品?哪些文本彼此相似?

spaCy 专为生产用途而设计,可帮助您构建处理和“理解”大量文本的应用程序。它可用于构建信息提取自然语言理解 系统,或对文本进行深度学习的预处理

spaCy 不是什么?

  • spaCy 不是一个平台或“API” 。与平台不同,spaCy 不提供软件即服务或 Web 应用程序。它是一个旨在帮助您构建 NLP 应用程序的开源库,而不是可消费的服务。
  • spaCy 并不是一个开箱即用的聊天机器人引擎。虽然 spaCy 可用于支持对话应用程序,但它并非专门为聊天机器人设计的,仅提供底层文本处理功能。
  • spaCy 不是研究软件。它基于最新研究,但旨在完成任务。这导致了与NLTK截然不同的设计决策或者 CoreNLP ,它们是作为教学和研究平台创建的。主要区别在于 spaCy 是集成的和有主见的。spaCy 试图避免要求用户在提供等效功能的多种算法之间进行选择。保持菜单较小可以让 spaCy 提供更好的性能和开发人员体验。
  • spaCy 不是一家公司。它是一个开源库。

spaCy的功能和特性

在文档中,您会看到对 spaCy 特性和功能的提及。其中一些涉及语言概念,而另一些则与更通用的机器学习功能有关。

名称概念 概念解释
Tokenization 将文本分割成的单词、或者标点符号等。
Part-of-speech (POS) Tagging 为tokens分配词类,如动词或名词。
Dependency Parsing 分配句法依赖标签,描述各个tokens之间的关系,如主语或宾语。
Lemmatization 指定单词的基本形式。例如,“was”的词干是“be”,“rats”的词干是“rat”。
Sentence Boundary Detection (SBD) 查找并分割单个句子。
Named Entity Recognition (NER) 标记命名的“现实世界”对象,例如人、公司或地点。
Entity Linking (EL) 将文本实体消除歧义,使其成为知识库中的唯一标识符。
Similarity 比较单词、文本段落和文档以及它们彼此之间的相似程度。
Text Classification 为整个文档或文档的某些部分分配类别或标签。
Rule-based Matching 根据文本和语言注释查找标记序列,类似于正则表达式。
Training 更新和改进Statistical models的预测。
Serialization 将对象保存到文件或字节字符串。

Statistical models 统计模型

虽然 spaCy 的某些功能可以独立运行,但其他功能则需要 加载经过训练的管道 ,使 spaCy 能够预测 语言注释——例如,一个词是动词还是名词。

训练好的管道可以由使用统计模型的多个组件组成,这些统计模型在标记数据上进行了训练。

spaCy 目前提供各种不同语言的训练管道 ,这些不同语言的训练管道可以作为单独的 Python 模块安装。

管道 软件包的大小、速度、内存使用量、准确性和它们所包含的数据可能有所不同。

您选择的包始应该取决于您的使用用例和你正在使用的文本。对于通用用例,小型默认包 始终是一个好的开始。它们通常包括以下组件:

  1. 二进制权重:part-of-speech tagger词性标注器、 dependency parser 依存句法分析、和 named entity recognizer命名实体识别依赖二进制权重在上下文中预测标签

  2. 词汇条目:词汇表中的词汇条目,即单词及其与上下文无关的属性,如形状或拼写。

  3. 数据文件:例如词形还原规则和查找表。

  4. 词向量:即单词的多维含义表示,可以让您确定它们彼此之间的相似程度。

  5. 配置:配置选项,例如语言和处理管道设置以及要使用的模型实现,以便在加载管道时将 spaCy 置于正确的状态。

Linguistic annotations 语言注释

spaCy 提供各种语言注释,让您深入了解文本的语法结构。

这包括词类(如词性)以及单词之间的关系。

例如,如果您正在分析文本,名词是句子的主语还是宾语,或者“google”是用作动词还是在特定语境中指代网站或公司,这会产生很大的不同。

下载并安装训练好的管道后,您可以通过spacy.load加载它.这将返回一个 Language对象包含处理文本所需的所有组件和数据。我们通常称之为nlp 。在文本字符串上调用nlp对象将返回已处理好的Doc

import spacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("Apple is looking at buying U.K. startup for $1 billion")
for token in doc:
    print(token.text, token.pos_, token.dep_)

即使Doc经过处理(例如拆分成单个单词并进行注释),它仍然保留原始文本的所有信息,例如空格字符。您始终可以获取标记在原始字符串中的偏移量,或者通过连接标记及其尾随空格来重建原始字符串。这样,您在使用 spaCy 处理文本时就不会丢失任何信息。

Tokenization 标记

在处理过程中,spaCy 首先对文本进行标记,即将其分割成单词、标点符号等。这是通过应用特定于每种语言的规则来完成的。例如,句子末尾的标点符号应该被删除掉,取而代之是保留“U.K.”这个标记。每个Doc都由单独的标记组成,我们可以对它们进行遍历:

import spacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("Apple is looking at buying U.K. startup for $1 billion")
for token in doc:
    print(token.text)

在这里插入图片描述
首先,原始文本按空格字符进行拆分,类似于 text.split(' ') 。然后,标记器从左到右处理文本。对于每个子字符串,它执行两项检查:

  1. **子字符串substring 是否符合标记器例外规则?**例如,“don’t”不包含空格,但应拆分为两个标记,“do”和“n’t”,而“U.K.”应始终保留为一个标记。

  2. **前缀、后缀或中缀可以拆分吗?**例如逗号、句号、连字符或引号等标点符号。

如果匹配,则应用规则,标记器继续循环,从新拆分的子字符串开始。这样,spaCy 可以拆分复杂的嵌套标记,例如缩写和多个标点符号的组合。如下图所示:

在这里插入图片描述
虽然标点符号规则通常很通用,但标记器例外 在很大程度上取决于个别语言的具体情况。这就是为什么每个 可用的语言有自己的子类,例如 EnglishGerman ,加载硬编码数据和例外规则的列表。

要详细了解 spaCy 的标记化规则如何工作,如何 自定义和替换默认标记器以及如何添加特定于语言的数据,请参阅使用指南 语言数据定制标记器

Part-of-speech tags and dependencies 词性标记和依赖关系

标记化后,spaCy 可以解析并标记给定的Doc 。在这里,训练好的管道及其统计模型开始发挥作用,这使得 spaCy 能够 预测哪个标签或标记最有可能适用于此上下文。经过训练的组件包括二进制数据(也称统计模型权重),这些模型是通过向系统展示足够多的示例而生成的,以便系统能够做出适用于整个语言的预测 - 例如,英语中跟在“the”后面的单词最有可能是名词。

语言注释可用作 Token属性. 与许多 NLP 库一样,spaCy 将所有字符串编码为哈希值,以减少内存使用量并提高效率。因此,为了获取属性的可读字符串表示,我们需要在其名称中添加下划线_ :

import spacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("Apple is looking at buying U.K. startup for $1 billion")

本文章已经生成可运行项目
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值