关于指标
指标在 🤗 数据集中已弃用。要了解有关如何使用指标的更多信息,请查看库 🤗 Evaluate!除了指标外,您还可以找到更多用于评估模型和数据集的工具。
🤗 数据集提供了对各种 NLP 指标的访问权限。您可以通过单个命令加载与 GLUE 或 SQuAD 等基准数据集关联的指标以及 BLEURT 或 BERTScore 等复杂指标:load_metric()。加载指标后,可以轻松计算和评估模型的性能。
ELI5: load_metric
加载数据集和加载指标有很多相似之处。这是一个刻意设计的决定,因为我们希望创建一个简单统一的体验。当你调用 load_metric() 时,指标加载脚本将从 GitHub 下载并导入(如果之前尚未下载)。它包含有关指标的信息,例如引用、主页和描述。
指标加载脚本将实例化并返回一个 Metric 对象。它存储预测和参考,这是计算指标值所需的。 Metric 对象以 Apache Arrow 表的形式存储。因此,预测和参考直接存储在磁盘上并使用内存映射。这使得 🤗 Datasets 可以延迟计算指标,并使在分布式环境中更容易收集所有预测。
分布式评估
在分布式环境中计算指标可能很棘手。指标评估在不同的数据集子集上,在不同的 Python 进程或节点上执行。通常,当指标分数是累加的 (f(AuB) = f(A) + f(B)
) 时,你可以使用分布式归约操作来收集数据集每个子集的分数。但是,当指标是非累加的 (f(AuB) ≠ f(A) + f(B)
) 时,就没有那么简单了。例如,你不能将每个数据子集的 F1 分数之和作为你的最终指标。
克服此问题的一种常见方法是回退到单进程评估。指标在单个 GPU 上进行评估,这会变得效率低下。
🤗 Datasets 通过仅在第一个节点上计算最终指标来解决此问题。预测和参考分别为每个节点计算并提供给指标。这些临时存储在 Apache Arrow 表中,避免了占用 GPU 或 CPU 内存。当你准备 Metric.compute() 最终指标时,第一个节点可以访问存储在所有其他节点上的预测和参考。一旦它收集了所有预测和参考, Metric.compute() 将执行最终指标评估。
此解决方案允许 🤗 Datasets 执行分布式预测,这对于分布式环境中的评估速度非常重要。同时,你也可以使用复杂非累加指标,而不会浪费宝贵的 GPU 或 CPU 内存。
< > 在 GitHub 上更新