查看原文
其他

心法利器[72] | 有无监督的特性和选型

机智的叉烧 CS的陋室 2024-04-24

心法利器


本栏目主要和大家一起讨论近期自己学习的心得和体会,与大家一起成长。具体介绍:仓颉专项:飞机大炮我都会,利器心法我还有

2022年新一版的文章合集已经发布,累计已经60w字了,获取方式看这里:CS的陋室60w字原创算法经验分享-2022版


往期回顾

早在机器学习启蒙的近10年前,其实就已经划分出了有监督学习和无监督学习的话题,我们都知道,有无监督区分的根本原因,其实就是在训练阶段是否有一个可供判别的标签,如果有,则是有监督,否则是无监督。

此外,最近在一些实验过程中,仍旧发现了很多他们比较深层次的特性,想和大家分享一下,希望大家能有所收获。

懒人目录:

  • 有监督的特异性。
  • 无监督的泛用性。
  • 无监督的不可控性。
  • 有无监督特性的原因。
  • 有无监督的选型思路。

当然了,这个讨论可能会有些零散,可以看做是启发和讨论吧。

有监督的特异性

所谓的有监督的特异性,我想说的是,有监督能把模型往特定领域的识别能力更进一步,即更加能够适配场景。

举个例子,预训练模型本身对于特定任务而言,其实就是无监督,一旦用了有监督学习来做finetuning,例如自己拿了一批语义相似度数据进行训练,会让这个模型朝着这批数据对应的场景适配,从这个视角看,其实是把预训练模型拿来更好地识别我所需要的场景了,甚至一些原来预训练模型不懂的东西,我也可以通过这个有监督学习来让模型学会,甚至例如一些在别的领域看来完全不像的两个东西把他看做是同义词,如“沙漠死神”和“狗头”。

然而,一定程度上说比较极端的,有监督学习会让模型减弱甚至丢失一些泛用性,尤其是对预训练模型这种比较大,信息储备比较多的模型而言。在我最近的实验中发现,一些可能在开放域效果不错的模型,一旦经过特定领域数据的训练之后,开放域的效果其实是会一定程度下降的,这点符合我们的一般的预判认知,但这需要我们有所警觉,就是训练不见得是让知识逐渐增加的,模型是会遗忘的,从特异性这个视角,就是模型会忘记一些原本认为比较开放域的一些知识和信息。

有关遗忘这个问题,之前在轻量化微调这里有聊过,大家可以看看这篇文章:前沿重器[27] | 从遗忘问题到预训练轻量化微调

无监督的泛用性

而与之相对的,无监督其实更倾向于更广泛意义的泛用,例如在语义相似度领域,句子表征领域,无监督意味着更加开放域、泛用性的一些相似度对比。

simcse、esimcse等的一些对比学习在去年就已经崛起,成为新一代比较有代表性的句子表征方案,特别地针对无监督方案,所谓的相似度的训练很大程度就依赖drop等的一些不确定的方式来对原本的句子表征产生细微扰动,来完成这些学习。这种方式的训练,确实是很大程度强化了开放域的语义相似度效果,在语义空间上,其实就是把相似的拉近,而不相似的就会拉开,这也就体现了开放域上的效果。

然而,换言之,如果是对细分领域,如果仍旧使用类似的无监督方案,其实对这个领域下的效果提升比较有限,仍旧举例,“沙漠死神”和“狗头”(虽然有些极端了),类似这样的业务场景定义的相似,模型无从学起,即使是我们增加了场景的数据来做有监督,这种问题无监督仍旧是无解的,也就依然没有任何意义。

无监督的不可控性

不可控性这块,其实很多人多少都会有些了解,但是我还是多少想展开下。

我先来说两个例子,我相信很多人在做文本聚类的时候,会考虑用句子表征来做,简单的例如word2vector的均值,复杂的可能是拿bert的cls,但是出来的效果并不好,观察发现,其实聚类的大都是字面比较相似的会聚成一类,但是一些稍微差的比较远的,可能就拉不到一块了。第二个例子,是一个别的场景,用k-means之类的聚类,聚类之后,发现聚类的结果和自己预期的不符合,可能朝着别的方向给聚去了。

这里其实就体现了聚类的不可控性。我们无法很好地把控模型是如何把某些样本聚在一起的,此时就体现了我们所说的不可控性。

至于怎么解,我在后面说。

有无监督特性的原因

上面我讲了几个有无监督的特性,下面我就来聊聊出现这种特性的原因。

有监督相比于无监督,最直接的差异就是这个标签,而这个标签,其实在训练的过程中是起到至关重要的作用的,因为这个标签明确鲜明地告诉模型“什么样是对的”,而通过这个“什么样是对的”就能知道模型,让模型知道他该怎么去预测,这是有监督最直接的优势。有监督之所以能解决特异化场景的问题,很直接的,就是因为这个标签,能很直接地告诉模型这点,而无监督是没有的。

标签虽然能明确地给模型传递正确的信息,但这也会有一些问题,就是我们很难很全地告诉模型正确的信息,这也是特异性所存在的原因,如果不对原有的知识做保持,很可能在训练过程就会遗忘。

而无监督,因为没有这种明确信息,尽管像simcse有一些类似的方式,但训练阶段终究只是相对谨慎的在句子周围进行简单拓展,是带不来这种比较强的领域信息的,这也是无监督目前还超不过有监督的理由吧。

有无监督的选型

因此,在进行有无监督的选型的时候,我们就需要从两者的特性出发来进行分析。

这里首先要点的一个误区,就是,如果现在没数据,尤其是无标签数据,那就只能选择无监督来做,这是有问题的。如果对于场景特异型比较强的情况,那其实还是希望能找到有标签的数据来训练一下,可能都会比较好一些,无监督一方面是不可控,另一方面学不到场景内的一些定义信息,如果花一些精力就能拿到有监督数据,其实就更希望大家优先考虑有监督的方案。

继续说选型,如果你的场景是比较限定在某个领域里的,或者是业务定义比较强的任务,例如搜索的意图识别之类的,那更推荐有监督的学习,之前有一篇文章也有聊过:心法利器[45] | 模型需要的信息提供够了吗,如果给不到模型足够的信息,模型自然很难学得好,有监督是最方便为模型提供信息的方式了。

然而,如果标签数据真的很难拿到,甚至是包括数据增强之类的方案也搞不定,那其实可以降级,用半监督或者无监督来辅助,或者对预训练模型,则可以考虑先用further pretrain的方式来进行进一步学习,然后用少量数据进行finetuning,这样不至于完全丢失有监督的信息,可以进行补全。

如果实在没办法,要用无监督了,那也需要思考一下,我们的最终目标是什么,有什么信息能支持无监督模型朝着自己希望的方向走,例如提取一些对预期方向有用的特征,之前的一次经验是,希望做一个聚类模型,能把不同的序列预测为“涨”、“跌”、“平”,后来选择的方案是用斜率加“t值”来做,效果就很好了。在用无监督模型进行预测时,不能想着把各种信息扔进去就完事了,而是要加以筛选和调整,这样无监督模型就能起到很好的效果了。

小结

文章的思路来源,一方面是自己的实验,另一方面我是看了不少人在对无监督模型有些错误的预期,所以想着讨论一下,让大家能够比较辩证客观的理解这两者吧,希望大家能有所收获。

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存