跳转到主要内容

直接在spaCy中使用最新的Stanza(StanfordNLP)研究模型

项目描述

spaCy + Stanza(以前称为StanfordNLP)

此软件包封装了Stanza(以前称为StanfordNLP)库,因此您可以在spaCy管道中使用Stanford的模型。Stanford模型在CoNLL 2017和2018共享任务中取得了最佳准确率,该任务涉及68种语言的分词、词性标注、形态分析、词干提取和有标签的依存句法分析。截至v1.0,Stanza还支持选定语言的命名实体识别。

⚠️ 此软件包的先前版本可用作spacy-stanfordnlp

tests PyPi GitHub Code style: black

使用此包装器,您将能够使用以下由您的预训练stanza模型计算出的标注

  • 统计分词(反映在Doc及其标记中)
  • 词干提取(token.lemmatoken.lemma_
  • 词性标注(token.tagtoken.tag_token.postoken.pos_
  • 形态分析(token.morph
  • 依存句法分析(token.deptoken.dep_token.head
  • 命名实体识别(doc.entstoken.ent_typetoken.ent_type_token.ent_iobtoken.ent_iob_
  • 句子分割(doc.sents

⏳️️️ 安装

截至 v1.0.0 版本,spacy-stanza 仅兼容 spaCy v3.x。要安装最新版本

pip install spacy-stanza

对于 spaCy v2,安装 v0.2.x 并参考 v0.2.x 使用文档

pip install "spacy-stanza<0.3.0"

请确保同时 下载 其中一个 预训练的 Stanza 模型

📖 使用方法 & 示例

⚠️ 重要提示: 此包已被重构以利用 spaCy v3.0。为 spaCy v2.x 构建的先前版本工作方式有所不同。请参阅此 README 的先前标记版本以获取有关先前版本的文档。

使用 spacy_stanza.load_pipeline() 创建一个 nlp 对象,您可以使用该对象使用 Stanza 管道处理文本并创建 spaCy Doc 对象。默认情况下,spaCy 管道和 Stanza 管道都将使用相同的 lang 初始化,例如 "en"。

import stanza
import spacy_stanza

# Download the stanza model if necessary
stanza.download("en")

# Initialize the pipeline
nlp = spacy_stanza.load_pipeline("en")

doc = nlp("Barack Obama was born in Hawaii. He was elected president in 2008.")
for token in doc:
    print(token.text, token.lemma_, token.pos_, token.dep_, token.ent_type_)
print(doc.ents)

如果 spaCy 中有给定语言的语料库数据,则相应的语言类可以用作 nlp 对象的基础 - 例如,English()。这允许您使用 spaCy 的词法属性,如 is_stoplike_numnlp 对象遵循与任何其他 spaCy Language 类相同的 API - 因此,您可以使用 displaCy 可视化 Doc 对象,将自定义组件添加到管道中,使用基于规则的匹配器,以及执行您通常在 spaCy 中执行的大部分操作。

# Access spaCy's lexical attributes
print([token.is_stop for token in doc])
print([token.like_num for token in doc])

# Visualize dependencies
from spacy import displacy
displacy.serve(doc)  # or displacy.render if you're in a Jupyter notebook

# Process texts with nlp.pipe
for doc in nlp.pipe(["Lots of texts", "Even more texts", "..."]):
    print(doc.text)

# Combine with your own custom pipeline components
from spacy import Language
@Language.component("custom_component")
def custom_component(doc):
    # Do something to the doc here
    print(f"Custom component called: {doc.text}")
    return doc

nlp.add_pipe("custom_component")
doc = nlp("Some text")

# Serialize attributes to a numpy array
np_array = doc.to_array(['ORTH', 'LEMMA', 'POS'])

Stanza 管道选项

可以在 Pipeline API 之后提供附加的 Stanza Pipeline 选项作为关键字参数。

  • 将 Stanza 语言作为 lang 提供。对于没有 spaCy 支持的 Stanza 语言,使用 "xx" 作为 spaCy 语言设置。

    # Initialize a pipeline for Coptic
    nlp = spacy_stanza.load_pipeline("xx", lang="cop")
    
  • 按照 Pipeline API 提供Stanza管道设置

    # Initialize a German pipeline with the `hdt` package
    nlp = spacy_stanza.load_pipeline("de", package="hdt")
    
  • 使用 spaCy 而不是统计分词器进行分词(仅适用于英语)

    nlp = spacy_stanza.load_pipeline("en", processors= {"tokenize": "spacy"})
    
  • 提供任何额外的处理器设置作为额外的关键字参数

    # Provide pretokenized texts (whitespace tokenization)
    nlp = spacy_stanza.load_pipeline("de", tokenize_pretokenized=True)
    

spaCy 配置在 [nlp.tokenizer] 块中指定所有 Pipeline 选项。例如,上面最后一个示例的配置,一个德语管道,具有预分词文本

[nlp.tokenizer]
@tokenizers = "spacy_stanza.PipelineAsTokenizer.v1"
lang = "de"
dir = null
package = "default"
logging_level = null
verbose = null
use_gpu = true

[nlp.tokenizer.kwargs]
tokenize_pretokenized = true

[nlp.tokenizer.processors]

序列化

完整的 Stanza 管道配置存储在 spaCy 管道 配置 中,因此您可以像保存和加载其他 nlp 管道一样保存和加载管道。

# Save to a local directory
nlp.to_disk("./stanza-spacy-model")

# Reload the pipeline
nlp = spacy.load("./stanza-spacy-model")

请注意,此操作默认不保存任何 Stanza 模型数据。Stanza 模型非常大,因此目前此包期望您使用 stanza.download() 单独下载模型,并使它们在默认模型目录中或配置中的 [nlp.tokenizer.dir] 指定的路径中可用。

添加额外的 spaCy 管道组件

默认情况下,由 spacy_stanza.load_pipeline() 返回的 nlp 对象中的 spaCy 管道将为空,因为所有 stanza 属性都是在自定义分词器 StanzaTokenizer 中计算和设置的。但由于它是一个常规的 nlp 对象,您可以将自己的组件添加到管道中。例如,您可以使用 nlp.add_pipe("textcat", source=source_nlp) 添加自己的自定义文本分类组件,或者使用 EntityRuler 组件 使用您自己的基于规则的模板扩展命名实体。

项目详情


下载文件

下载适用于您平台的项目文件。如果您不确定选择哪个,请了解有关安装包的更多信息

源分发

spacy-stanza-1.0.4.tar.gz (13.9 kB 查看哈希值)

上传时间

构建分发

spacy_stanza-1.0.4-py3-none-any.whl (9.7 kB 查看哈希值)

上传时间 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面