当前位置: 首页 > news >正文

使用spaCy构建可定制NLP管道

使用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.jsqmd.com/news/52163/

相关文章:

  • ant-design中a-table获取多分页中选择、全选问题处理
  • ant-design中a-table前端分页
  • hyx_蓝桥杯C++学习_系列二
  • 【Java学习】【Java基础】--第3篇:初学模板方法模式和策略模式
  • 节奏
  • mysql常用到的面试问题
  • 充电模块厂家哪家好,2025充电模块厂家权威榜单
  • 电源模块厂家哪家好,2025电源模块厂家公司盘点
  • 2025杭州办公室保洁哪家好?权威排行
  • 杭州公司日常保洁哪家好?2025杭州保洁公司精选榜单
  • 2025杭州商务楼保洁公司推荐综合实力榜单
  • 2025杭州保安公司综合实力榜单
  • 杭州保洁外包服务哪家好?2025精选杭州园区保洁公司榜单
  • 2025杭州专业物业管理公司权威排行
  • [zsh 专属配置 PS1 | 不依靠 oh my zsh]
  • 百航鹿大联训 roarctf_2019_easyheap
  • 图片云存储-七牛云
  • 彻底搞懂 Raft 算法:为“被理解”而生的分布式共识
  • 龙哥量化:初版简单的通达信公式回测案例_macd趋势策略收益曲线,展示在通达信的主副图(展示部分代码)
  • 代码随想录算法训练营第三章 哈希表part02
  • AI:情绪冲动和阴性症状有什么关系
  • 龙哥量化:简单的通达信公式回测案例_macd趋势策略收益曲线,展示在通达信的主副图(展示部分代码)
  • 光缆地图网站
  • AE表达式
  • 2025 Xhorse XDTPM1EN Universal Programmable TPMS Sensor: Supports 315/433MHz Key Tool Max Pro/MIDI
  • 2025年金蝶ERP服务商实施能力强、服务好——上海宝蝶深耕金蝶ERP管理系统、金蝶财务软件
  • 【论文阅读】DeltaLag: Learning Dynamic Lead-Lag Patterns in Financial Markets
  • Xhorse XDTPM1EN Universal Programmable TPMS Sensor 4pcs/lot – 315/433MHz for Key Tool Max Pro/MIDI
  • AI元人文:从价值对齐到价值共生的范式革命,及其在社会治理中的实践验证
  • 深入解剖 Redis 分布式锁:从 SETNX 到 Redlock 的演进之路