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

一、说明

        借助 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 displacynlp = 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 BERTopicX = pd.read_pickle('ml29_01.pkl')docs = X['preprocessed'].valuestopic_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 1956print(span.vector_norm)
# 3.0066288print(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-datanlp = spacy.blank("en")
training_data = [("Tokyo Tower is 333m tall.", [(0, 11, "BUILDING")]),
]

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

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

六、总结

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

·

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

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

相关文章

HTTP代理协议原理分析

HTTP代理协议是一种常见的网络协议&#xff0c;它可以在网络中传递HTTP协议的请求和响应。本文将介绍HTTP代理协议的分析和原理&#xff0c;包括HTTP代理的工作流程、HTTP代理的请求和响应格式、HTTP代理的优缺点等方面。 一、HTTP代理的工作流程 HTTP代理的工作流程如下&#…

通过idea实现springboot集成mybatys

概述 使用springboot 集成 mybatys后&#xff0c;通过http请求接口&#xff0c;使得通过http请求可以直接直接操作数据库&#xff1b; 完成后端功能框架&#xff1b;前端是准备上小程序&#xff0c;调用https的请求接口用。简单实现后端框架&#xff1b; 详细 springboot 集…

Elasticsearch,Logstash和Kibana安装部署(ELK Stack)

前言 当今数字化时代&#xff0c;信息的快速增长使得各类组织和企业面临着海量数据的处理和分析挑战。在这样的背景下&#xff0c;ELK Stack&#xff08;Elasticsearch、Logstash 和 Kibana&#xff09;作为一套强大的开源工具组合&#xff0c;成为了解决数据管理、搜索和可视…

linux并发服务器 —— 多线程并发(六)

线程概述 同一个程序中的所有线程均会独立执行相同程序&#xff0c;且共享同一份全局内存区域&#xff1b; 进程是CPU分配资源的最小单位&#xff0c;线程是操作系统调度执行的最小单位&#xff1b; Linux环境下&#xff0c;线程的本质就是进程&#xff1b; ps -Lf pid&…

简单了解ARP协议

目录 一、什么是ARP协议&#xff1f; 二、为什么需要ARP协议&#xff1f; 三、ARP报文格式 四、广播域是什么&#xff1f; 五、ARP缓存表是什么&#xff1f; 六、ARP的类型 6.1 ARP代理 6.2 免费ARP 七、不同网络设备收到ARP广播报文的处理规则 八、ARP工作机制原理 …

好玩的js特效

记录一些好玩的js特效 1、鱼跳跃特效 引入jquery:https://code.jquery.com/jquery-3.7.1.min.js 源码如下&#xff1a; <!--引入jquery--> <script src"https://code.jquery.com/jquery-3.7.1.min.js"></script> <!--引入跳跃源码--> <s…

【JavaEE】_HTML

目录 1.HTML结构 2. HTML常用标签 2.1 注释标签 2.2 标题标签&#xff1a;h1~h6 2.3 段落标签&#xff1a;p 2.4 换行标签&#xff1a;br 2.5 格式化标签 2.6 图片标签&#xff1a;img 2.7 超链接标签&#xff1a;a 2.8 表格标签 2.9 列表标签 2.10 表单标签 2.10…

【网络编程】IO多路复用

IO多路复用是一种高效的I/O处理方式&#xff0c;它允许单个进程能够同时监视多个文件描述符&#xff08;sockets、文件等&#xff09;&#xff0c;并在其中任何一个文件描述符准备好进行I/O操作时进行处理。它的核心在于使用少量的线程或进程来管理多个I/O操作&#xff0c;以提…

RK3568平台开发系列讲解(音视频篇)H264 的编码结构

🚀返回专栏总目录 文章目录 一、H264 的编码结构1.1、帧类型1.2、GOP1.3、Slice沉淀、分享、成长,让自己和他人都能有所收获!😄 📢视频编码的码流结构其实就是指视频经过编码之后得到的二进制数据是怎么组织的,换句话说,就是编码后的码流我们怎么将一帧帧编码后的图像…

通过rabbitmq生成延时消息,并生成rabbitmq镜像

通过rabbitmq生成延时消息队列&#xff0c;并生成rabbitmq镜像 整体描述1. 使用场景2. 目前问题3. 前期准备 具体步骤1. 拉取镜像2. 运行镜像3. 安装插件4. 代码支持4.1 config文件4.2 消费监听4.2 消息生产 5. 功能测试 镜像操作1. 镜像制作2. 镜像导入 总结 整体描述 1. 使用…

蠕虫病毒流量分析案例

背景 某供排水集团的网络管理员对其网络的健康状况持认可态度&#xff0c;表示网络运行正常&#xff0c;没有发现异常行为。然而&#xff0c;由于网络环境变得越来越复杂&#xff0c;仅凭借传统的网络经验已经不能全面了解网络情况。因此&#xff0c;我们为供排水集团安装了Ne…

Golang复习

golang的特点 Golang 针对并发进行了优化&#xff0c;并且在规模上运行良好 自动垃圾收集明显比 Java 或 Python 更有效&#xff0c;因为它与程序同时执行 golang数据类型 基本数据类型&#xff08;值类型&#xff09; 布尔类型 数字类型 整型 根据有符号分为&#xff1a;…

[NLP]LLM---FineTune自己的Llama2模型

一 数据集准备 Let’s talk a bit about the parameters we can tune here. First, we want to load a llama-2-7b-hf model and train it on the mlabonne/guanaco-llama2-1k (1,000 samples), which will produce our fine-tuned model llama-2-7b-miniguanaco. If you’re …

华为云API对话机器人CBS的魅力—实现简单的对话操作

云服务、API、SDK&#xff0c;调试&#xff0c;查看&#xff0c;我都行 阅读短文您可以学习到&#xff1a;人工智能AI智能的问答管理、全面的对话管理、高效训练部署 1.IntelliJ IDEA 之API插件介绍 API插件支持 VS Code IDE、IntelliJ IDEA等平台、以及华为云自研 CodeArts …

每日刷题-3

目录 一、选择题 二、编程题 1、计算糖果 2、进制转换 一、选择题 1、 解析&#xff1a;在C语言中&#xff0c;以0开头的整数常量是八进制的&#xff0c;而不是十进制的。所以&#xff0c;0123的八进制表示相当于83的十进制表示&#xff0c;而123的十进制表示不变。printf函数…

ASP.NET Core IOC容器

//IOC容器支持依赖注入{ServiceCollection serviceDescriptors new ServiceCollection();serviceDescriptors.AddTransient<IMicrophone, Microphone>();serviceDescriptors.AddTransient<IPower, Power>();serviceDescriptors.AddTransient<IHeadphone, Headp…

【SQL应知应会】索引 • Oracle版:B-树索引;位图索引;函数索引;单列与复合索引;分区索引

欢迎来到爱书不爱输的程序猿的博客, 本博客致力于知识分享,与更多的人进行学习交流 本文免费学习,自发文起3天后,会收录于SQL应知应会专栏,本专栏主要用于记录对于数据库的一些学习,有基础也有进阶,有MySQL也有Oracle 索引 • MySQL版 前言一、Oracle索引1.索引概述及分类…

upload-labs1-17思路

1 直接写一个php文件测试一下&#xff0c;发现弹窗不让上传 原理很简单&#xff0c;就是把后缀名拿出来过滤一遍&#xff0c;而白名单就是弹窗的这三个 解决方法&#xff1a; 因为这是在前端防御的一个手段&#xff0c;所以直接在浏览器设置上禁用js就行了&#xff1a; 也可…

微服务-OpenFeign基本使用

一、前言 二、OpenFeign基本使用 1、OpenFeign简介 OpenFeign是一种声明式、模板化的HTTP客户端&#xff0c;它使得调用RESTful网络服务变得简单。在Spring Cloud中使用OpenFeign&#xff0c;可以做到像调用本地方法一样使用HTTP请求访问远程服务&#xff0c;开发者无需关注…

stm32 学习笔记:GPIO输出

一、GPIO简介 引脚电平 0-3.3V,部分可容忍5V&#xff0c;对输出而言最大只能输出3.3V, 只要可以用高低电平来控制的地方&#xff0c;都可以用GPIO来完成&#xff0c;如果控制的功率比较大的设备&#xff0c;只需加入驱动电路即可 GPIO 通用输入输出口&#xff0c;可配置为 8种 …