admin管理员组

文章数量:1612145

Py之spacy:spacy/spacy-transformers 的简介、安装、使用方法之详细攻略

目录

spacy/spacy-transformers 的简介

1、特点

1.1、spacy的特点

1.2、spacy-transformers的特点

2、文档说明

spacy/spacy-transformers 的安装

1、安装spacy和spacy-transformers

1.1、单独安装spacy

1.2、同时安装 spacy和spacy-transformers

2、从源代码编译

3、下载模型包

T1、命令自动下载

T2、手动下载

成功解决OSError: [E050] Can't find model 'en_trf_bertbaseuncased_lg'. It doesn't seem to be a Python package or a valid path to a data directory.

spacy/spacy-transformers 的使用方法

1、加载和使用模型 要加载模型

2、属性方法解释

3、基于spacy_transformers 设置流水线

4、基于spacy_transformers 从路径加载模型

5、Tokenization对齐

6、批处理、填充和逐句处理

7、TransformersLanguage的API

spacy/spacy-transformers 的案例应用

1、基础用法

NLP:利用spacy的en_core_web_sm预训练语言模型实现四种底层基本任务—分词/词频统计/词性标注/词向量)、依存句法分析)、相似度计算)、命名实体识别NER/提取短语/提取句子)应用案例实现代码

NLP:利用spacy的en_trf_bertbaseuncased_lg预训练语言模型实现四种底层基本任务—词法分析(词向量)、语义分析(语义解析)、信息抽取(命名实体识别NER)应用案例实现代码

NLP:利用spacy的en_core_web_sm预训练语言模型通过对文本数据的依存分析法(主*/**树结构)实现将大量的文本数据转化为结构化数据应用案例实现代码

NLP:利用spacy的en_core_web_sm预训练语言模型通过对文本数据的命名实体识别法(实体及其类型/ORG_PERSON_GPE)实现将大量的文本数据转化为结构化数据应用案例实现代码

LLMs之spaCy:利用spaCy管道训练大模型案例—对预训练的BERT、XLNet和GPT-2实现图文教程之详细攻略

2、进阶用法

NLP:利用spacy的en_core_web_trf预训练语言模型实现五种顶层应用任务——文本分类(情感分类)任务

LLMs之BERT:基于spaCy框架利用预训练Transformer(如BERT)进行多任务学习(添加自定义任务—文本情感分类)训练并进行模型打包和模型推理应用案例实现代码

LMs之BERT:基于spaCy框架利用预训练Transformer进行多任务学习(自定义任务—文本情感分类和命名实体识别NER)训练并进行模型打包和模型推理应用案例实现代码


spacy/spacy-transformers 的简介

       spacy是一款工业级自然语言处理工具。spaCy 是一个在 Python 和 Cython 中用于高级自然语言处理的库。它基于最新的研究成果,并从一开始就设计成可用于实际产品。
       spaCy 提供了预训练的流程,并目前支持70多种语言的分词和训练。它具有最先进的速度和神经网络模型,用于标记、解析、命名实体识别、文本分类等任务,还支持使用预训练的转换器(如BERT)进行多任务学习,以及生产就绪的训练系统、简单的模型打包、部署和工作流管理。spaCy 是商业开源软件,采用 MIT 许可证发布。

       spacy-transformers 是 spaCy 的一个扩展库,用于在 spaCy 中集成和使用预训练的转换器模型(如BERT、GPT等)。它允许使用 spaCy 的功能和工作流程来处理文本数据,同时利用强大的转换器模型进行词嵌入、命名实体识别、语义解析等自然语言处理任务。
       spacy-transformers是在 spaCy 中使用预训练的转换器(如 BERT、XLNet 和 GPT-2) 该软件包提供了 spaCy 的组件和架构,通过 Hugging Face 的 transformers 库在 spaCy 中使用转换器模型。结果是方便地访问最先进的转换器架构,如 BERT、GPT-2、XLNet 等等。
       spacy-transformers 提供了更简便的集成和使用预训练的转换器模型的方式,使得在 spaCy 中进行自然语言处理任务更加灵活和高效。spacy-transformers 提供了一个 TransformerModel 类,用于加载和使用预训练的转换器模型。您可以使用该类将转换器模型与 spaCy 流水线(pipeline)中的其他组件(如词性标注器、句法分析器等)进行集成。

GitHub地址

GitHub - explosion/spaCy: 💫 Industrial-strength Natural Language Processing (NLP) in Python

官方API:Library Architecture · spaCy API Documentation

1、特点

1.1、spacy的特点

>> 支持70多种语言

>> 针对不同语言和任务的训练流程

>> 使用预训练的转换器(如BERT)进行多任务学习

>> 支持预训练的词向量和嵌入

>> 最先进的速度

>> 生产就绪的训练系统

>> 基于语言学的分词

>> 支持命名实体识别、词性标注、依存句法分析、句子分割、文本分类、词形归并、形态分析、实体链接等组件

>> 可轻松扩展自定义组件和属性

>> 支持在PyTorch、TensorFlow和其他框架中使用自定义模型

>> 内置的语法和命名实体识别可视化工具

>> 简单的模型打包、部署和工作流管理

>> 稳健、经过严格评估的准确性

1.2、spacy-transformers的特点

>> 使用预训练的转换器模型(如 BERT、RoBERTa 和 XLNet)来增强你的 spaCy 流水线。

>> 轻松实现多任务学习:从多个流水线组件中反向传播到一个转换器模型。

>> 使用spaCy v3 强大且可扩展的配置系统进行训练。

>> 自动将转换器的输出与 spaCy 的分词对齐。

>> 轻松自定义保存在 Doc 对象中的转换器数据。

>> 轻松自定义处理文档的长度。

>> 提供开箱即用的序列化和模型打包功能。

2、文档说明

Documentation

 spaCy 101

New to spaCy? Here's everything you need to know!

对 spaCy 不熟悉?这里有您需要了解的一切!

 Usage Guides

How to use spaCy and its features.

如何使用 spaCy 及其功能。

 New in v3.0

New features, backwards incompatibilities and migration guide.

新功能、向后不兼容性和迁移指南。

 Project Templates

End-to-end workflows you can clone, modify and run.

可以克隆、修改和运行的端到端工作流程。

 API Reference

The detailed reference for spaCy's API.

spaCy API 的详细参考文档。

 Models

Download trained pipelines for spaCy.

下载 spaCy 的训练流程。

 Universe

Plugins, extensions, demos and books from the spaCy ecosystem.

spaCy 生态系统中的插件、扩展、演示和书籍。

 spaCy VS Code Extension

Additional tooling and features for working with spaCy's config files.

用于处理 spaCy 配置文件的附加工具和功能。

 Online Course

Learn spaCy in this free and interactive online course.

通过这个免费的互动在线课程学习 spaCy。

 Videos

Our YouTube channel with video tutorials, talks and more.

我们的 YouTube 频道提供视频教程、演讲等。

 Changelog

Changes and version history.

变更和版本历史。

 Contribute

How to contribute to the spaCy project and code base.

如何为 spaCy 项目和代码库做出贡献。

Get a custom spaCy pipeline, tailor-made for your NLP problem by spaCy's core developers. Streamlined, production-ready, predictable and maintainable. Start by completing our 5-minute questionnaire to tell us what you need and we'll be in touch! Learn more →

通过 spaCy 的核心开发人员获得定制的 spaCy 流程,根据您的 NLP 问题进行量身定制。简化、就绪生产、可预测和可维护。首先完成我们的5分钟问卷告诉我们您的需求,我们会与您联系!了解更多 →

Bespoke advice for problem solving, strategy and analysis for applied NLP projects. Services include data strategy, code reviews, pipeline design and annotation coaching. Curious? Fill in our 5-minute questionnaire to tell us what you need and we'll be in touch! Learn more →

针对应用 NLP 项目的问题解决、策略和分析的专属建议。服务包括数据策略、代码审查、流程设计和注释辅导。有兴趣吗?填写我们的5分钟问卷告诉我们您的需求,我们会与您联系!了解更多 →

spacy/spacy-transformers 的安装

操作系统:macOS / OS X · Linux · Windows(Cygwin、MinGW、Visual Studio)
Python 版本:Python 3.6+(仅支持64位)
软件包管理器:pip · conda(通过 conda-forge)

1、安装spacy和spacy-transformers

1.1、单独安装spacy

pip install spacy

conda install spacy -c https://mirrors.tuna.tsinghua.edu/anaconda/pkgs/main/

pip install -U pip setuptools wheel

使用 pip 安装软件包时,通常建议在虚拟环境中安装软件包,以避免修改系统状态:

python -m venv .env

source .env/bin/activate

pip install -U pip setuptools wheel

pip install spacy

1.2、同时安装 spacy和spacy-transformers

​pip install -i Simple Index -U spacy-transformers spacy
​

2、从源代码编译

安装 spaCy 的另一种方法是克隆其 GitHub 存储库并从源代码构建。如果您想对代码进行更改,这是常用的方法。您需要确保拥有一个开发环境,包括一个包含头文件、编译器、pip、虚拟环境和git的Python发行版。编译器部分是最棘手的。如何操作取决于您的系统。
>> Ubuntu 通过 apt-get 安装系统级依赖项:sudo apt-get install build-essential python-dev git。
>> Mac 安装最新版本的XCode,包括所谓的“Command Line Tools”。macOS 和 OS X 预装了 Python 和 git。
>> Windows 安装与用于编译 Python 解释器的版本匹配的 Visual C++ Build Tools 或 Visual Studio Express。

3、下载模型包

可以将训练好的 spaCy 流程安装为 Python 包。这意味着它们是您应用程序的一个组件,就像任何其他模块一样。可以使用 spaCy 的下载命令下载模型,也可以通过将 pip 指向路径或 URL 进行手动安装。

模型文件地址:Models & Languages · spaCy Usage Documentation

下边这些文件是 spaCy 中英文预训练模型的名称和标识符。它们表示了不同大小和功能的模型。

英文语料

en_core_web_sm: 这是英文的小型预训练模型(small)。它包含了基本的语言处理功能,如词性标注、命名实体识别、句法解析等。它的规模较小,适合处理简单的文本任务。可以使用spaCy库加载该模型,并根据具体任务的需求进行相应的处理和分析

它是一个用于英语文本处理的预训练语言模型,是spaCy自然语言处理库的一部分。该模型基于Transformer架构进行训练,使用了大规模的英语语料库。它提供了词性标注、命名实体识别、句法分析等功能,可用于各种自然语言处理任务。比如

>> 词向量表示(Word Vector Representation):为每个单词生成向量表示,以便进行语义相似度计算或词汇关系分析等任务。

>> 分词(Tokenization):将文本划分成单词或标记单元。
>> 词性标注(Part-of-Speech Tagging):为每个单词标注其词性,例如名词、动词、形容词等。
>> 命名实体识别(Named Entity Recognition):识别文本中的命名实体,如人名、地名、组织机构等。
>> 依存句法分析(Dependency Parsing):分析句子中单词之间的依存关系,如主谓关系、修饰关系等。

en_core_web_md: 这是英文的中型预训练模型(medium)。它比 en_core_web_sm 更大,并且包含了更多的词汇、更好的词向量表示和更准确的语言处理结果。它适用于中等规模的文本任务。

en_core_web_lg: 这是英文的大型预训练模型(large)。它比 en_core_web_md 更大,包含了更丰富的词汇和更准确的语言处理能力。它适用于大规模的文本任务和需要高度准确性的应用。

en_core_web_trf: 这是英文的预训练转换器模型(transformer)。它基于强大的预训练转换器(如BERT)构建,具有更高级的语义理解能力。它集成了预训练转换器模型的优势,适用于需要深层语义解析的任务。

中文预料

T1、命令自动下载

python -m spacy download en_core_web_sm

T2、手动下载

成功解决OSError: [E050] Can't find model 'en_trf_bertbaseuncased_lg'. It doesn't seem to be a Python package or a valid path to a data directory.

成功解决OSError: [E050] Can‘t find model ‘en_trf_bertbaseuncased_lg‘. It doesn‘t seem to be a Python pac_一个处女座的程序猿的博客-CSDN博客

spacy/spacy-transformers 的使用方法

1、加载和使用模型 要加载模型

使用 spacy.load() 并提供模型名称或模型数据目录的路径。

import spacy

nlp = spacy.load("en_core_web_sm")
doc = nlp("This is a sentence.")

您还可以通过完整的模型名称直接导入模型,然后调用其 load() 方法,不带参数。

import spacy import en_core_web_sm

nlp = en_core_web_sm.load()
doc = nlp("This is a sentence.")

2、属性方法解释

该包装器在 Doc、Span 和 Token 对象上设置了以下自定义扩展属性

Name

Type

Description

._.trf_alignment

List[List[int]]

Alignment between wordpieces and spaCy tokens. Contains lists of wordpiece token indices (one per spaCy token) or a list of indices (if called on a Token).
单词片段和 spaCy 标记之间的对齐。包含单词片段标记索引的列表(每个 spaCy 标记一个)或索引的列表(如果应用于 Token)。

._.trf_word_pieces

List[int]

The wordpiece IDs.

._.trf_word_pieces_

List[str]

The string forms of the wordpiece IDs.

单词片段 ID 的字符串形式

._.trf_last_hidden_state

ndarray

The last_hidden_state output from the transformers model.

 模型的 last_hidden_state 输出

._.trf_pooler_output

List[ndarray]

The pooler_output output from the transformers model.

._.trf_all_hidden_states

List[ndarray]

The all_hidden_states output from the transformers model.

._.all_attentions

List[ndarray]

The all_attentions output from the transformers model.

._.trf_d_last_hidden_state

ndarray

The gradient of the last_hidden_state output from the transformers model.

模型的 last_hidden_state 输出的梯度

._.trf_d_pooler_output

List[ndarray]

The gradient of the pooler_output output from the transformers model.

._.trf_d_all_hidden_states

List[ndarray]

The gradient of the all_hidden_states output from the transformers model.

._.trf_d_all_attentions

List[ndarray]

The gradient of the all_attentions output from the transformers model.

访问这些值

doc = nlp("This is a text.")

print(doc._.trf_word_pieces_)

3、基于spacy_transformers 设置流水线

为了运行,使用 TransformersLanguage 创建的 nlp 对象需要按顺序安装一些组件:一个用于分配句子边界的组件(例如 spaCy 的内置 Sentencizer),TransformersWordPiecer,用于分配单词片段标记,以及 TransformersTok2Vec,用于分配标记向量。trf_name 参数定义要使用的预训练模型的名称。from_pretrained 方法通过 transformers 加载预训练模型。

from spacy_transformers import TransformersLanguage, TransformersWordPiecer, TransformersTok2Vec

name = "bert-base-uncased"
nlp = TransformersLanguage(trf_name=name, meta={"lang": "en"})
nlp.add_pipe(nlp.create_pipe("sentencizer"))
nlp.add_pipe(TransformersWordPiecer.from_pretrained(nlp.vocab, name))
nlp.add_pipe(TransformersTok2Vec.from_pretrained(nlp.vocab, name))
print(nlp.pipe_names)  # ['sentencizer', 'trf_wordpiecer', 'trf_tok2vec']

4、基于spacy_transformers 从路径加载模型

transformers 模型也可以从文件路径加载,而不仅仅是通过名称加载。例如,假设您想使用 Allen AI 的 scibert。首先,下载 PyTorch 模型文件,解压缩它们,解压缩 weights.tar,将 bert_config.json 重命名为 config.json,并将所有文件放入一个目录中。您的目录现在应该包含一个 pytorch_model.bin、vocab.txt 和 config.json。还请确保您的路径包括模型的名称。然后,您可以像这样初始化 nlp 对象

from spacy_transformers import TransformersLanguage, TransformersWordPiecer, TransformersTok2Vec


name = "scibert-scivocab-uncased"
path = "/path/to/scibert-scivocab-uncased"

nlp = TransformersLanguage(trf_name=name, meta={"lang": "en"})
nlp.add_pipe(nlp.create_pipe("sentencizer"))
nlp.add_pipe(TransformersWordPiecer.from_pretrained(nlp.vocab, path))
nlp.add_pipe(TransformersTok2Vec.from_pretrained(nlp.vocab, path))

5、Tokenization对齐

Tokenization对齐 Transformer 模型通常是在经过 "wordpiece" 算法预处理的文本上进行训练的,该算法限制了模型需要考虑的不同标记类型的数量。Wordpiece 对于训练神经网络非常方便,但它并不产生与任何语言学概念中的 "单词" 相匹配的分词。大多数罕见的单词将映射到多个 wordpiece 标记,并且有时对齐将是多对多的。spacy-transformers 计算了这种对齐,您可以通过 doc._.trf_alignment 访问它。它是一个长度与 spaCy 标记数相等的列表。列表中的每个值是连续整数列表,它们是索引到 wordpieces 列表的索引。

如果您可以处理与实际单词不对齐的表示形式,最好使用 transformer 的原始输出,可以通过 doc._.trf_last_hidden_state 访问。此变量为您提供了一个张量,每个 wordpiece 标记一行。

如果您正在处理标记级别的任务,例如词性标注或拼写纠正,您将希望处理标记对齐的特征,这些特征存储在 doc.tensor 变量中。

我们已经尽力以尽可能忠实地计算对齐的 doc.tensor 表示形式,优先考虑避免信息损失。对齐已经计算,以使 doc.tensor.sum(axis=1) == doc._.trf_last_hidden_state.sum(axis=1)。为了使这个工作正常,doc.tensor 的每一行(对应于一个 spaCy 标记)都被设置为与该标记对齐的 last_hidden_state 张量的行的加权和,其中权重与对齐到该行的其他 spaCy 标记的数量成比例。为了包含来自(通常重要的 --- 请参阅 Clark et al., 2019)边界标记的信息,我们假设这些标记也与句子中的所有标记 "对齐"。

6、批处理、填充和逐句处理

Transformer 模型在序列长度方面具有立方级的运行时和内存复杂度。这意味着为了实现合理的效率,较长的文本需要被划分为句子

spacy-transformers 在内部处理这个过程,并且要求在流程中添加了这种类型的句子边界检测组件。我们推荐:

sentencizer = nlp.create_pipe("sentencizer")

nlp.add_pipe(sentencizer, first=True)

在内部,Transformer 模型将对句子进行预测,生成的张量特征将被重建以产生文档级别的注释。为了进一步提高效率和减少内存需求,spacy-transformers 还在内部执行基于长度的子批处理。子批处理通过序列长度对批处理的句子进行重新分组,以最小化所需的填充量。配置选项 words_per_batch 控制这个行为。您可以将其设置为 0 以禁用子批处理,或将其设置为一个整数,以对每个子批处理的单词数(包括填充)设置最大限制。默认值为 3000 个单词,在 Tesla V100 上效果还不错。

许多预训练的 Transformer 模型都有最大序列长度。如果一个句子超过了最大长度,它将被截断,受影响的结尾标记将收到零向量。

7、TransformersLanguage的API

spacy-transformers:🛸用于预训练的BERT、XLNet和GPT-2的spaCy管道-面圈网

spacy/spacy-transformers 的案例应用

1、基础用法

NLP:利用spacy的en_core_web_sm预训练语言模型实现四种底层基本任务—分词/词频统计/词性标注/词向量)、依存句法分析)、相似度计算)、命名实体识别NER/提取短语/提取句子)应用案例实现代码

https://yunyaniu.blog.csdn/article/details/131137433

NLP:利用spacy的en_trf_bertbaseuncased_lg预训练语言模型实现四种底层基本任务—词法分析(词向量)、语义分析(语义解析)、信息抽取(命名实体识别NER)应用案例实现代码

https://yunyaniu.blog.csdn/article/details/131139397

NLP:利用spacy的en_core_web_sm预训练语言模型通过对文本数据的依存分析法(主*/**树结构)实现将大量的文本数据转化为结构化数据应用案例实现代码

https://yunyaniu.blog.csdn/article/details/131238556

NLP:利用spacy的en_core_web_sm预训练语言模型通过对文本数据的命名实体识别法(实体及其类型/ORG_PERSON_GPE)实现将大量的文本数据转化为结构化数据应用案例实现代码

https://yunyaniu.blog.csdn/article/details/131238636

LLMs之spaCy:利用spaCy管道训练大模型案例—对预训练的BERT、XLNet和GPT-2实现图文教程之详细攻略

LLMs之spaCy:利用spaCy管道训练大模型案例—对预训练的BERT、XLNet和GPT-2实现图文教程之详细攻略_一个处女座的程序猿的博客-CSDN博客

2、进阶用法

NLP:利用spacy的en_core_web_trf预训练语言模型实现五种顶层应用任务——文本分类(情感分类)任务

https://yunyaniu.blog.csdn/article/details/131139296

LLMs之BERT:基于spaCy框架利用预训练Transformer(如BERT)进行多任务学习(添加自定义任务—文本情感分类)训练并进行模型打包和模型推理应用案例实现代码

https://yunyaniu.blog.csdn/article/details/131160611

LMs之BERT:基于spaCy框架利用预训练Transformer进行多任务学习(自定义任务—文本情感分类和命名实体识别NER)训练并进行模型打包和模型推理应用案例实现代码

https://yunyaniu.blog.csdn/article/details/131160647
 

本文标签: 使用方法攻略简介详细py