直接在spaCy中使用最新的Stanza(StanfordNLP)研究模型
项目描述
spaCy + Stanza(以前称为StanfordNLP)
此软件包封装了Stanza(以前称为StanfordNLP)库,因此您可以在spaCy管道中使用Stanford的模型。Stanford模型在CoNLL 2017和2018共享任务中取得了最佳准确率,该任务涉及68种语言的分词、词性标注、形态分析、词干提取和有标签的依存句法分析。截至v1.0,Stanza还支持选定语言的命名实体识别。
⚠️ 此软件包的先前版本可用作
spacy-stanfordnlp
。
使用此包装器,您将能够使用以下由您的预训练stanza
模型计算出的标注
- 统计分词(反映在
Doc
及其标记中) - 词干提取(
token.lemma
和token.lemma_
) - 词性标注(
token.tag
、token.tag_
、token.pos
、token.pos_
) - 形态分析(
token.morph
) - 依存句法分析(
token.dep
、token.dep_
、token.head
) - 命名实体识别(
doc.ents
、token.ent_type
、token.ent_type_
、token.ent_iob
、token.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_stop
或 like_num
。nlp
对象遵循与任何其他 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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 4236d37dcd9342b6e1a1d4d86cb840c01a31ab3c48a5052ea4b6cf8abcc4f334 |
|
MD5 | 02195fdb1654e0b178fdfa49f40ad22b |
|
BLAKE2b-256 | 6fc98d4183c5064d99ecf214d59aa1102c2d32368c198e17db6fa913a67fbaef |
spacy_stanza-1.0.4-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1ffb2f0053bb1361adf49c08fcac77214c2240770002239b1a715be3e25c6c99 |
|
MD5 | b83f4012da4995b7101dde2655c2ca55 |
|
BLAKE2b-256 | dde1d38eff51089bba011c13cf181c2d0e8358c10e00752f397fd27147ad8e6e |