首页 > 代码库 > self-training and co-training

self-training and co-training

半指导学习(Semi-supervised Learning)的概念说起来一点儿也不复杂,即从同时含有标注数据和未标注数据的训练集中学习模型。半指导学习是介于有指导学习与无指导学习之间的一种机器学习方式。

在NLP领域的很多任务中,标注数据其实是很难获取的。尤其像句法、语义等训练资源在标注时往往需要比较深厚的专家知识(如语言学知识)作为指导,从而导致标注成本太高。尽管现在大家都在提倡标注简单化、大众化甚至娱乐化,但是对于这种知易行难的问题,要找到一种能利用群体智慧的标注方式又是何其难也。近年来比较热的“众包”技术也没能够有效地解决这种“专家级”标注问题。从这个角度来看,半指导学习是非常有意义而且值得研究的。上半年UIUC的高晶学姐回学校做了一次关于融合有指导学习与无指导学习的报告,我个人觉得很受启发。

由于半指导学习本身理解起来并不难,因此概念以及定义之类的这里就不赘述了。下面主要总结一下本次活动中所讨论的半指导学习方法(模型)。

Self-Training Models

自学习模型的基本假设是,分类器对样本进行预测时,置信度高的样本被正确分类的可能性大。比如SVM对某个样本进行分类时,离分类界面距离较远的那些样本可以认为被正确分类。那么基于这个假设,自学习模型就显得异常简单了。假设我有两堆数据A和B,其中A是已标注的数据,即带Label的;而B是未标注数据。Self-Training的做法如下:

  1. 从已标注数据A中训练一个分类模型M
  2. 用该模型对B进行预测
  3. 将预测结果中置信度高的K个样本,连同它们的Label加入训练数据A,并从B中删除
  4. 回到第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,顾名思义:先聚类,再分类。其算法如下:

  1. 对所有样本(包括已标注数据A和未标注数据B)进行聚类
  2. 对于聚类结果中的每个簇,执行第3、4步。令S为该簇中已标注的样本
  3. 如果S非空,那么在S上学习一个分类器,并对该簇中未标注的样本进行预测
  4. 如果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。算法如下:

  1. 从(X-1, Y-1),(X-2, Y-2)分别训练得到两个个分类模型F-1,F-2
  2. 分别使用F-1与F-2对未标注数据进行预测
  3. 将F-1所预测的前K个置信度最高的样本加入F-2的训练数据集
  4. 将F-2所预测的前K个置信度最高的样本加入F-1的训练数据集
  5. 回到第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