self-training and co-training
半指导学习(Semi-supervised Learning)的概念说起来一点儿也不复杂,即从同时含有标注数据和未标注数据的训练集中学习模型。半指导学习是介于有指导学习与无指导学习之间的一种机器学习方式。
在NLP领域的很多任务中,标注数据其实是很难获取的。尤其像句法、语义等训练资源在标注时往往需要比较深厚的专家知识(如语言学知识)作为指导,从而导致标注成本太高。尽管现在大家都在提倡标注简单化、大众化甚至娱乐化,但是对于这种知易行难的问题,要找到一种能利用群体智慧的标注方式又是何其难也。近年来比较热的“众包”技术也没能够有效地解决这种“专家级”标注问题。从这个角度来看,半指导学习是非常有意义而且值得研究的。上半年UIUC的高晶学姐回学校做了一次关于融合有指导学习与无指导学习的报告,我个人觉得很受启发。
由于半指导学习本身理解起来并不难,因此概念以及定义之类的这里就不赘述了。下面主要总结一下本次活动中所讨论的半指导学习方法(模型)。
Self-Training Models
自学习模型的基本假设是,分类器对样本进行预测时,置信度高的样本被正确分类的可能性大。比如SVM对某个样本进行分类时,离分类界面距离较远的那些样本可以认为被正确分类。那么基于这个假设,自学习模型就显得异常简单了。假设我有两堆数据A和B,其中A是已标注的数据,即带Label的;而B是未标注数据。Self-Training的做法如下:
- 从已标注数据A中训练一个分类模型M
- 用该模型对B进行预测
- 将预测结果中置信度高的K个样本,连同它们的Label加入训练数据A,并从B中删除
- 回到第1步。
当然,第3步可以有很多实现方法,比如可以将B中所有样本加入A,根据预测时置信度的不同给样本赋予不同的权重。
自学习模型是最简单也最易实现的半指导模型,但是简单的东西往往不怎么好用,这世上既简单又好用的东西实在不多。自学习的缺点在于,如果一个错误分类的样本被加入了原来的训练集,那么在其后的训练过程中,它所犯的错误只会越来越深,还会诱使其他样本犯错,这种outlier实在罪不容恕。而自学习模型对此表示无能为力。
Generative Models
判别模型与生成模型如何区分依然是大家争论的一个重点。推荐大家看看2009年NIPS的一个workshop:http://gen-disc2009.wikidot.com/。判别模型与生成模型的融合是我一直想做的一个课题,尽管已经在Parse Reranking上做过一些实验,但是总是觉得不深入,对两者的理解仍然不够深。
生成模型在半指导学习中的应用比较简单,我们经常遇到的高斯混合模型(GMM)就是一种典型的生成模型(当然,还有其他的混合密度分布,如混合多项式分布)。GMM总是和EM算法紧紧地捆绑在一起的。我们知道,如果在GMM中,每个样本属于哪个类别(高斯分布)是已知的话,那么很容易通过MLE对其进行参数估计。如果所有的样本都不知道类别,那么我们一般使用EM算法迭代地估计其参数。前者是有指导学习,后者是无指导学习。于是很容易想到第三种情况,即部分样本的类别已知,而剩余的样本类别未知。这时,只需要将似然函数的形式稍作改变即可用EM算法求之。
Cluster-then-Label
从前面的EM算法在半指导学习中的运用,可以很自然地想到,无指导方法一般都可以用于半指导学习。K-Means是EM算法的一种简单形式,那么能否将聚类用于半指导学习呢?
Cluster-then-Label,顾名思义:先聚类,再分类。其算法如下:
- 对所有样本(包括已标注数据A和未标注数据B)进行聚类
- 对于聚类结果中的每个簇,执行第3、4步。令S为该簇中已标注的样本
- 如果S非空,那么在S上学习一个分类器,并对该簇中未标注的样本进行预测
- 如果S为空,那么根据所有已标注的数据来预测该簇中未标注的样本
这样,我们就得到的所有样本的类别。想法非常简单,但是究竟效果好不好还有待实验进行验证。
Co-Training
第一次接触Co-Training这个词是在大三的时候,那时对机器学习几乎没有什么概念,脑海里只充满了对人工智能各种各样的幻想。那时对Co-Training的理解是:有两个Robots,能够相互Teaching,相互Learning。听起来很高深的样子,呵呵。后来证明真实的Co-Training也与之差相仿佛了。
Co-Training又叫协同训练或协同学习,是一种MultiView算法。Multiview是指认识事物的多个角度。比如对于“月亮”,我们会在脑海里浮现出一轮飞镜似的明月,或圆或缺,或明或暗,我们甚至还会联想到古代词人吟风弄月的很多佳句。当然也有人会立刻联想到月亮的各种特征,比如它是地球的卫星,它的表面有环形山,它绕地运行……等等一系列特征。这便是看待同一件事物的两个角度。那么从不同的角度看待训练数据,我们能够得到不同的特征空间。而在不同的特征空间中,我们又能够得到不同的分类模型。这就是Co-Training的基本思想。
协同训练的过程如下:假设数据有两种特征表达,比如图像特征(X-1, Y-1)和文本特征(X-2, Y-2)。对于未标注数据同样有两种View。算法如下:
- 从(X-1, Y-1),(X-2, Y-2)分别训练得到两个个分类模型F-1,F-2
- 分别使用F-1与F-2对未标注数据进行预测
- 将F-1所预测的前K个置信度最高的样本加入F-2的训练数据集
- 将F-2所预测的前K个置信度最高的样本加入F-1的训练数据集
- 回到第1步
基本的Co-Training算法还是很简单的。如何将其应用到NLP的Task里又有很多研究点。我觉得从Co-Training的思想出发可以稍微帮助理解一下人工智能。一直以为人工智能一定是群体作用的结果,一个封闭的自学习系统是很难激发出智能的,除非本身拥有一个非常强大的知识集和归纳、演绎系统。一个智能体,在幼儿时主要依靠专家指导(我们的父母亲人)来强化自身的学习系统(人脑神经网络),在学习系统成长的过程中,我们也在不断地和我们的同伴相互对比,相互学习。在这不断地碰撞和启发中,我们才渐渐地拥有了知识和对事物准确的判断力。人的这种获取智能的方式应该是值得机器学习方法所借鉴的。或许有一天,我们真的能够模拟人脑的思维,而不再仅仅是模拟人类的行为。
Semi-supervised learning methods widely used include:
1.EM with generative mixture models
2.self-training
3.co-training
4.transductive support vector machines
5.graph-based methods
self-training:
A classifier is first traind with the small amount of labeled data. The classifier is then used to classify the unlabeled data. Typically the most confident unlabeled data points, together with their predicted labels, are added to the training set. The classifier is re-trained and the procedure repeated.
When the existing supervised classifier is complicated and hard to modify, self-training is a practical wrapper method. Applied to several natural language processing tasks, word sense disambiguation, parsing, machine translation and object detection system from images.
co-training
Co-training assumes that features can be split into two sets. Each sub-features is sufficient to train a good classifier. The two sets are conditionally independent given the class. Initially two seperate classifiers are trained with the labeled data, on the two sub-features sets respectively. Each classifier then classifies the unlabeled data, and ‘teaches’ the other classifier with the few unlabeled examples(and the predicted labels) they feel most confident.
Each classifier is retrained with the additional training examples given by the other classifer, and the process repeats.
When the features naturally split into two sets, co-training may be appropriate.
references:
http://www.jiangfeng.me/blog/tag/self-training
http://blog.csdn.net/bookwormno1/article/details/7024929
原文:http://www.leexiang.com/self-training-and-co-training
self-training and co-training的更多相关文章
- [WeChall] Training: Encodings I (Training, Encoding)
Training: Encodings I (Training, Encoding) We intercepted this message from one challenger to anothe ...
- WeChall_Prime Factory (Training, Math)Training: WWW-Robots (HTTP, Training)
In this little training challenge, you are going to learn about the Robots_exclusion_standard.The ro ...
- Summer training round2 #10(Training 30)
A:签到题 B!:搜索+DP #include<bits/stdc++.h> #define mp make_pair #define pi pair<int,int> usi ...
- Summer training round2 #7 (Training #23)
A:约瑟夫环 套公式 B:线性筛素数 C:投骰子 概率DP F:有权无向图的生成树(边最大值和最小值只差最小) 直接kruskal G:状压BFS或者双向BFS H:模拟题 I:几何题 J:高斯消元
- Summer training round2 #6 (Training #22)
A:二分答案 如果中位数比目前的大就right=mid-1 else left=mid+1 C!:几何 G:优先队列贪心 #include <bits/stdc++.h> using na ...
- Summer training round2 #5 (Training #21)
A:正着DFS一次处理出每个节点有多少个优先级比他低的(包括自己)作为值v[i] 求A B 再反着DFS求优先级比自己高的求C #include <bits/stdc++.h> #incl ...
- Summer training round2 #4 (Training #20)
A!:UESTC1752 B!:找区间内L到R之间内的数的个数 权值分块加莫队 C!:给你一个哈斯图 去掉其中的几条边 要求输出字典序最大的拓扑排序:线段树模拟拓扑排序 D!:要求你找到最短路树并输 ...
- WeChall_ Training: Stegano I (Training, Stegano)
This is the most basic image stegano I can think of. 解题: 一张小图片,文本方式打开.
- Method for training dynamic random access memory (DRAM) controller timing delays
Timing delays in a double data rate (DDR) dynamic random access memory (DRAM) controller (114, 116) ...
- hdu 4946 2014 Multi-University Training Contest 8
Area of Mushroom Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
随机推荐
- 第五章 动画 50 动画-transition-group中appear和tag属性的作用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- gson转换问题
list集合中integer问题 List<Integer> lists= gson.fromJson(params.get("lists"), new TypeTok ...
- Linux双网口配置时重复配置DEFROUTE和GATEWAY
配置一台机器时,沿袭了原有网口配置,修改网口名,把em1全部修改改为eth0 mv ifcfg-em1 ifcfg-eth0 mv ifcfg-em2 ifcfg-eth1 改完以后,机器变得不稳定, ...
- BZOJ1050 [HAOI2006]旅行comf[并查集判图连通性]
★ Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求 一条路径,使得路径 ...
- 【CF765E】Tree Folding
题目大意:给定一棵 N 个节点的无根树,边权都是 1,可以把树上父亲相同的两条长度相同的链合并,问最后是否可以合并成一条链,如果可以,输出链的最小长度,否则输出 -1. 题解: 由于我们不知道最后的 ...
- idea 使用Tomcat 部署war 和 war exploded的区别
war模式:将WEB工程一包的形式上传到服务器中. war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器. 解析: war 模式这种可以称为是发布模式(完整的项目),将项目打成 ...
- 使用ajax时给ajax绑定上一个进度条的简单示例
直接放代码. <%@ page contentType="text/html;charset=UTF-8" language="java" %> & ...
- linux的逻辑运算符
1:expression :用于计算括号中的组合表达式,如果整个表达式的计算按结果为真,则测试结果也为真. 2:!exp:客队表达式进行逻辑非运算,即对测试结果求反 3:符合 -a 或者 && ...
- 使用es6新增Set函数快速数组去重
使用new Set()快速数组去重: let arr = [1, 2, 2, 3, 4, 5, 5, 5, 6] let set = new Set([...arr]) console.log([.. ...
- Visual Studio下__cplusplus宏为199711L的问题
Visual Studio下__cplusplus宏为199711L的问题 / Zc:__ cplusplus(启用更新的__cplusplus宏) 该/ ZC:__ CPLUSPLUS编译器选项使_ ...