Spancat:文本标注的新方法
SpanCategorizer是spaCy框架中的一个组件,旨在满足NLP社区对多样化标注跨度的结构化标注需求,包括长短语、非命名实体或重叠标注。本文将深入探讨spancat的工作原理并展示其新特性。
背景与挑战
NLP社区大多将跨度标注视为实体抽取问题,但两者存在本质区别。实体通常具有清晰的词边界并由专有名词等语法单元组成,而跨度可以是任意的,经常包含名词短语和句子片段,甚至可能出现重叠。
例如在医疗文本中:“septic shock secondary to bacteremia”(菌血症导致的脓毒性休克)。FACTOR标签覆盖了异常大的词元跨度,这与标准NER中的短小可区分实体截然不同。更复杂的是,“septic”、“shock"和"bacteremia"等词元同时属于多个跨度,这与spaCy的ner组件不兼容。
Spancat架构设计
核心组件
Spancat由两个主要部分组成:建议器(suggester)和分类器(classifier)。建议器是自定义函数,用于从文本中提取可能的候选跨度并输入分类器。这些建议器函数可以完全基于规则、依赖其他组件的注释或使用机器学习方法。
分类器三阶段
- 嵌入:获取候选跨度的tok2vec表示,进行数值化处理
- 池化:缩减序列以提高模型鲁棒性,使用窗口编码器编码上下文
- 评分:对这些池化后的跨度进行多标签分类,返回模型预测和标签概率
Spancat的灵活性允许用户自定义架构,例如通过简单更新配置文件即可将MaxOutWindowEncoder替换为MishWindowEncoder。
嵌套NER案例研究
通过生物医学文献GENIA语料库的示例,展示了spancat在处理嵌套标注时的优势。在该语料中,“Human IL4"本身是一个蛋白质,而"Human IL4 promoter"是结合该蛋白质启动转录过程的DNA序列,两个跨度共享"Human"和"IL4"词元。
与传统EntityRecognizer需要为每个实体类型训练单独模型相比,spancat可以在单个Doc中存储所有跨度,并为所有标签训练单一模型,极大简化了实验流程。
新特性介绍
数据集分析与调试
从v3.3.1开始,spaCy的debug data命令全面支持spancat数据集的验证和分析。用户可以获取跨度大小、训练集与评估集潜在重叠等洞察。
智能配置生成
训练快速入门功能现在能够生成具有合理默认值的spancat配置文件,改进了训练体验。
重叠跨度可视化
可视化库displaCy新增对spancat的支持,通过新的"span"样式展示重叠跨度或层次结构。
|
|
新增建议器函数
在spacy-experimental 0.5.0版本中新增了三个基于规则的建议器函数:
- 子树建议器:使用依存注释建议词元及其语法后代
- 分块建议器:使用名词块迭代器建议名词块
- 句子建议器:使用句子边界建议句子跨度作为候选
SpanFinder边界识别
SpanFinder是一个新的实验性组件,通过标记潜在开始和结束词元来识别跨度边界。与ngram建议器相比,这种ML方法建议的候选跨度更少但更精确。
在GENIA数据集上的对比实验显示:
指标 | SpanFinder | n-gram (1-10) |
---|---|---|
F值 | 0.7122 | 0.7201 |
精确率 | 0.7672 | 0.7595 |
召回率 | 0.6646 | 0.6847 |
建议候选数 | 13,754 | 486,903 |
处理速度 | 10,465 tokens/秒 | 4,807 tokens/秒 |
总结
Spancat为NLP社区提供了解决复杂跨度标注问题的强大工具。用户现在拥有更多工具来分析、训练和可视化跨度,既可以作为NER的替代方案,也可以作为现有管道中的附加组件。