使用spaCy构建可定制NLP管道

news/2025/11/27 6:03:37/文章来源:https://www.cnblogs.com/codeshare1135/p/19275157

使用spaCy构建可定制NLP管道

NLP简介

自然语言处理(NLP):从非结构化语言中提取结构化知识

spaCy工具概述

  • 研究概述、教程、数据集、库
  • Node.js、Python、C++、Java、Kotlin、Scala、R、Clojure、Ruby、Rust
  • 专注于spaCy库的功能性
  • Python + Cython(速度快!)
  • 专注于生产环境使用
  • 可配置、可定制、可扩展、可重新训练
  • 由开源DL库thinc提供支持
  • 开源(MIT许可证):https://github.com/explosion/spaCy/
  • 与其他NLP库的比较:https://spacy.io/usage/facts-figures

spaCy管道

文档 → 文本 → nlp处理 → 分词器 → 标注器 → 解析器 → 命名实体识别...

预训练模型

pip install spacy
python -m spacy download en_core_web_lgimport spacy
nlp = spacy.load('en_core_web_lg')
doc = nlp(text)from spacy import displacy
displacy.serve(doc, style='ent')print([(token.text, token.pos_) for token in doc])
  • 为10种语言提供预训练模型

定制分词器

from spacy.symbols import ORTH
nlp.tokenizer.add_special_case("Silo.AI", [{ORTH: "Silo.AI"}])
  • 为50种语言提供内置的特定语言规则
  • 欢迎提交改进您最喜欢语言的拉取请求!
  • 使用您自己的规则扩展默认规则
  • 定义特定的分词异常
  • 实现全新的分词器

(重新)训练模型

TRAIN_DATA = [("Filip Ginter works for Silo.AI.", {"entities": [(0, 12, "PERSON"), (24, 30, "ORG")]}),(…)
]for itn in range(n_iter):random.shuffle(TRAIN_DATA)batches = minibatch(TRAIN_DATA)losses = {}for batch in batches:texts, annotations = zip(*batch)nlp.update(texts, annotations, sgd=optimizer, drop=0, losses=losses)print(f"Loss at {itn} is {losses['ner']}")optimizer = nlp.begin_training()
optimizer = nlp.resume_training()

重新训练/优化现有的ML模型:

  • 添加新标签(如NER)
  • 输入新数据
  • 确保模型不会"忘记"之前学到的内容!
  • 同时输入"旧"示例

CLI训练

python -m spacy convert ud-treebanks-v2.4\UD_Finnish-TDT\fi_tdt-ud-train.conllu fi_json
python -m spacy convert ud-treebanks-v2.4\UD_Finnish-TDT\fi_tdt-ud-dev.conllu fi_json
python -m spacy train fi output fi_json\fi_tdt-ud-train.json fi_json\fi_tdt-ud-dev.json

从头开始训练ML模型:

  • 内置对UD注释的支持

注意:这不会自动给出最先进的结果...
没有调优、超参数选择或特定语言定制(尚未)!

spaCy v.3:更可配置的管道

(由Thinc v.8提供支持)

Thinc v.8

  • 新的深度学习库
  • 2020年1月发布
  • 多年来一直为spaCy提供支持
  • 为Python 3完全改造
  • 类型注释
  • 函数式编程概念:没有计算图,只有高阶函数
  • PyTorch、MXNet和TensorFlow的包装器
  • 广泛的文档:https://thinc.ai
def relu(inputs: Floats2d) -> Tuple[Floats2d, Callable[[Floats2d], Floats2d]]:mask = inputs >= 0def backprop_relu(d_outputs: Floats2d) -> Floats2d:return d_outputs * maskreturn inputs * mask, backprop_relu
  • 层执行前向函数
  • 返回前向结果 + 反向传播的调用
  • 反向传播计算输入的梯度,给定输出的梯度

类型检查

  • 通过用适当的类型注释变量,可以防止错误!
  • 促进自动完成
  • 使用mypy

配置

THINC.AI

  • 配置文件
  • 内置注册函数
  • 定义您自己的函数
  • 所有超参数明确定义
  • 所有对象在解析配置时构建

从配置训练

python -m spacy train-from-config fi train.json dev.json config.cfg

即将推出

  • 完全控制所有设置和参数
  • 配置可以轻松保存和共享
  • 快速运行实验,例如交换不同的tok2vec组件
  • 完全支持预训练的BERT、XLNet和GPT-2(参见spacy-transformers包)
  • 也称为"启动器模型"
  • 关注spaCy v.3!

新管道组件

共指消解

→ 链接引用同一事物/人的实体
→ 例如,"他"指的是"Nader"
Hugging Face的neuralcoref包与spaCy配合使用

实体链接(EL)

文本中所有这些Byron都是谁?

EL示例

Johny Carson:美国脱口秀主持人,还是美式足球运动员?
Russ Cochran:美国高尔夫球手,还是出版商?
Rose:英国足球运动员,还是电视剧《神秘博士》中的角色?

EL框架

步骤0:假设NER已经在原始文本上发生,因此我们有实体+标签
步骤1:候选生成:为提及创建可能的WikiData ID列表
步骤2:实体链接:将这些候选消歧为最可能的ID

文本 → NER → NER提及 → 每个提及的候选列表 → 候选生成 → EL → 每个提及的一个实体ID

Ms Byron would become known as the first programmer.
Byron: PERSON
Q7259 Q5679: Lord George Gordon Byron
Q272161: Anne Isabella Byron
Q7259: Ada Lovelace

新闻准确性

→ 在165K篇维基百科文章上训练卷积神经网络模型
→ 用于评估的手动注释新闻数据:360个实体链接
→ 添加共指消解:
• 同一共指链中的所有实体应链接到同一实体
• 分配链中置信度最高的KB ID
• 性能(EL+先验)下降到70.9% → 需要进一步工作

上下文 语料库统计 黄金标签 准确性
随机基线 - - 33.4%
仅实体链接 x - 60.1%
先验概率基线 - x 67.2%
EL + 先验概率 x x 71.4%
Oracle KB性能 x x 85.2%

总结

spaCy是一个生产就绪的Python NLP库,可让您快速实现文本挖掘解决方案,并且可扩展和可重新训练。3.0版将带来许多酷炫的新功能!

Thinc是一个新的深度学习库,广泛使用类型注释并支持配置文件。

Prodigy是某机构的注释工具,由主动学习提供支持。

@explosion_ai @oxykodit @spacy.io

问题?

没有愚蠢的问题——所以让我们假设也没有愚蠢的答案。
更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)或者 我的个人博客 https://blog.qife122.com/
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

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

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

相关文章

ant-design中a-table获取多分页中选择、全选问题处理

ant-design中<a-table获取多分页中选择、全选问题处理1、首先记录里需要有key ,用于标识行,不然如果各页中有重复key的话,切换到新页时会显示已选key的那行(key匹配) 2、在rowSelection中处理,关键是selected…

ant-design中a-table前端分页

ant-design中<a-table前端分页 数据已经全部在datasource2中了,每页大小固定5条,使用slice 切片获取每页数据

hyx_蓝桥杯C++学习_系列二

hyx_蓝桥杯C++学习_系列二一、递归的介绍 1. 概念 递归是函数直接或间接调用自身的过程 2. 两个关键要素终止条件:防止无限递归,类似于循环的终止条件防止死循环 递归表达式:递归的主体,将问题拆分为规模更小的子问…

【Java学习】【Java基础】--第3篇:初学模板方法模式和策略模式

一、模板方法模式 (Template Method Pattern) 1. 核心思想:骨架不变,细节可变 2. 模板方法模式的关键特点控制流程:父类控制算法骨架,子类实现具体步骤 代码复用:公共代码在抽象类中实现 扩展性:通过钩子方法提供…

mysql常用到的面试问题

1. MySQL 数据库的主要备份方式有哪些?答案:主要备份方式包括全量备份(完整备份整个数据库)和增量备份(仅备份自上次备份以来发生变化的数据)。工具有 mysqldump、XtraBackup 和物理备份。 2. 如何确保 MySQL 数…

充电模块厂家哪家好,2025充电模块厂家权威榜单

随着新能源汽车的普及,充电模块作为充电桩的“心脏”,其性能直接决定了充电效率与安全。面对市场上众多的充电模块厂家,如何避开营销噱头,选择一家真正靠谱的合作伙伴成为许多企业与采购者的难题。本文将为您呈现一…

电源模块厂家哪家好,2025电源模块厂家公司盘点

电源模块作为电子设备的“心脏”,其性能与可靠性直接关系到整个系统的稳定运行。面对市场上众多的电源模块厂家,如何找到那些在特定领域深耕细作、技术过硬但可能并不广为人知的优质企业呢?本文将为您盘点8家在2025…

2025杭州办公室保洁哪家好?权威排行

2025杭州办公室保洁哪家好?权威排行。随着杭州民营经济的蓬勃发展和办公模式的不断升级,办公室保洁已从传统的“扫地擦桌”升级为影响办公效率、企业形象和员工健康的关键服务。如今,杭州办公室保洁市场需求持续增长…

杭州公司日常保洁哪家好?2025杭州保洁公司精选榜单

杭州公司日常保洁哪家好?2025杭州保洁公司精选榜单。随着杭州城市建设的加快和企业办公环境标准化要求的提高,保洁服务已经成为城市运转和企业运营中不可或缺的一环。目前杭州保洁行业呈现出多元化发展的态势,从最初…

2025杭州商务楼保洁公司推荐综合实力榜单

2025杭州商务楼保洁公司推荐综合实力榜单。在杭州城市更新与商务发展的双重推动下,开荒保洁和商务楼保洁成为两类需求旺盛的专业保洁服务。开荒保洁主要针对新建成的建筑,包括写字楼、住宅、厂房等,负责清除施工遗留…

2025杭州保安公司综合实力榜单

2025杭州保安公司综合实力榜单。作为城市安全保障体系的重要组成部分,保安服务已深度融入杭州的住宅小区、商业综合体、产业园区、企业单位等各类场景,核心职责涵盖门禁值守、巡逻防范、安全检查、应急处置等,直接关…

杭州保洁外包服务哪家好?2025精选杭州园区保洁公司榜单

杭州保洁外包服务哪家好?2025精选杭州园区保洁公司榜单。伴随杭州产业园区的密集布局和企业运营效率提升需求的增长,保洁外包服务和园区保洁服务已成为产业生态中不可或缺的组成部分。保洁外包服务指企业将内部保洁工…

2025杭州专业物业管理公司权威排行

2025杭州专业物业管理公司权威排行。随着杭州城市化进程加快和房地产市场的成熟,物业管理已成为保障居民生活、企业运营和城市治理的重要基础服务。物业管理服务涵盖小区住宅、商业综合体、产业园区等多个场景,核心内…

基于SSE技术加 deepseek 实现打字机回复效果

具体代码,已上传到厂库 git clone https://gitee.com/rush_peng/sse-deepseek-demo.gitSSE 技术 go 后端实现 package mainimport ("bufio""bytes""encoding/json""fmt"&quo…

[zsh 专属配置 PS1 | 不依靠 oh my zsh]

# -------------------------- Zsh 专属 PS1 配置(含空行+conda/venv/git) -------------------------- # 颜色定义(Zsh用%F{颜色},而非Bash的\033) COLOR_CONDA="%F{cyan}" # 青色(conda环境) CO…

百航鹿大联训 roarctf_2019_easyheap

我现在心如死灰,面如平湖,胸有惊雷。 这里面水太深,你把握不住。😅 checksec是NO PIE的。来看代码。同样改了改函数名。 __int64 __fastcall main(int a1, char **a2, char **a3) {int v3; // eaxint v4; // ebxi…

图片云存储-七牛云

图片云存储-七牛云一、介绍 在实际开发中,我们会有很多处理不同功能的服务器。例如:应用服务器:负责部署我们的应用数据库服务器:运行我们的数据库文件服务器:负责存储用户上传文件的服务器  分服务器处理的目的…

彻底搞懂 Raft 算法:为“被理解”而生的分布式共识

彻底搞懂 Raft 算法:为“被理解”而生的分布式共识彻底搞懂 Raft 算法:为“被理解”而生的分布式共识 在分布式系统的世界里,共识(Consensus)是一个核心难题:如何让一堆机器对某个值(比如数据记录)达成一致? …

龙哥量化:初版简单的通达信公式回测案例_macd趋势策略收益曲线,展示在通达信的主副图(展示部分代码)

3、函数buy,sell不能指定手数,只能在界面设置。 4、不识别第二个参数价格,所以, 你用上图中的10个价格之外的价格,在回测系统不起作用,比如实时突破压力线,代码中用压力线的价格成交,BUY(突破, 压力线),实际…

代码随想录算法训练营第三章 哈希表part02

代码随想录算法训练营第三章 哈希表part02第454题.四数相加II leetcode链接:https://leetcode.cn/problems/4sum-ii/description/ 题目描述:给定四个包含整数的数组列表 A , B , C , D ,计算有多少个元组 (i, j, k, …