在企业智能产品研发中,在创建特定业务场景的训练数据来对模型进行训练时,数据集样本的多样性对模型的能力和泛化性具有较强的影响。但如何量化一个数据集中的样本多样性呢?

本文将介绍如何使用Vendi Score来量化数据集的多样性,在具体的产品研发实践中,该指标可较好地实现数据集样本多样性的量化。

Vendi Score简介

Vendi Score 是由 Dan Friedman 等人在 2023 年提出的一种专门用于评估机器学习数据集多样性的定量指标。

该指标的取值介于 1 和 N(数据集总样本数)之间,值越大,说明数据集中样本的多样性越高,反之越小。其值大致等于数据集中“有效独立样本”的数量。

我们用一个 “水果筐”来解释:

  • 假设你有一个装了 100 个水果的筐。
  • 如果里面全是苹果,虽然数量是 100,但水果类型只有 1种。此时 Vendi Score ≈ 1。
  • 如果里面有 50 个苹果和 50 个香蕉,水果类型是2。此时 Vendi Score ≈ 2。
  • 如果里面有 100 个各不相同的水果(苹果、香蕉、橘子、葡萄、榴莲…),没有重复。此时 Vendi Score = 100。

Vendi Score计算

给定一个数据集,它包含了N个样本,Vendi Score的计算步骤如下:

步骤1:样本向量化

选择一个合适的 Embedding 模型,将数据集中的N个样本转化为高维向量。

假设向量维度的d, 则可以获取到一个N*d的二维矩阵。

步骤2:构建相似度矩阵

基于步骤1获取的N*d矩阵,分别计算样本之间的相似矩阵。例如可计算样本之间的余弦相似度来衡量样本之间的相似性。

最终可获取到一个N*N的相似度矩阵。

步骤3:特征值分解

对步骤2的相似度矩阵进行特征值分解,得到一组特征值 λ1,λ2,…,λN。

核心原理:相似度矩阵的特征值代表了数据在不同“主成分”上的区分度或信息量。如果数据样本间存在强相关性或高度同质(矩阵呈现低秩特性),能量就会集中在少数几个(甚至一个)特征值上;如果样本间差异显著且相互独立(矩阵接近单位阵或随机矩阵),能量就会均匀分散在所有特征值上。

步骤4:特征值归一化

对于第三步获取到的特征值,通过λi/N来对每个特征值进行归一化获得pi。

注意:在步骤2中获取的相似度矩阵中,由于主对角线元素每个元素值为1,则主对角线元素之和为N,因此在步骤3获取的特征值之和也为N.

步骤5:计算Vendi Score

使用如下公式来获取最终的Vendi Score的值。

到此时我们可以获取到一个数据集中样本多样性的定量指标。

如果分数越高,则这个数据集的多样性高,否则低。

Vendi Score使用注意事项

在生产中使用该指标需注意:

  1. Vendi Score的分值和数据样本的规模有关。例如一个样本1000的数据集和样本10000的数据集,不能直接比较两者之间的多样性大小。
  2. Vendi Score在计算时涉及到两个N*d矩阵的乘法,同时涉及到特征值的计算,可能需要较大的内存和时间,尤其是对于大样本的数据集来说更是如此。