美文网首页python学习互联网科技程序员
NLP系列学习:生成型模型和判别型模型

NLP系列学习:生成型模型和判别型模型

作者: 云时之间 | 来源:发表于2017-12-08 21:55 被阅读386次

    在学习机器学习的过程中我们总会遇见一些模型,而其中的一些模型其实可以归类于生成模型或者是判别模型中去,而这一篇文章我将会简单的概述下我最近所遇到的一些模型,并且按照自己的理解去记录下来,其中肯定会有差错,如果那里不对,还请各位多多指教.

    1:演变关系

    上边的图是

    这一篇论文中的一个截图,而第一张图其实讲的是几种模型的演进的一个过程,而这个过程如果加以简单的概括的话,可以归类于上边的一栏为产生型模型,下边的一栏为判别型模型,那这两种模型有什么区别,这两种模型又是什么?接下来我们分别来掰扯掰扯这两种模型.

    1:产生型模型

    定义: 由数据学习联合概率密度分布P(X,Y),然后求出条件概率分布P(Y|X)作为预测的模型,即生成模型:P(Y|X)= P(X,Y)/ P(X).

    那产生型模型的典型代表其实就是朴素贝叶斯.这一种的模型的主要思想是先估算联合概率密度p(x,y),再通过贝叶斯公式求出p(y|x).那现在我们就以之前文章中所说过的垃圾邮件分类的例子再来讲一下产生型模型的处理方法.

    现在我们假设要分类垃圾邮件和正常的邮件(分类处理邮件是文本分类和模式识别的一种典型应用),现在我们假设采用最简单的特征描述的方法,首先我们先去找一个词库,然后把词库中的单词都归类起来,然后把每一封邮件表示成一个向量,向量中的每一维都是词库中一个词的0-1值,1表示出现这个词语,0表示没有出现这个词语.

    比如一封邮件出现了”伟哥”,”理财”,”投资”,却没有出现”邀请”,”还款”,”金融”这样的词语,我们就可以把这个向量表示为:(mathtype没法输入中文,所以用拼音代替了)

    如果这个词库里的词语过多,我们的x的维度也会很大,这时候我们就应该要采取一些比如多项式分布模型的方法来去简化计算,这个我们就不多做讨论.

    回到上边的垃圾邮件问题中来,对于邮件,我们大致上可以将每一封邮件看作是相互独立的,这样每一次我们取一封邮件就可以看作是一次随机事件,那么我们的可能性就会有2的n次方种可能性,这样我们处理起来参数过多,那也就没有什么实用价值.

    那这时候我们如果用生成模型去做,就会有新的思路,我们要求的是p(y|x),那么按照条件概率公式可以的到,我们只需要求p(x|y),p(z),那么如果假设邮件x之间是相互独立的,这个就可以说符合贝叶斯假设,举个例子说:

    假设我们去判别一封邮件已经是垃圾邮件了(y=1),并且这个邮件出现”伟哥”和出现其他的词是无关的,那么就说”伟哥”和其他的词是相互独立的.

    那现在我们假设:

    给定条件z,使得X,Y条件独立,那形式化可以表示为:

    那如果词库中出现了5000个词语,我们全部把词语放进来,这时候我们再回到问题中,就可以根据上式列出公式来:

    而这一步的处理其实和我们之前的文章的n元语法模型是类似的,但是这里边说的是每个词语之间是相互独立的,而”伟哥”和”性”,一般来说是有很大的关系的,这样的词汇会经常出现在垃圾邮件中.

    那现在我们建立形式化的模型:

    这时候我们想要的是需要模型能够在训练数据上获得的概率值能够足够的精确,这时候我们使用极大似然估计:

    从上式中我们看见,我们要求的是联合概率密度,这样从侧面来佐证了朴素贝叶斯是生成模型.这时候我们带入求解:

    这样我们求出这个公式的意义是,前两个表示的是在y=1和0的样本中,特征x的比例,最后一个式子表示的是y=1的样本数占全部样本数的比例,这时候我们再去变化一下.

    就能够给去判别一封邮件是垃圾邮件还是有用的邮件,需不需要进行处理,当然这当中需要一些数学上面的技巧,这个是我们需要的关注的.

    而从上边的一堆公式最后推出这最后的一个模型,是不是有一种感觉是产生了一种模型的感觉,这其实就是产生型模型的由来.

    2:判别型模型

    定义:由数据直接学习决策函数Y=f(X)或者条件概率分布P(Y|X)作为预测的模型,即判别模型。基本思想是有限样本条件下建立判别函数,不考虑样本的产生模型,直接研究预测模型。

    还是上边的这个例子:

    如果我们要判别一封邮件是不是垃圾邮件,用判别型模型的方法就是从历史数据中学习到模型,然后我们再去从新的邮件中去提取一些新的特征,比如包含不包含”伟哥”,”投资”,这样的词语,然后根据之前的学习到的模型直接进行判别就行了,由于我们关注的是y的离散结果那个正确率高,而不是关心当中每一个部分的概率,这样的话式子就可以直接写成:

    而这里判别模型求得是条件概率,而生成模型求得是联合概率.

    3:判别模型和生成模型的区别:

    常见的判别模型有线性回归、对数回归、线性判别分析、支持向量机、boosting、条件随机场、神经网络等。

    常见的生产模型有隐马尔科夫模型、朴素贝叶斯模型、高斯混合模型、LDA、Restricted Boltzmann Machine等。

    特点:

    一般认为判别式模型更受喜爱,“人们应该更直接去解决问题,永进丌要把求解更复 杂的问题作为中间阶段”(Vapnik),吴恩达的论文作了较全面的分析,产生式模型 (朴素贝叶斯)在少量样本的情况下,可以取得更好的精确率,判别式模型(logistics 回归)在样本增加的情况下,逐渐逼近前者的精确率.

    而在吴恩达这一篇论文中详细概述了这件事情,推荐大家有时间好好阅读一番:

    相关文章

      网友评论

        本文标题:NLP系列学习:生成型模型和判别型模型

        本文链接:https://www.haomeiwen.com/subject/ajmyixtx.html