数据创建与数据管理

原文:Dataset Creation and Curation · Introduction to Data-Centric AI

为监督学习创建数据集需要样本以及样本的标签。课程专注于分类任务,但是把这些原理运用到其它监督学习的任务也是可以的。

数据收集

寻找训练数据时的关键问题:

1.训练出的机器学习模型如何应用?(什么时候使用,用在预测什么规模的数据上等)

2.这个模型会在什么关键场景上做预测?

考虑下图,一个训练好的图片分类器正确地预测出左边的图包含一头牛,然而模型却没有正确预测出右边的图片。为什么呢?

原因很可能是训练分类器的时候,用的图片中牛通常跟草地一起出现。所以,训练模型时我们要注意标签与特征之间不同类型的关联。高效的机器学习模型倾向于被表象迷惑,寻找捷径达到目标:它们会竭力利用任何关联从而在数据集上获得高的正确率,尽管这些关联是伪相关(spurious correlations)的,模型不能泛化应用到真实世界中。

选择的偏颇

伪相关的出现归因于选择的偏颇。这是指收集的训练集和模型讲应用到的测试集之间分布的改变,即训练集没能代表真实世界的设定。这种情况也叫分布改变。有一些潜在的原因会导致收集数据时存在选择的偏颇:

--时间/地点偏颇(比如训练集是在过去收集的,将来的数据可能会分布改变,或者从一个国家收集数据训练出的模型应用到全世界)

--人工统计特征偏颇(比如训练集没有囊括少数群体的数据)

--反馈偏颇(比如调查问卷的反馈率,问题有诱导偏颇或者多项选择题的答案)

--可用性偏颇,即收集某些数据是因为方便获得而不是最有代表性的(比如只调查身边朋友的情况)

--长尾偏颇,即某些应用有很多不同的罕见场景,但是收集机制忽略了一些场景(比如自动驾驶汽车走到了错误的道路上逆行)

收集数据时选择偏颇如何解决?

数据集中出现选择偏颇是很难通过建模发现的。其中一种评估模型是否在偏颇的数据上训练的方法是在应用模型的时候,把一个具有代表性的数据集拿出来作为验证集。

--如果数据是在一个时间变化的环境中收集,可以把最近的数据作为验证集。

--如果数据是在多个地点收集,而模型要在一个新的地点应用部署,可以把某些地点的所有数据作为验证集。

---如果数据包含重要而罕见的事件,那么在构建随机的验证集时可以对罕见事件过采样。

需要收集多少数据?

考虑一个应用,你需要训练一个正确率达95%的分类器。你需要收集多少数据呢?值不值得收集更多的数据呢?

一个简单的方法估计这个问题。假设我们已经有一个大小为n的训练数据集D_{train},以及一个固定大小的验证集D_{val}。首先决定一些子集的大小比如:

n_{1}=0.1\cdot n,n_{2}=0.2\cdot n,n_{3}=0.3\cdot n,...,n_{10}=1\cdot n

For j=1,...,10:

        Fori=1,2,...,T:

                  - 从原始数据集随机采样形成大小为n_j的数据集D_{ij}(不重复分层采样)

                  -在D_{ij}上训练出一个模型,在验证集D_{val}上得到正确率a_{ij}

以上过程会产生多对\{(n_j,a_{ij})\}数据的集合。(我想a_{ij}应该是T次的平均正确率?)

利用得到的多对数据的集合,我们可以预测一个模型在比原始数据集D_{train}更大n^{'}>>n的数据集上的正确率a^{'}。猜猜这个预测模型为什么不能用KNN或线形回归?

预测在大小为n^{'}的数据集上的正确率需要外插,也就是说我们需要以模型为中心(model-centric)。我们看一个经验的做法(参考Rosenfeld, J., Rosenfeld, A., and Belinkov, Y. A constructive prediction of the generalization error across scales. International Conference on Learning Representations, 2020.):

log(error)=-a\cdot log(n)+b,我们可以利用最小二乘法,使用数据集    \{(n_j,a_{ij})\}去估计a和b的值。然后就把n^{'}带入这个式子,得到在某个大小的数据集上模型的错误率。

数据创建与数据管理_第1张图片

对于小型数据集,没有预定义的验证集,你可以在训练用的子集上使用交叉验证的方法获得对a_{ij}比较稳定的估计。

多名打标签者给数据打标签

文章接下来讲利用众包的方式对数据打标签。

有些打标签者的准确率比别人低,有些打标签者直接抄别的打标签者的答案,而不管对不对。一个办法是在数据中放入一些“质量控制”的样本,这些样本的真正标签是已知的。

Y_{ij}表示第j个打标签者对第i个样本打的标签类别。

然而很多数据集都是没有“质量控制”样本的。给定一个数据集,我们需要估计三个数量:

1.每个样本的统一的标签(best label)

2.每个统一标签的质量评分(condidence)

3.每个打标签者的优劣评分(bad annotator)

三种算法可以估计以上三个数量:Majority Vote + Inter-Annotator Agreement, Dawid-Skene, and CROWDLAB.

数据创建与数据管理_第2张图片

Majority Vote + Inter-Annotator Agreement

一个简单的决定统一标签\hat{Y_{i}}的方法是看大多数对样本i打的标签是什么。对这个统一标签的评分可以用以下式子:

数据创建与数据管理_第3张图片

其中\jmath _{i}=\{j:Y_{ij}\neq \varnothing \},即对这个样本i打标签的人。

还可以用以下式子评估打标签的人的优劣:

数据创建与数据管理_第4张图片

其中\imath_{j} =\{i\in[n]:Y_{ij}\neq\varnothing\}即打标者j打标签的样本。而\imath_{j,+} =\{i\in\imath_{j}:|\jmath_{i}|> 1 \}即对于标注者j,至少有一个其他的标注者也打了同样的标签的样本。

这个方法存在的问题包括:1.多数投票的模棱两可。 2.好的标注者和坏的标注者对估计的影响一样。

Dawid-Skene 

另一种方法(Paun, S., et al. Comparing Bayesian Models of Annotation. Transactions of the Association for Computational Linguistics, 2018.)更好地解决以上问题。其中一个选择是Dawid-Skene算法,在这个算法中会为每一个标注者j建立一个矩阵C_{j}\in\mathbb{R}^{K\times K},矩阵中的项C^{a,b}_{j}指标注者j错误地把属于类a的样本标注为类b的概率。

CROWDLAB (Classifier Refinement Of croWDsourced LABels)

如果把每个样本的特征也考虑进去,一个方法是训练一个模型预测样本的标签。这个模型M可以用比如Major Vote 方法获得的统一标签的样本进行训练。

CROWDLAB 将分类器的概率预测与标注者相结合,以估计统一标签及其质量。CROWDLAB 估计基于这样的直觉:对于由少数标注者打标签的样本,我们应该更多地依赖分类器的预测,而对于由许多标注者打标签的样本,则应较少依赖分类器的预测(对于许多标注者的样本,简单的Major Vote已经提供了良好的置信度度量)。

你可能感兴趣的:(数据园地,人工智能,机器学习,深度学习)