引言

在自然语言处理 (NLP) 的世界中,命名实体识别 (NER) 是一项基石任务。我们通常要求模型阅读一个句子并高亮显示特定的项目——人名、组织、地点或医疗症状。多年来,标准的方法是将这些实体视为完整的文本块。如果你看到 “New York City” (纽约市) ,你会在三个连续的单词周围画一个框。

但人类语言很少如此整洁。特别是在生物医学等专业领域,实体经常会断开、包裹其他单词或共享组件。考虑这个短语: “The patient suffered pain in the left and right knees.” (病人遭受了左膝和右膝的疼痛。)

标准的 NER 模型看到的是一个令人困惑的序列。然而,人类看到的是两个截然不同的实体: “pain in left knees” (左膝疼痛) 和 “pain in right knees” (右膝疼痛) 。这些实体是 非连续的 (discontinuous) 。 它们跳过了单词,并且共享了单词。

处理这些非连续结构历来是 NLP 研究人员的一大头疼问题。以前的解决方案涉及复杂的转换系统或基于图的模型,这些模型的计算成本很高 (速度慢) ,并且往往存在结构上的歧义。

在论文 “A Fast and Sound Tagging Method for Discontinuous Named-Entity Recognition” 中,研究人员提出了一个令人耳目一新的解决方案。他们展示了如何将这个复杂的非连续问题转化为流畅的标注任务——类似于我们用于简单文本的标准方法——同时保证数学上的 “合理性 (soundness) “。结果如何?一个准确率比肩最先进水平 (SOTA) ,但运行速度最高快 50 倍 的模型。

在这篇文章中,我们将剖析他们的方法,了解他们如何分解复杂的句子,如何使用自动机来强制执行逻辑,以及当数据没有明确告诉他们如何拆分时,他们是如何训练模型的。


问题所在: 当 “扁平化” 标注失效时

要理解这项创新,首先需要看看标准方法的局限性。

在 “扁平化” 或标准 NER 中,我们通常使用 BIO 标注 :

  • B: 实体的开始 (Beginning) 。
  • I: 实体内部 (Inside) 。
  • O: 实体外部 (Outside) 。

这对于 “New York” 来说非常完美。New 是 (B),York 是 (I)。但是,你如何标注 “pain in left and right knees” 来提取 “pain in left knees” 和 “pain in right knees” 呢?如果你将 “pain” 标记为 “开始”,你无法轻易地表明它同时属于 两个独立的 实体,除非让标签集变得极其复杂。

研究人员通过关注 非连续 NER 来解决这个问题。这对于生物医学文本至关重要,因为药物不良反应通常以分散的短语形式出现。

语言学挑战

非连续性通常由两个原因引起:

  1. 词序规则: “Toes are painful” (脚趾疼痛) ,实体是 “painful toes”,但动词将其分开了。
  2. 并列结构简化 (Coordination Reduction) : “Pain in arms and shoulders” (手臂和肩膀疼痛) ,说话者为了效率省略了第二个 “pain in”。

现有的方法试图通过 “超图” 或 “转换动作” (类似于移进-归约解析器) 来解决这个问题。虽然有效,但这些方法的时间复杂度通常是二次方 (\(O(n^2)\)) 甚至更差,使得它们在长文档上运行缓慢。此外,以前的一些标注方案存在 “结构歧义”,意味着一个标签序列可能代表多种不同的实体组合,反之亦然。


核心方法: 简化为词级标注

研究人员的主要贡献是一种表示这些断裂文本链的新方法,以便可以通过线性时间的标注算法来解决。

1. 双层表示法

作者建议不要试图一次性捕获非连续实体,而是将其分解。他们将非连续提及 (mention) 视为一组 带类型的组件 (Typed Components)

想象一下短语: “swollen and stiff knees” (肿胀和僵硬的膝盖)

这包含两个实体: “swollen knees” (肿胀的膝盖) 和 “stiff knees” (僵硬的膝盖) 。 研究人员将其分解为一个双层结构:

  1. 上层: 识别提及的 *集合 (set) *。
  2. 下层: 识别 *组件 (components) * (连续的文本片段) 。

他们将组件限制为两种类型,任意标记为 XY (或者概念上的 “事件” 和 “身体部位”) 。

Figure 1: (Top) Sentence with its original annotation. It contains two continuous mentions(“Chronic fatigue” and“stiff knees”)and three discontinuous mentions(“swollen knees”,“swollen left elbows”and"stiff left elbows”). (Bottom) Sentence annotated with our two-layer representation and the associated tag sequence.

请看上方 图 1 的下半部分。

  • 句子是: “Chronic fatigue together with swollen and stiff knees and left elbows.”
  • 注意 Discontinuous (Disc) 部分。
  • 单词 “swollen” 被标注了。“stiff” 被标注了。“knees” 被标注了。
  • 通过将 “swollen” 和 “stiff” 分配给一种类型 (假设是类型 X,或 EVENT) ,将 “knees” 分配给另一种类型 (类型 Y,或 PART) ,模型可以通过取 笛卡尔积 来重建完整的实体。

如果集合 1 包含类型 X={“swollen”, “stiff”} 和类型 Y={“knees”},重建逻辑是: 将每个 X 与每个 Y 结合。 结果: {“swollen knees”, “stiff knees”}。

这种巧妙的分解将复杂的重叠问题转化为更简单的组件识别问题。

2. 标注方案

为了实现这种分解,作者引入了一组特定的 10 个标签。

对于连续提及:

  • CB: 连续提及开始 (Continuous Begin)
  • CI: 连续提及内部 (Continuous Inside)
  • O: 外部 (Outside)

对于非连续集合: 他们使用带有前缀和后缀的标签,如 DB-Bx

  • 前缀 (跨度 Span) :
  • DB: 非连续开始 (整个集合跨度的开始) 。
  • DI: 非连续内部 (跨度内部) 。
  • 后缀 (组件 Component) :
  • Bx / By: 类型 X 或 Y 的组件开始。
  • Ix / Iy: 类型 X 或 Y 的组件内部。
  • O: 不属于组件的一部分 (但在跨度内部) 。

回顾图 1,注意单词下方的标签序列。“Swollen” 获得 DB-Bx (跨度开始,组件 X 开始) 。“And” 获得 DI-O (跨度内部,但不是组件) 。“Stiff” 获得 DI-Bx (跨度内部,另一个组件 X 的开始) 。

3. 通过自动机确保合理性

这就是该方法变得 “合理 (sound) " 的地方。如果神经网络只是独立地为每个单词预测标签,它可能会输出无意义的内容。它可能预测一个没有 “组件开始” 标签的 “组件内部” 标签。或者它可能预测一个无法映射回任何有效实体的序列。

为了防止这种情况,研究人员使用了 加权有限状态自动机 (WFSA)

WFSA 是一个有向图,状态之间的转换会发射符号 (标签) 。研究人员设计了一个特定的 “文法自动机”,编码了他们标注方案的所有规则。

Figure 2: The grammar automaton we propose for discontinuous named-entity recognition.

图 2 可视化了这个文法。

  • 状态 1 是中心枢纽。
  • 如果模型预测了一个连续提及 (CB) ,它移动到 状态 2 。 从状态 2,它只能去 CI (继续提及) 或回到 1 (结束提及) 。它不能跳转到非连续标签。
  • 如果模型开始一个非连续集合 (DB-Bx) ,它会进入右侧的复杂结构 (状态 7、8 等) 。
  • 这个自动机中的路径强制执行约束。例如,除非你已经找到了至少一个 X 类型组件和一个 Y 类型组件,否则你不能退出非连续结构。

这个自动机充当过滤器的作用。实际上,模型被禁止预测无效的序列。


解码算法

模型实际上是如何选择最佳标签的?它使用两个自动机的交集。

  1. 句子自动机 (\(S\)): 这代表神经网络的原始分数。它允许任何位置的任何标签,并由网络的输出加权。
  2. 文法自动机 (\(G\)): 这代表有效序列 (来自图 2) 。

通过计算交集 \(G \cap S\),研究人员创建了一个新图,其中仅包含有效路径,并由神经网络的置信度加权。

为了找到最佳标签序列,他们执行 最大后验 (MAP) 推断

\[ \widehat { \pmb { y } } _ { \boldsymbol { \theta } } ( \pmb { x } ) = \underset { \pmb { y } \in Y } { \arg \operatorname* { m a x } } \ \langle \pmb { y } , f _ { \boldsymbol { \theta } } ( \pmb { x } ) \rangle , \]

这个公式实际上是在问: “在所有 有效 序列 (\(y \in Y\)) 中,哪一个的总分最高?” 由于交集图结构良好,这可以使用 维特比算法 (Viterbi algorithm) 来解决。

至关重要的是,这个解码步骤的时间复杂度与输入长度呈 线性关系 (\(O(n)\))。以前基于图的方法通常是二次方或更差。


处理缺失标签: 弱监督

这里有个陷阱。现实世界的数据集会将 “pain in arms” 标注为一个实体,但它们 不会 将 “pain in” 标注为组件类型 X,将 “arms” 标注为组件类型 Y。我们前面讨论的内部结构是本文的一个理论构想,并不存在于训练数据中。

这意味着我们拥有 部分标签 (Partial Labels) 。 我们知道最终的实体,但不知道生成它们的标签序列。

为了解决这个问题,研究人员使用了一种通常称为 软期望最大化 (Soft EM) 的技术。他们将组件类型视为潜 (隐藏) 变量。

在训练期间,他们不是强迫模型匹配一个特定的标签序列,而是最小化可以产生基准真相实体的 所有可能的 有效标签序列的负对数似然。

\[ \begin{array} { l } { { \displaystyle \widetilde { \ell } ( { \pmb w } ; \widetilde { \pmb Y } ) = - \log p _ { \theta } \big ( \widetilde { \pmb Y } | { \pmb x } \big ) = - \log \sum _ { { \pmb y } \in \widetilde { \pmb Y } } p _ { \theta } \big ( { \pmb y } | { \pmb x } \big ) } } \\ { ~ = A _ { { \pmb Y } } \big ( f _ { \theta } ( { \pmb x } ) \big ) - \underbrace { \log \sum _ { { \pmb y } \in \widetilde { \pmb Y } } \exp \langle { \pmb y } , f _ { \theta } ( { \pmb x } ) \rangle } _ { = A _ { \widetilde { \pmb Y } } \big ( f _ { \theta } ( { \pmb x } ) \big ) } , \qquad ( 3 } \end{array} \]

公式 3 中,\(\widetilde{Y}\) 表示与基准真相兼容的所有标签序列的集合。损失函数对所有这些有效序列的概率求和。这使得模型能够自行“学习”最佳的内部结构 (例如,区分身体部位和事件) ,而无需明确的监督。

研究人员还尝试了“硬 EM”方法 (在训练期间选择单一最佳路径) 并结合外部知识 (使用医学词典识别身体部位) ,但他们发现标准的软 EM 效果非常好。


实验与结果

团队在三个生物医学数据集上评估了他们的模型: CADECSHARE2013SHARE2014 。 由于分离的医学症状出现频率很高,这些数据集以难度著称。

准确率比较

尽管架构很简单 (标准的 DeBERTa-V3 模型 + 自动机层) ,但表现令人印象深刻。

Table 1: Results on on three diferent datasets.Results marked with \\(\\dagger\\) are reproductions by Wang et al. (2021).

表 1 显示了 F1 分数。

  • SOTA 比较: 提出的方法 (底部几行) 获得了 F1 分数,这些分数非常有竞争力,并且通常优于以前复杂的模型,如基于转换的系统 (Dai et al.) 或最大团发现 (Wang et al.) 。
  • 一致性: 在不同的训练变体 (Soft EM 与 Hard EM) 中,性能保持稳定。

速度优势

这篇论文真正的亮点在于效率。复杂的神经架构通常需要大量的计算。通过将问题简化为序列标注 (线性复杂度) ,研究人员实现了巨大的速度提升。

Table 3: Speed comparison in terms of sentence per seconds.Numbers for Dai et al. (2O2O) are BERT-based models, as reproduced by Wang et al. (2021).

表 3 展示了每秒处理的句子数。

  • 以前的 SOTA (Wang et al., 2021): ~200 句子/秒。
  • 本工作: ~10,000 句子/秒。

这是 40 到 50 倍的速度提升 。 对于需要处理数百万份医疗文档的实际应用来说,这种差异是变革性的。它将一项需要几天的工作变成了一项只需几小时的工作。

局限性

没有一种方法是完美的。作者坦率地提供了“非连续性分析”。他们的标注方案假设了一种特定的结构 (组件集) 。在 CADEC 数据集中,有极少数语言案例 (约 26 例) ,其结构过于复杂,超出了他们标签的覆盖范围。

  • *例子: * “muscle and joint aches in arms and elbows” (手臂和肘部的肌肉和关节疼痛) 。这涉及到他们的 X/Y 类型系统无法完全捕获的三向拆分/组合。 然而,这些情况在统计上非常罕见,不足以显著损害整体 F1 分数。

结论与启示

研究论文 “A Fast and Sound Tagging Method for Discontinuous Named-Entity Recognition” 提供了一堂算法设计的大师课。作者没有向问题堆砌更多的神经网络层,而是退后一步,重新设计了数据的表示方式。

通过将非连续实体映射到严格的标注方案,并通过有限状态自动机强制执行逻辑,他们实现了工程学的“圣杯”: 合理性、准确性和速度。

主要收获:

  1. 表示法至关重要: 将复杂的实体分解为简单的组件,使我们能够使用更快的标准算法。
  2. 约束是有力的: 使用自动机 (WFSA) 确保模型永远不会预测“不可能”的序列,从而提高了可靠性。
  3. 线性速度: 从二次方图算法转向线性标注,使模型能够在大规模范围内使用。
  4. 即插即用替代: 也许最重要的是,解码算法和损失函数可以直接放入任何标准的 BIO 标注器中。这为在标准 NLP 流程中广泛采用非连续 NER 打开了大门。

对于学生和从业者来说,这项工作提醒我们,有时最好的前进方式不是更大的 GPU,而是更智能的算法。