文章目录

官网英文教程: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 模块安装。
管道 软件包的大小、速度、内存使用量、准确性和它们所包含的数据可能有所不同。
您选择的包始应该取决于您的使用用例和你正在使用的文本。对于通用用例,小型默认包 始终是一个好的开始。它们通常包括以下组件:
-
二进制权重:part-of-speech tagger词性标注器、 dependency parser 依存句法分析、和 named entity recognizer命名实体识别依赖二进制权重在上下文中预测标签
-
词汇条目:词汇表中的词汇条目,即单词及其与上下文无关的属性,如形状或拼写。
-
数据文件:例如词形还原规则和查找表。
-
词向量:即单词的多维含义表示,可以让您确定它们彼此之间的相似程度。
-
配置:配置选项,例如语言和处理管道设置以及要使用的模型实现,以便在加载管道时将 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(' ') 。然后,标记器从左到右处理文本。对于每个子字符串,它执行两项检查:
-
**子字符串substring 是否符合标记器例外规则?**例如,“don’t”不包含空格,但应拆分为两个标记,“do”和“n’t”,而“U.K.”应始终保留为一个标记。
-
**前缀、后缀或中缀可以拆分吗?**例如逗号、句号、连字符或引号等标点符号。
如果匹配,则应用规则,标记器继续循环,从新拆分的子字符串开始。这样,spaCy 可以拆分复杂的嵌套标记,例如缩写和多个标点符号的组合。如下图所示:

虽然标点符号规则通常很通用,但标记器例外 在很大程度上取决于个别语言的具体情况。这就是为什么每个 可用的语言有自己的子类,例如 English或German ,加载硬编码数据和例外规则的列表。
要详细了解 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")

最低0.47元/天 解锁文章
811

被折叠的 条评论
为什么被折叠?



