Rubrix Metrics: What does your data say?
Yara

Rubrix 指标:您的数据说了什么?

2022年4月4日

Leire Rosado Plaza, David Fidalgo

使用模型时,最重要的步骤之一是 评估 它们。虽然使用精心挑选的示例可以为我们提供一些关于其性能的直觉,但这可能还不够。这时,指标 就发挥作用了。

如果我们在互联网上查找指标的定义,一个非常简单的定义是:“指标是告诉您关于所研究过程重要信息的数字”。因此,它们可以帮助我们评估模型的性能或深入了解我们的数据集。由于有很多概念需要处理(召回率、精确率、首字母大写...),而且它们本身并不容易理解,因此最好 付诸实践

此视频总结了 Rubrix 指标 的使用及其提供的一些功能

Rubrix 和指标:天作之合

借助其数据探索模式和记录的模型预测,使用 Rubrix 可以非常轻松地快速直观地了解您的数据和模型。如果您想更进一步,Rubrix 还提供指标,让您可以衡量对数据集的深入见解,并使您能够以更精细的方式评估 模型的性能

它们的主要目标是简化构建稳健的训练数据和模型的过程,超越单一数字指标。Rubrix 指标的灵感来自许多开创性工作,例如 Explainaboard

我们的实验

我们认为,为了使 指标 更容易被 Rubrix 用户接受,我们可以为他们提供 一个实际示例 ,分析一个带注释的数据集和一个或两个合适的模型。如果您想跟随此实验并重现我们的分析,您可以在 此 GitHub 仓库 中找到所有必要的步骤。

数据集

我们决定使用 2018 n2c2 挑战赛 第二赛道的数据集,该项目旨在探索临床 NLP 数据和任务(更多信息请点击 此处 )。第二赛道侧重于与 药物不良反应和药物 相关的医疗记录或报告,并以命名实体识别 (NER) 任务的形式呈现,实体如下:DOSAGE、DRUG、DURATION、FORM、FREQUENCY、ROUTE、STRENGTH、REASON、ADE。

点击 此处 阅读更多关于数据集和挑战赛的信息。由于它不是一个开源数据集,用户必须在 DBMI 数据门户 上创建一个帐户并请求访问权限才能使用它。

模型

我们选择了 Andrey KormilitzinMed7 模型,您可以在他的 Hugging Face 页面 上找到它。这个 基于 spaCy 的 模型部分地在上述数据集上进行了训练,旨在“稳健地用于各种下游”任务,“使用自由文本医疗记录”。因此,它仅关注数据集中存在的 9 个实体中的 7 个,忽略了 REASON 和 ADE。Andrey 发布了此模型的两个版本:transformer 版本和 large 版本。除非另有说明,否则我们将使用前者。

对于我们的实验,我们仅使用了 nc2c 数据集的 12 个文档,使用 spaCy 将文本拆分为句子,并将这些句子及其 注释模型预测 记录到 Rubrix 中。这产生了大约 ~1600 条记录。

import rubrix as rb# Check the GitHub repo to see how we created the 'records'rb.log(records, name="med7_trf")

那么,指标呢?

首先,我们将分析直接与数据集相关的指标,然后我们将看到与模型相关的指标。

数据集指标

词符首字母大写

首先,我们将分析 词符首字母大写 。这是数据集中每个词符的首字母大写信息。

from rubrix.metrics.token_classification import token_capitalnesstoken_capitalness(name="med7_trf").visualize()

Token Capitalness

最常见的结果是 LOWER (词符中的所有字符均为小写),其次是 FIRST (词符中的第一个字符为大写字母)和 UPPER (所有字符均为大写),最后是 MIDDLE (第一个字符为小写,且至少有一个其他字符为大写)。FIRST 和 UPPER 的相对突出在医疗记录中很典型。它们包含大量章节、标题、短语、专业术语和缩写,例如 IV、OP、TID 或 QHS 等。

词符频率

此指标计算每个词符的频率。在这里,结果既令人好奇又合乎逻辑

from rubrix.metrics.token_classification import token_frequencytoken_frequency(name="med7_trf").visualize()

Token Frequency

对于此数据集,到目前为止最频繁的词符是 星号符号 ,其次是 换行符 。在更详细地检查数据集后,我们注意到星号部分用于匿名化敏感数据(这是医疗记录中非常常见的做法)。此外,段落之间用许多换行符分隔 - 因此得到这样的结果。

词符长度

此指标根据每个词符的 字符 数来衡量词符长度分布。了解以上结果后,最常见的长度是 1 也就不足为奇了。考虑到医疗记录中使用的缩写数量,我们也预计短词符在分布中会异常突出。

from rubrix.metrics.token_classification import token_lengthtoken_length(name="med7_trf").visualize()

Token Length

模型指标

现在我们已经看到了严格与数据集相关的指标,让我们看一下指标,但这次我们将考虑模型的 预测

实体一致性

此指标用于量化特定提及以特定标签预测的一致性程度。

from rubrix.metrics.token_classification import entity_consistencyentity_consistency(name="med7_trf").visualize()

Entity Consistency

在我们的例子中,只有提及 Injection 被预测为两个不同的标签:3 次标签为 ROUTE ,3 次标签为 FORM 。这是合理的,因为 Injection 可以指药物的应用方式 (FORM),也可以指其给药途径 (ROUTE)。

实体标签

这是我们数据集中预测实体标签的分布。DRUG 无疑是最常见的预测,而 DURATION 的提及似乎不太频繁。

from rubrix.metrics.token_classification import entity_labelsentity_labels(name="med7_trf").visualize()

Entity Labels

实体首字母大写

此指标显示预测实体提及的首字母大写信息,类似于 词符首字母大写 指标。由于我们已经看到 DRUG 是预测最多的标签,并且大多数 DRUG 提及是药物名称(Vancomycin、Oxycodone、Dilatin...),因此 FIRST 是预测实体最常见的首字母大写形式是有道理的。

from rubrix.metrics.token_classification import entity_capitalnessentity_capitalness(name="med7_trf").visualize()

Entity Capitalness

提及长度

虽然 词符长度 计算以字符数衡量的词符长度,但 提及长度 计算以词符数衡量的实体提及长度。同样,由于大多数预测实体是通常用一个词命名的药物,我们预计提及长度 1 将占主导地位。

from rubrix.metrics.token_classification import mention_lengthmention_length(name="med7_trf").visualize()

Mention Length

模型性能

现在,让我们看看如何衡量模型的性能,并以更精细的方式将其与另一个模型进行比较。

平均 F1 值

衡量多类 NER 模型性能的常用方法是使用其 平均 F1 值 。让我们使用此指标来比较我们模型的两个版本(transformer 与 large)。

from rubrix.metrics.token_classification import f1f1(name="med7_trf").visualize()f1(name="med7_lg").visualize()

F1-score transformer

F1-score large

看起来 transformer 模型在各个方面都优于 large 模型。在微平均和宏平均方面,它都具有更好的召回率和精确率。

每个标签的 F1 值

然而,如果我们仔细查看每个标签的 F1 值,我们会发现 large 模型ROUTEFREQUENCY 实体方面实际上表现略好。因此,如果您主要对检测医疗文档中的途径或频率感兴趣,那么 large 模型将是更好的选择。

此外,值得注意的是,在 DURATION 实体方面,两个模型的性能之间存在近 0.2 个点的巨大差异。

模型 \ 标签DRUGFORMROUTEFREQUENCYDOSAGESTRENGTHDURATION
TRANSFORMERS0.950.940.930.750.910.960.86
LARGE0.920.930.960.770.850.940.67

检测数据偏移

Rubrix 指标还可以帮助您找到 数据偏移 。根据 Georgio Sarantitis (2020) 的说法,“当数据分布发生变化时,就会发生数据偏移”。

让我们通过简单地 将约 25% 的医疗记录转换为小写 来模拟数据偏移。对模型性能的影响是最小的,但仍然可以注意到(宏平均和微平均 f1 值中的点数小于 0.01)。但是,查看 实体首字母大写 分布,如果您将其与 上面 的原始分布进行比较,偏移变得非常明显。

Entity capitalness after datashift

这将帮助您及早检测到数据偏移并相应地调整模型,从而在 性能下降 变得显著之前采取措施。

总结

如您所见, Rubrix 指标 是一个很好的工具,可以更深入地了解您的 数据分布模型性能 。我们能够快速可视化数据集的各种可测量量,并快速更详细地比较两个模型的性能。借助 Rubrix 指标,数据偏移也很容易检测到,从而帮助您在监控模型时保持领先地位。

但它不仅仅如此:此工具不仅有助于评估模型和分析数据,还可以提供关于特定数据集的 语言信息 ,或显示其他特征。在这种情况下, 临床 NLP 数据集 可能非常适合,因为它们包含特殊的特征和语言,这些特征和语言始终很有趣,例如 技术词汇缩写 或与其词符相关的特殊性(例如,它们的词符长度)。

如果您是 Rubrix 的新手,请查看我们的 GitHub 仓库 并给它一个 ⭐ 以保持更新。有关 Rubrix 指标的更多信息,请查看我们的 摘要指南指标模块 的 API 参考。