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

时间: 2024-07-29 22:25:56

self-training and co-training的相关文章

[WeChall] Training: Encodings I (Training, Encoding)

Training: Encodings I (Training, Encoding) We intercepted this message from one challenger to another, maybe you can find out what they were talking about. To help you on your progress I coded a small java application, called JPK. Note: The message i

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 robots.txt file is used by web crawlers to check if they are allowed to crawl and index your website or only parts of it.Sometimes these files reveal th

Summer training round2 #6 (Training #26)

A:树遍历 DFS 贪心 先从最远的点开始判 如果某个点连有的算上自身的junction不小于二就ans++ return 0 连有的算上自身的junction为一 就return 1 #include <bits/stdc++.h> #include <cstring> #include <iostream> #include <algorithm> #define INF 0x3f3f3f3f #define MOD 1000000007 #define

Android官方开发文档Training系列课程中文版:手势处理之滚动动画及Scroller

原文地址:http://android.xsoftlab.net/training/gestures/scroll.html 在Android中,滑动经常由ScrollView类来实现.任何超出容器边界的布局都应该将自己内嵌在ScrollView中,以便提供可滚动的视图效果.自定义滚动只有在特定的场景下才会被用到.这节课将会描述这样一种场景:使用scroller显示一种可滚动的效果. 你可以使用Scroller或者OverScroller来收集一些滑动动画所需要的数据.这两个类很相似,但是Ove

2017 UESTC Training for Data Structures

2017 UESTC Training for Data Structures A    水,找区间极差,RMQ怼上去. #include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a;i<=b;i++) #define per(i,b,a) for (int i=b;i&

WeChall_Training: Programming 1 (Training, Coding)

When you visit this link you receive a message.Submit the same message back to http://www.wechall.net/challenge/training/programming1/index.php?answer=the_messageYour timelimit is 1.337 seconds 解题: 先在浏览器获取自己的cookie,再用python写了个自动提交的程序,header加上自己的cooki

Training的第二十天

今天接着做前天的活,就是实现把下载下来的jpg格式的图片设置为桌面的功能.要实现这个功能的关键点一个是要调用API(SystemParametersInfo)更换桌面:二是要把下载下来的JPG格式的图片转换成Bmp格式的图片才能够应用为桌面. 由于对API没什么概念,所以我从网上查了下资料并从网上copy了有关该API变成C#的代码和把jpg格式的图片转换成bmp格式图片的代码.接着看懂了里面的代码便自己修改了一下.接下来的是完善这个程序和把它加入到windows自动启动的任务中. 对于程序的完

2014 Multi-University Training Contest 6 Apple Tree(数学题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4925 Apple Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 176    Accepted Submission(s): 120 Problem Description I've bought an orchard an

hdu 4925 Apple Tree--2014 Multi-University Training Contest 6

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4925 Apple Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Total Submission(s): 188    Accepted Submission(s): 129 Problem Description I've bought an orchard an

xtu DP Training C.炮兵阵地

炮兵阵地 Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: 118564-bit integer IO format: %lld      Java class name: Main 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表