【NLP的python库(02/4) 】:Spacy

news2024/10/6 8:24:59

一、说明

        借助 Spacy,一个复杂的 NLP 库,可以使用用于各种 NLP 任务的不同训练模型。从标记化到词性标记再到实体识别,Spacy 还生成了精心设计的 Python 数据结构和强大的可视化效果。最重要的是,可以加载和微调不同的语言模型以适应特定领域的NLP任务。最后,Spacy提供了一个强大的管道对象,有助于混合内置和自定义的分词器,解析器,标记器和其他组件,以创建支持所有所需NLP任务的语言模型。

        本文介绍空间。您将学习如何安装库、加载模型以及应用文本处理和文本语义任务,最后学习如何自定义空间模型。

本文的技术上下文是 和 。所有示例也应该适用于较新的版本。Python v3.11Spacy v3.5.3

这篇文章最初出现在博客 admantium.com。

二、Spacy库安装

Spacy 库可以通过 pip 安装:

python3 -m pip install spacy 

        所有 NLP 任务都需要首先加载模型。Spacy提供了基于不同语料库和不同语言的模型。查看完整的型号列表。一般来说,模型可以区分为其语料库的大小,这在NLP任务期间导致不同的结果,以及用于构建模型的技术,这是一种未知的内部格式或基于变压器的模型,例如Berta。

        若要加载特定模型,可以使用以下代码片段:

python -m spacy download en_core_web_lg 

三、自然语言处理任务

Spacy 支持以下任务:

文本处理

  • 标记化
  • 词形还原

文本语法

  • 词性标记

文本语义

  • 依赖关系解析
  • 命名实体识别

文档语义

  • 分类

此外,Spacy 还支持以下附加功能:

  • 语料库管理
  • 词向量
  • 自定义 NLP 管道
  • 模型训练

3.1 文本处理

        当使用其中一个预训练语言模型时,Spacy 会自动应用文本处理基本要素。从技术上讲,文本处理围绕可配置的管道对象进行,该抽象类似于SciKit Learn管道对象。此处理始终从标记化开始,然后添加其他数据结构来丰富解析文本的信息。所有这些任务也可以自定义,例如交换标记器组件。以下说明仅关注使用预训练模型时的内置功能。

3.2 标记化

        标记化是第一步,应用起来很简单:将加载的模型应用于文本,标记就会出现。

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

# Source: Wikipedia, Artificial Intelligence, https://en.wikipedia.org/wiki/Artificial_intelligence
paragraph = '''Artificial intelligence was founded as an academic discipline in 1956, and in the years since it has experienced several waves of optimism, followed by disappointment and the loss of funding (known as an "AI winter"), followed by new approaches, success, and renewed funding. AI research has tried and discarded many different approaches, including simulating the brain, modeling human problem solving, formal logic, large databases of knowledge, and imitating animal behavior. In the first decades of the 21st century, highly mathematical and statistical machine learning has dominated the field, and this technique has proved highly successful, helping to solve many challenging problems throughout industry and academia.'''
doc = nlp(paragraph)
tokens = [token for token in doc]
print(tokens)
# [Artificial, intelligence, was, founded, as, an, academic, discipline

3.3 Lematization勒马特化

        引理是自动生成的;它们是令牌的属性。

doc = nlp(paragraph)

lemmas = [token.lemma_ for token in doc]
print(lemmas)
# ['artificial', 'intelligence', 'be', 'found', 'as', 'an', 'academic',

可配置组件对规则或查找应用词形还原。要查看内置模型使用哪种模式,请执行以下代码:

lemmatizer = nlp.get_pipe("lemmatizer")

print(lemmatizer.mode)
# 'rule'

在空间中没有词干。

3.4 、文本语法

3.4.1 词性标记

        在 Spacy 中,词性标签有两种形式。该属性是令牌所属的绝对类别,其特征为通用 POS 标记。该属性是一个更细微的类别,它基于依赖项分析和命名实体识别而构建。POSTAG

下表列出了这些类。POS

        令牌描述 ADJ 形容词 ADP adposition ADV 副词 AUX 辅助 CCONJ 协调结合 DET 确定器 INTJ 感叹词 名词 名词 NUM 数字 部分 助词 PRON 代词 PROP 专有名词 标点符号 SCONJ 从属连词 符号 动词 动词 X 其他

        对于这些类,我在文档中找不到明确的解释。但是,这个 Stackoverflow 线程暗示引用了有关依赖项解析的学术论文中使用的类。TAGTAG

        若要查看与令牌关联的 和,请运行以下代码:POSTAG

doc = nlp(paragraph)
for token in doc:
    print(f'{token.text:<20}{token.pos_:>5}{token.tag_:>5}')

#Artificial            ADJ   JJ
#intelligence         NOUN   NN
#was                   AUX  VBD
#founded              VERB  VBN
#as                    ADP   IN
#an                    DET   DT
#academic              ADJ   JJ
#discipline           NOUN   NN

3.5 文本语义

3.5.1 依赖关系解析

        依赖项分析检查单词和单词块的上下文关系。此步骤极大地增强了机器从文本中获取的语义信息。

        Spacy 既提供文本表示,也提供依赖项的图形表示。

doc = nlp(paragraph)
for token in doc:
    print(f'{token.text:<20}{token.dep_:<15}{token.head.text:<20}')

# Artificial          amod           intelligence
# intelligence        nsubjpass      founded
# was                 auxpass        founded
# founded             ROOT           founded
# as                  prep           founded
# an                  det            discipline
# academic            amod           discipline
# discipline          pobj           as
# in                  prep           founded

        若要以图形方式呈现这些关系,请运行以下命令。

from spacy import displacy

nlp = spacy.load("en_core_web_lg")
displacy.serve(doc, style="dep", options={"fine_grained": True, "compact": True})

        它将输出一个结构,如下所示:

        请注意,此处理步骤的功能仅限于语言模型原始训练语料库。Spacy 提供了两种方法来增强解析。首先,模型可以从头开始训练。其次,最近发布的 Spacy 提供了转换器模型,这些模型也可以进行微调以与更特定于领域的语料库一起使用。

3.6 命名实体识别

        文本中的实体是指人员、组织或对象,Spacy 可以针对已处理的文档进行检测。

        识别的实体是已分析文档的一部分,可由属性访问。ents

doc = nlp(paragraph)
for token in doc.ents:
    print(f'{token.text:<40}{token.label_:<15}')

# 1956                                    DATE
# the years                               DATE
# AI                                      ORG
# the first decades of the 21st century   DATE

或者,它们可以可视化。

        与依赖项解析类似,此步骤的结果非常依赖于其训练数据。例如,如果用于书籍文本,它可能无法识别其字符的名称。为了帮助处理这种情况,可以创建自定义知识库对象,该对象将用于在文本处理期间标识命名实体的可能候选项。

3.7 文档语义

3.7.1 分类

        Spacy本身不包括分类或分类算法,但其他开源项目扩展了Spacy以执行机器学习任务。

仅举一个例子:Berttopic 扩展是一个开箱即用的文档分类项目,甚至提供可视化表示。

此项目通过运行 来安装。将此项目应用于一组 200 篇文章会得到以下结果:pip install "bertopic[spacy]"

import numpy as np
import pandas as pd
from bertopic import BERTopic

X = pd.read_pickle('ml29_01.pkl')

docs = X['preprocessed'].values

topic_model = BERTopic()
topics, probs = topic_model.fit_transform(docs)

print(topic_model.get_topic_info())
# Topic Count Name
# -1 30 -1_artificial_intelligence_machine
# 1 22 49_space_lunar_mission

3.8 附加功能

3.8.1 语料库管理

        Spacy 定义了一个对象,但它用于读取 JSON 或纯文本文件以训练自定义 Spacy 语言模型。Corpus

        我可以在文档中找到的所有已处理文本的唯一属性是,一个查找表,用于查找处理文本中遇到的所有单词。vocab

3.8.2 文本矢量

        对于类别或的所有内置模型,都包括词向量。在 Spacy 中,单个标记、跨度(用户定义的文档切片)或完整文档可以表示为向量。mdlg

下面是一个示例:

nlp = spacy.load("en_core_web_lg")

vectors = [(token.text, token.vector_norm) for token in doc if token.has_vector]

print(vectors)
# [('Artificial', 8.92717), ('intelligence', 6.9436903), ('was', 10.1967945), ('founded', 8.210244), ('as', 7.7554812), ('an', 8.042635), ('academic', 8.340115), ('discipline', 6.620854),

span = doc[0:10]

print(span)
# Artificial intelligence was founded as an academic discipline in 1956

print(span.vector_norm)
# 3.0066288

print(doc.vector_norm)
# 2.037331438809547

        该文档没有透露正在使用哪种特定的标记化方法。非标准化标记有 300 个维度,这可能暗示正在使用 FastText 标记化方法:

token = doc[0]

print(token.vector.dtype, token.vector.shape)
# float32 (300,)

print((token.text, token.vector))
#'Artificial',
# array([-1.6952  , -1.5868  ,  2.6415  ,  1.4848  ,  2.3921  , -1.8911  ,
#         1.0618  ,  1.4815  , -2.4829  , -0.6737  ,  4.7181  ,  0.92018 ,
#        -3.1759  , -1.7126  ,  1.8738  ,  3.9971  ,  4.8884  ,  1.2651  ,
#         0.067348, -2.0842  , -0.91348 ,  2.5103  , -2.8926  ,  0.92028 ,
#         0.24271 ,  0.65422 ,  0.98157 , -2.7082  ,  0.055832,  2.2011  ,
#        -1.8091  ,  0.10762 ,  0.58432 ,  0.18175 ,  0.8636  , -2.9986  ,
#         4.1576  ,  0.69078 , -1.641   , -0.9626  ,  2.6582  ,  1.2442  ,
#        -1.7863  ,  2.621   , -5.8022  ,  3.4996  ,  2.2065  , -0.6505  ,
#         0.87368 , -4.4462  , -0.47228 ,  1.7362  , -2.1957  , -1.4855  ,
#        -3.2305  ,  4.9904  , -0.99718 ,  0.52584 ,  1.0741  , -0.53208 ,
#         3.2444  ,  1.8493  ,  0.22784 ,  0.67526 ,  2.5435  , -0.54488 ,
#        -1.3659  , -4.7399  ,  1.8076  , -1.4879  , -1.1604  ,  0.82441 ,

最后,Spacy 提供了一个选项,为管道提供用户定义的词向量。

四、自定义 NLP 管道

        管道的参考模型包含在预训练的语言模型中。它们包括以下内容:

  • 分词器
  • 标记器
  • 依赖关系解析器
  • 实体识别器
  • 词形还原器

        需要在特定于项目的配置文件中定义管道步骤。所有这些步骤的完整管道定义如下:

[nlp]
pipeline = ["tok2vec", "tagger", "parser", "ner", "lemmatizer"]

        此管道可以扩展。例如,若要添加文本分类步骤,只需在管道声明后追加 ,并提供实现。textcat

        可以使用多个管道组件,以及添加自定义组件的选项,这些组件将与 Paccy 实现的文档表示进行交互并丰富文档表示形式。

        此外,外部自定义模型或模型组件可以合并到Spacy中,例如交换词向量表示或使用任何基于PyTorch或外部转换器库的基于变压器的模型。

五、模型训练

        基于管道对象和广泛的配置文件,可以训练新模型。快速入门指南包含一个 UI 小组件,可在其中以交互方式创建所需的管道步骤和本地文件路径。训练数据需要具有 Python 数据对象的形式,其中包含应训练的所需属性。下面是用于训练命名实体识别的官方文档中的示例。

# Source: Spacy, Training Pipelines & Models, https://spacy.io/usage/training#training-data

nlp = spacy.blank("en")
training_data = [
  ("Tokyo Tower is 333m tall.", [(0, 11, "BUILDING")]),
]

        对于训练数据本身,支持多个转换器,例如 JSON、通用依赖项或命名实体识别格式,如 IOB 或 BILUO。

        为了便于训练,可以使用语料库对象来迭代 JSON 或纯文本文档。

六、总结

        Spacy是一个最先进的NLP库。通过使用其中一个预训练模型,将应用所有基本文本处理任务(标记化、词形还原、词性标记)和文本语义任务(依赖项分析、命名实体识别)。所有模型都是通过管道对象创建的,此对象可用于自定义这些步骤中的任何一个,例如提供自定义分词器或交换词向量组件。此外,还可以使用其他基于转换器的模型,并使用文本分类任务扩展管道。塞巴斯蒂安

·

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/974866.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

宇凡微Y62R射频433接收芯片(功能强大的合封解决方案)

在现代科技领域&#xff0c;芯片技术的不断进步推动着无数创新应用的诞生。今天&#xff0c;我们将介绍一款功能强大的芯片——Y62R&#xff0c;这款芯片由宇凡微精心开发&#xff0c;融合了433接收功能和主控功能&#xff0c;为各种无线通信和控制应用提供了强大的解决方案。 …

nmp ERR! code ERR SOCKET TIMEOUT nmp ERR!network npmSocket timeout(已解决)

当安装vue-cli时&#xff0c;出现超时错误 npm ERR! code ECONNRESET npm ERR! network This is a problem related to network connectivity npm ERR! code ECONNRESET npm ERR! network aborted npm ERR! network This is a problem related to network connectivity. npm E…

GPT引领前沿与应用突破之GPT-4科研实践技术与AI绘图

查看原文>>>GPT引领前沿与应用突破之GPT4科研实践技术与AI绘图 目录 专题一、AIGC概述 专题二、人工智能算法介绍 专题三、大语言模型Prompt提示词使用技巧 专题四、让GPT成为你的生活助理&#xff08;动手练习&#xff09; 专题五、让GPT成为你的工作秘书&…

Java入门基础知识

文章目录 关于JDK什么是JDK什么是JRE 关键字字面量,变量标识符 关于JDK 什么是JDK JDK是Java工具开发包,包含了JVM(程序运行环境),核心类库(直接应用即可),开发工具(Javac,java,jdb,jhat…) 什么是JRE JRE是Java运行环境,包含了JVM,核心类库,运行工具 JDK包含了JRE,JRE包含…

什么是50ETF期权开户条件,怎么开期权交易权限?

50ETF期权是指上证50ETF期权&#xff0c;标的物是上证50ETF&#xff0c;代码是&#xff08;510500&#xff09;&#xff0c;期权是一种在上证50ETF基础上进行衍生品交易的金融工具&#xff0c;下文科普什么是50ETF期权开户条件&#xff0c;怎么开期权交易权限&#xff1f;本文来…

我使用的Vim插件

2023年9月5日&#xff0c;周二下午 为了方便以后还原自己的Vim插件配置&#xff0c;于是写这篇博客来记录一下 不定期更新 目录 语法检查Syntastic文件树The NERD tree自动补全括号auto-pairs超轻量级自动补全vim-auto-popmenu 我使用的插件管理器是vim-plug 语法检查Syntas…

无涯教程-JavaScript - MONTH函数

描述 MONTH函数返回由序列号表示的日期的月份。月份以整数形式给出,范围从1(一月)到12(十二月)。 语法 MONTH (serial_number)争论 Argument描述Required/OptionalSerial_number 您要查找的月份的日期。 应该使用DATE函数或其他公式或函数的输出输入日期。 如果将日期作为文…

经纬恒润重磅推出第七代前视单目摄像头控制器

随着L2自动驾驶功能的普及&#xff0c;整车架构的升级&#xff0c;以及越来越高的法规要求&#xff0c;ADAS产品的开发迎来了更高的挑战&#xff1a;一方面&#xff0c;需要提高ADAS产品的整车性能&#xff0c;以应对更多的使用场景&#xff1b;另一方面&#xff0c;需要考虑AD…

【Python 实战】---- 批量绘制透明背景方形印章

1. 目标效果 2. 分析实现 可以使用 opencv 或者 PIL 进行绘制实现,但是由于 opencv 不能绘制中文,因此采用 PIL 进行印章制作;先绘制边框和隔离线;再绘制文字;最后给印章添加纹理。3. 绘制边框 3.1 绘制边框分析 通过 draw.rectangle 实现公用的矩形的绘制;获取图像长宽…

maven项目继承依赖中包版本的说明

继承 参考博客MAVEN的继承详解_parent中哪些标签可以被子项目继承_32224047_yw的博客-CSDN博客 https://blog.csdn.net/liupeifeng3514/article/details/80236827 dependencies 和dependencyManagement 在Maven多模块的时候&#xff0c;管理依赖关系是非常重要的&#xff…

冠达管理:上市破发是什么意思?

随着股票商场的开展&#xff0c;一些公司开端考虑走向上市&#xff0c;以取得更多的资金和更高的知名度。然而&#xff0c;上市并不总是一件功德。当一家公司的股票开端买卖时&#xff0c;如果它的股价远低于发行价&#xff0c;就可以说它遭遇了“破发”。这是一种负面事件&…

【CAD二次开发】重新加载acad.pgp快捷菜单文件

为了加快绘图速度&#xff0c;好多人会进行CAD快捷命令的修改&#xff0c;那怎么在不需要重启CAD的情况下自动更新&#xff1f; CAD修改acad.pgp,快捷命令后&#xff0c;自动更新。 方法一 命令行输入reinit&#xff0c;命令。 在弹出的窗口中&#xff0c;选择‘PGP文件’&…

【Linux详解】——共享内存

&#x1f4d6; 前言&#xff1a;本期介绍共享内存。 目录 &#x1f552; 1. 共享内存的原理&#x1f552; 2. 共享内存的概念&#x1f558; 2.1 接口认识&#x1f558; 2.2 演示生成key的唯一性&#x1f558; 2.3 再谈key &#x1f552; 3. 共享内存相关命令&#x1f552; 4. 利…

气象站是什么设备?功能是什么?

气象站是一种用于测量和记录气象数据的设备。它通常是由各种传感器及其数据传输设备、固定设备和供电设备组成&#xff0c;可以测量风速、风向、温度、湿度、气压、降水量等气象要素&#xff0c;并将这些数据记录下来&#xff0c;以便进一步分析和研究。 气象站通常设置在广阔…

从MySQL数据库中查出时间与数据库存储的时间不一致

1、TimeZone t TimeZone.getDefault(); 通过该方法查看系统的时区。 2、select global.time_zone,session.time_zone; 查看数据库的时区 3、在application.properties中配置&#xff1a; #SpringBoot默认的是Jackson框架转换&#xff0c;而Jackson默认的时间时区是GMT&…

动作分析:提升效率、改进质量、创新流程的秘密武器

动作分析的主要的用途和目的是排除多余的动作、无效的动作或缓慢的动作&#xff0c;如弯腰、站在凳子上、蹲着、工作场所差、缺少合适的工作设备、处于搜索状态的人和事等&#xff0c;形成标准化作业规范&#xff0c;从而通过最省力的方法达到最大的工作效率。这项研究可以不花…

为什么良好的客户服务对于成功的企业至关重要

图片来源于&#xff1a;SaleSmartly官网 良好的客户服务是任何成功企业的重要组成部分。提供卓越的客户服务有助于建立客户的信任和忠诚度&#xff0c;从而增加销售额和利润。它还对任何企业的声誉产生积极影响&#xff0c;带来更多客户和更好的口碑推荐。因此&#xff0c;企业…

【FusionInsight 迁移】HBase从C50迁移到6.5.1(03)6.5.1上准备Loader

【FusionInsight 迁移】HBase从C50迁移到6.5.1&#xff08;03&#xff09;6.5.1上准备Loader HBase从C50迁移到6.5.1&#xff08;03&#xff09;6.5.1上准备Loader登录新集群FusionInsight 6.5.1的Manager准备Loader服务准备Loader Role准备Loader User HBase从C50迁移到6.5.1&…

商家为什么要做微信小程序开发

一、引言 在移动互联网时代&#xff0c;微信已经成为人们生活中不可或缺的社交工具。微信小程序作为微信的一个重要扩展&#xff0c;以其轻便、易用、无需下载等特性&#xff0c;正在受到越来越多的关注。本文将详细探讨为什么需要进行微信小程序开发&#xff0c;以及微信小程…

Nacos Helm Chart Deploy Demo

文章目录 介绍准备条件定制 values.yaml检查登陆 介绍 Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称&#xff0c;一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。 Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供…