Stanza
定义
Stanza是一个以 Python 编写的自然语言处理工具包,由斯坦福大学自然语言处理组发布并维护,采用 Apache 许可证 2.0 版开放源代码。其核心是一套神经网络流水线,输入为一段自然语言文本,输出为句子、词语及其在通用依存框架下的语言学标注。除神经网络流水线外,工具包还包含一个访问 Java 版 Stanford CoreNLP 软件的 Python 接口,用于获得后者的额外分析能力。
原理
Stanza 的神经网络流水线由若干可自由组合的处理器(processor)串联而成,依次包括分词与分句、多词单元扩展、词形还原、词性与形态特征标注、依存句法分析和命名实体识别。分词与分句被合并为同一个模块,模型被建模为字符序列上的标注问题,判定某个字符是词语结尾、句子结尾还是多词单元结尾[3]。多词单元由频率词典与神经序列到序列模型的集成完成扩展,词形还原同样采用词典加神经序列到序列模型的组合方式[3]。
词性与形态特征标注以双向长短期记忆网络(Bi-LSTM)为基础架构,并通过双仿射打分机制让语言相关的词性标签和形态特征以通用词性为前提进行预测;依存句法分析采用基于 Bi-LSTM 的深层双仿射依存分析器,并额外引入预测词序与词间距离的语言学特征[3]。命名实体识别使用上下文化字符串表示的序列标注器,先训练正反两个方向的字符级语言模型,再把词位置表示与词向量拼接后送入门控循环解码器[3]。全部模块建立在 PyTorch 之上,在可用的图形处理器上运行可获得更高速度。
发展历程
该工具包最初以 StanfordNLP 的名义发布。其发布历史显示,0.1.0 版本于 2019 年 1 月 29 日公开,0.1.2 版本于同年 2 月 26 日加入对已预分词文本的支持[4]。2019 年 5 月 16 日的 0.2.0 版本大幅缩小了预训练模型的体积,并显著加快了神经词形还原器的速度[4][5]。
自 1.0.0 版本起,工具包更名为 Stanza,开发、问题追踪与维护工作均迁移至新的代码仓库;旧名称的软件包仍可通过 pip 安装,但新版本只以 stanza 之名分发[6][7]。2020 年,研究团队在计算语言学协会第 58 届年会的系统演示环节发表论文,介绍这一工具包的设计[2]。
1.1.1 版本在原有模型之外,补充了面向英语、德语和中文流水线的情感分析模型,并为泰语新增分词器,同时加入一整套生物医学与临床英语的句法分析和命名实体识别模型包[8]。1.3.0 版本增加了英语成分句法分析器与多语言语种识别模型,并将相关通用依存模型按 UD 2.8 重建;1.5.1 版本的全部通用依存模型则按 UD 2.12 重建[8]。
自 1.4.0 版本起,创建流水线时会自动尝试下载缺失的模型,用户可通过参数关闭这一行为[1]。研究团队另于 2021 年在《美国医学信息学协会杂志》发表论文,介绍该工具包面向生物医学与临床英语的模型包[9]。
应用
在通用场景中,工具包用于把非结构化文本转换为可供后续处理的结构化标注,典型用途包括构建依存句法树、提取词的原形、识别文本中的人名、地名与机构名等实体,以及计算句子的依存关系[10]。处理器可按需组合,例如只加载分词与词性标注处理器以加快处理速度,也可为不同处理器分别指定在特定数据集上训练的模型包[11]。
在专业领域方面,1.1.1 版本引入的生物医学与临床模型可处理生物医学文献和临床记录。官方公布的评测中,CRAFT 与 GENIA 树库上的分词准确率分别为 99.66 和 99.81,临床 MIMIC 树库上的分词准确率为 99.18;命名实体识别方面,化学与疾病数据集 BC5CDR 上的微平均 F1 值为 88.08,临床 i2b2 数据集上为 88.13[12]。
该工具包亦被第三方封装调用,例如 CRAN 上的 R 语言包 stanza 通过 reticulate 调用 Python 版 Stanza,在 R 环境中完成分词、词性标注、词形还原、实体识别与依存分析[13]。此外,一些医学信息学研究将其临床模型用于句子切分与概念抽取等预处理步骤[14]。
在实际部署中,模型文件默认下载至用户主目录下的资源文件夹,也可通过环境变量或参数改换路径;在无网络的机器上,可从已有安装复制模型或以手动方式下载后填充资源目录,从而实现离线使用[1]。
局限
分词器与多词单元处理器共用一套字符级判定模块,其准确性受训练树库的标注规范制约;工具包官方在公布临床模型评测结果时说明,MIMIC 树库由自动生成的银标准数据构成,相关得分不能视为严格的专家标注基线评测[12][3]。
核心神经网络流水线本身并不包含成分句法分析、共指消解与关系抽取等功能,这些能力需经由 CoreNLP 的 Python 接口获得,因而依赖 Java 后端;官方文档同时说明,使用本地原生的核心功能并不需要安装 CoreNLP。语言覆盖范围随版本和模型包变化,早期论文记录的支持语言数为 66 种,官方文档给出的预训练模型覆盖数则为 70 种,不同统计口径下的数字并不一致[2][1]。
安装和使用还受运行环境限制。文档指出工具包需要 Python 3.6 或更高版本,并依赖 PyTorch 1.3.0 及以上;通过 Anaconda 安装在某些 Python 版本上无法正常工作,官方建议改用 pip 安装[15]。此外,处理速度受硬件影响,在中央处理器上运行明显慢于图形处理器。
在通用能力方面,官方在模型历史中说明,1.3.0 版本引入的英语成分句法分析器在尚未结合字符语言模型与 BERT 集成时,得分相对当时最优结果偏低[8]。生物医学与临床命名实体识别在不同数据集上的表现差异较大,例如 JNLPBA 数据集上的 F1 值为 76.09,低于同一评测中 BioBERT 的 77.49[12]。
参见
-
Stanford CoreNLP —— Stanza 为其提供官方 Python 客户端,可借此获得共指消解、成分句法分析等扩展功能。
-
通用依存 —— Stanza 的句法标注体系所依据的形式化框架。
-
PyTorch —— Stanza 神经网络各模块所基于的深度学习库。
-
命名实体识别 —— Stanza 流水线中的一项基础标注任务。
-
依存句法分析 —— Stanza 输出句子句法结构的主要方式。
参考资料
- Download Models [引用日期2026-10-29]
- aclanthology.cn 上的网页 [引用日期2026-10-29]
- arxiv.org 上的网页 [引用日期2026-10-29]
- Release History [引用日期2026-10-29]
- Stanza v0.2.0 release notes (2019-05-16) | LibHunt [引用日期2026-10-29]
- StanfordNLP [引用日期2026-10-29]
- github.com 上的网页 [引用日期2026-10-29]
- Model History [引用日期2026-10-29]
- Stanford [引用日期2026-10-29]
- Dependency Parsing [引用日期2026-10-29]
- Getting Started [引用日期2026-10-29]
- Biomedical & Clinical Model Performance [引用日期2026-10-29]
- Package {stanza} - Type: | Package [引用日期2026-10-29]
- researchgate.net 上的网页 [引用日期2026-10-29]
- Installation [引用日期2026-10-29]