Flow Chart for Data Labeling
是否有足够数据?
提升标签,数据还是模型?
是否有足够的标签?=> 半监督学习
是否有足够的预算?=> 众包
是否使用弱标签?=> 弱监督学习
Semi-Supervised Learning (SSL)
- 关注有少量标注信息的样本和很大的没标注的数据一起利用起来
- 使用没标注的数据时需要做一些假设
- 连续假设:有相似特征的要本倾向于有相同标签
- 聚类假设:数据有内在的聚类结构,同一类有相同标签
- 流形假设:数据内在复杂性在较低维度,可以通过降维
Self-training
-
自学习是半监督学习里一个算法
- 在标注好的小数据上训练模型
- 使用没标注的数据在模型上预测,得到伪标签
- 合并伪标签和初始的标签(可以设置一定的置信度再合并,选择置信样本需要考虑)
- 继续训练预测
-
使用昂贵的模型
- 深度神经网络,模型ensemble/bagging
Label through Crowdsourcing
- ImgaeNet通过Amazon Mechanical Turk来标注了百万数据,花了几年几百万
Reduce #tasks: Active Learning
- 选出最有意思的为标注数据
- Uncertainty sampling:选出最不置信的样本,例如最高分类分数和随机(1/n)差不多
- 也可以和自学习一样用贵的模型
- Query-by-committee:训练多个模型投票
Active Learning + Self-training
- 标好的数据训练模型
- 未标注的数据在模型上预测
- 选出不置信的样本给标注工
- 合并样本继续训练直到标注完
Quality Control
- 标注没理解任务而犯错
- 最简单但最贵的办法:每个任务发给多个标注工,通过投票
Weak Supervision
-
半自动生成标签
- 比手工不准,但能训练
-
数据编程:用启发式方法生成标号
1
2
3
4
5def check_out(x):
return SPAM if "check_out" in x.lower() else ABSTRAIN
def sentiment(x):
return HAM if sentiment_polarity(x) > 0.9 else ABSTRAIN
Summary
- 获取的标签的方法:
- 自训练:不断迭代训练模型去标注未标注的数据
- 众包:钞能力
- 数据编程:启发式方法设顶有噪音的数据