NLP库——Spacy库教程

news/2024/10/30 11:44:13/

spaCy 的统计模型

这些模型是 spaCy 的强大引擎。这些模型使 spaCy 能够执行多项 NLP 相关任务,例如词性标注、命名实体识别和依存关系解析。

下面我列出了 spaCy 中的不同统计模型及其规格:

en_core_web_sm:一个小型的英语多任务卷积神经网络(CNN),基于OntoNotes数据集训练。适用于基本的自然语言处理任务,模型体积较小,约为11 MB,适合轻量化应用。

en_core_web_md:一个中等规模的英语多任务卷积神经网络,基于OntoNotes数据集训练,并包含在Common Crawl数据集上训练的GloVe词向量。模型体积约为91 MB,在保持精度和性能的同时提供更多的词汇信息,适合需要更精细处理的任务。

en_core_web_lg:一个大型的英语多任务卷积神经网络,基于OntoNotes数据集训练,并使用了Common Crawl数据集训练的GloVe词向量。模型体积较大,约为789 MB,能提供更丰富的词汇和语义信息,适合精细

导入这些模型非常简单。我们只需执行spacy.load('model_name')即可导入模型,如下所示:度要求更高的应用。

import spacy
nlp = spacy.load('en_core_web_sm')

spaCy 的处理流水线

使用 spaCy 时,文本字符串的第一步是将其传递给NLP 对象。该对象本质上是输入文本字符串必须经过的几个文本预处理操作的管道。


如上图所示,NLP 管道有多个组件,例如tokenizertaggerparserner等。因此,输入的文本字符串必须经过所有这些组件后才能进行处理。

spaCy 的实际应用

 1. 使用 spaCy 进行词性 (POS) 标记

在英语语法中,词性告诉我们单词的功能以及它在句子中的用法。 英语中一些常见的词性有名词、代词、形容词、动词、副词等。

词性标注是自动为句子中的所有单词分配词性标注的任务。它对 NLP 中的各种下游任务(例如特征工程、语言理解和信息提取)很有帮助。

示例标注

import spacy 
nlp = spacy.load('en_core_web_sm')# Create an nlp object
doc = nlp("He went to play basketball")# Iterate over the tokens
for token in doc:# Print the token and its part-of-speech tagprint(token.text, "-->", token.pos_)

输出

He --> PRON
went --> VERB
to --> PART
play --> VERB
basketball --> NOUN

因此,模型已正确识别句子中所有单词的 POS 标记。如果您不确定这些标记中的任何一个,那么您可以简单地使用 spacy.explain() 来找出答案:

spacy.explain("PART") Output: 'particle'

2. 使用 spaCy 进行依赖解析

每个句子都有一个语法结构,借助依存关系解析,我们可以提取这种结构。它也可以被认为是一个有向图,其中节点对应于句子中的单词,节点之间的边是单词之间的相应依存关系。

在 spaCy 中执行依赖解析也非常容易。我们将在这里使用与 POS 标记相同的句子:

# dependency parsing
for token in doc:print(token.text, "-->", token.dep_)

输出

He --> nsubj #主语
went --> ROOT #动词或谓语
to --> aux #辅助成分
play --> advcl #状语从句
basketball --> dobj #直接宾语

3.使用spaCy进行命名实体识别

首先我们来了解一下实体是什么。实体是代表常见事物(如人、地点、组织等)信息的单词或单词组。这些实体有专有名称。

示例

import spacynlp = spacy.load('en_core_web_sm')text = "Apple is looking at buying a startup in San Francisco for $1 billion."doc = nlp(text)for ent in doc.ents:print(ent.text, ent.label_)

输出

Apple ORG
San Francisco GPE
$1 billion MONEY

标签说明

  • ORG:组织(如公司、机构)
  • GPE:地理位置(如城市、国家)
  • MONEY:货币金额

 4.使用 spaCy 进行基于规则的匹配

基于规则的匹配是 spaCy 库中的一项新功能。借助此 spaCy 匹配器,您可以使用用户定义的规则在文本中查找单词和短语。它就像是强化版的正则表达式。虽然正则表达式使用文本模式来查找单词和短语,但 spaCy 匹配器不仅使用文本模式,还使用单词的词汇属性,例如 POS 标签、依赖标签、词干等。

示例

import spacy
nlp = spacy.load('en_core_web_sm')# Import spaCy Matcher
from spacy.matcher import Matcher# Initialize the matcher with the spaCy vocabulary
matcher = Matcher(nlp.vocab)doc = nlp("Some people start their day with lemon water")# Define rule
pattern = [{'TEXT': 'lemon'}, {'TEXT': 'water'}]# Add rule
matcher.add('rule_1', None, pattern)matches = matcher(doc)

 

因此,在上面的代码中:

  • 首先,我们导入 spaCy 匹配器
  • 之后,我们使用默认的 spaCy 词汇初始化匹配器对象
  • 然后,我们像往常一样将输入传递到 NLP 对象中
  • 在下一步中,我们定义想要从文本中提取的规则/模式。

假设我们想从文本中提取短语“柠檬水”。因此,我们的目标是,只要“柠檬”后面跟着单词“水”,匹配器就应该能够在文本中找到此模式。这正是我们在上面的代码中定义模式时所做的。最后,我们将定义的规则添加到匹配器对象。

output :[(7604275899133490726, 6, 8)]

输出有三个元素。第一个元素 '7604275899133490726' 是匹配 ID。第二个和第三个元素是匹配的 token 的位置。

# Extract matched text
for match_id, start, end in matches:# Get the matched spanmatched_span = doc[start:end]print(matched_span.text)

output:lemon water 

因此,模式是标记属性的列表。例如,“TEXT”是一个标记属性,表示标记的确切文本。事实上,spaCy 中还有许多其他有用的标记属性,可用于定义各种规则和模式。

 让我们看看 spaCy 匹配器的另一个用例。考虑以下两个句子:

  1. You can read this book
  2. I will book my ticket

 

现在我们感兴趣的是找出一个句子中是否包含单词“book”。这看起来很简单,对吧?但问题就在这里——只有当“book”在句子中用作名词时,我们才需要找到它。

在上面的第一句中,“book”被用作名词,在第二句中,它被用作动词。因此,spaCy 匹配器应该能够仅从第一句中提取模式。

doc1 = nlp("You read this book")
doc2 = nlp("I will book my ticket")pattern = [{'TEXT': 'book', 'POS': 'NOUN'}]# Initialize the matcher with the shared vocab
matcher = Matcher(nlp.vocab)
matcher.add('rule_2', None, pattern)
matches = matcher(doc1)
matches
Output: [(7604275899133490726, 3, 4)]

 匹配器在第一句话中找到了模式。

matches = matcher(doc2)
matches
Output: [ ]

太棒了!虽然第二句中出现了“book”,但匹配器忽略了它,因为它不是名词。


http://www.ppmy.cn/news/1543094.html

相关文章

Sui主网升级至V1.36.2

其他升级要点如下所示: 协议 #19799: 在主网v63中启用分布式投票评分。 #20036: 协议升级至67版本,引入框架变更以修复 next_epoch_stake 记账问题,同时赎回同质化质押的SUI。 节点(验证节点和全节点…

Python毕业设计选题:基于Web学生会网站的设计与实现-django

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 系统首页界面 用户注册界面 用户登录界面 校内报道界面 品牌活动界面 个人中心界面 …

京东双十一高并发场景下的分布式锁性能优化

背景 在电商领域,尤其是像京东双十一这样的大促活动,系统需要处理极高的并发请求。这些请求往往涉及库存的查询和更新,如果处理不当,很容易出现库存超卖、数据不一致等问题。分布式锁作为一种有效的解决方案,能够在多…

BUG-mmdet解析数据时候,TypeError: expected dtype object, got ‘numpy.dtype[bool_]‘

本专栏为深度学习的一些技巧,方法和实验测试,偏向于实际应用,后续不断更新,感兴趣童鞋可关,方便后续推送 现象 在使用mmdet3d 处理waymo数据生成pkl时候: in points_in_convex_polygon_3d_jit normal_vec, d, num_surfaces) TypeError: expected dtype object, got nump…

MySQL中,如何定位慢查询?定位到的慢SQL如何分析?

目录 1. 慢查询发生的场景? 2. MySQL中,如何定位慢查询? 2.1 详细解释 3. 定位到的慢SQL如何分析? 3.1 详细说明 1. 慢查询发生的场景? 2. MySQL中,如何定位慢查询? 介绍一下当时产生问题…

2024.10.29- Linux(CentOS7)笔记(1)

一、Linux文件系统的介绍 Linux的文件系统与Unix的文件系统类似,也是一个树形结构。 最基本的是根目录:/ 。相当于windows文件系统的盘符。 /: 根路径, 根路径下有以下文件夹 ​ /bin -> usr/bin : 存储的是用户级别的指令…

160W高效能!安森美半导体NCV8871异步升压控制器设计方案

近年直流电产品应用越来越广泛,一方面随著应用技术不断推陈出新,另一方面终端应用的功率需求越来越大,例如: 音讯放大器、直流无线吸尘器、直流工具机、车用电子产品等。这些直流电产品都需要一个稳定的直流电压输入,且可以供应其…

人工智能技术:塑造未来生活与工作的变革力量

人工智能技术:塑造未来生活与工作的变革力量 一、引言 在当今科技飞速发展的时代,人工智能技术如同一颗璀璨的新星,在各个领域绽放出耀眼的光芒,引领着一场前所未有的变革。从医疗领域的精准诊断到企业运营的智能优化&#xff0…