NLP --- 产生式模型VS判别式模型

版权声明:转载请注明出处: https://blog.csdn.net/weixin_42398658/article/details/84759799

上一节我们介绍了概率图模型,这将在隐马尔可夫和条件随机场使用到,还会使用到的另外一个概念就是产生式模型和判别式模型,那么什么是产生式模型,什么是判别式模型呢?下面我们详细介绍这两种模型的区别。

他们的来源还是机器学习,在机器学习中,我们知道是分类问题,器分类就是等价于输入\large X,求输出\large Y的概率即\large P(Y/X),由此可知分类问题其实就是一个求条件概率的问题,因此这里就牵扯到如何求解条件概率的问题,根据求解这个条件概率的不同方式进行分为生成式模型和判别式模型,下面我们分别看看生成式模型和判别式模型是如何求解这个条件概率的。

这里先简单的用书面语解释什么是生成式模型,什么是判别式模型,其实很简单的,生成式模型就是根据条件概率公式进行求解,如下:

                                  \large P(A/B) = \frac{P(AB)}{P(B)}                                                                        \large \left ( 0 \right )

即如果要求条件概率我就需要求AB的联合概率分布,而求出\large P(AB)后对其求边缘密度即可求出\large P(B),因此只要求出联合概率密度\large P(AB)就可以求出条件概率\large P(A/B)了,而判别式模型不是通过求解联合概率密度,而是通过其他方法直接估算出条件概率\large P(A/B)的模型称为判别式模型。其实他们的区别就是这样,很简单,这里大家感觉那个好用呢?其实没什么对比的,看场合使用,有时候我们很难求联合概率密度,因为一旦变量变大,计算量指数级增长,因此就出现了判别式模型,这里分别对其举一个例子,供大家理解,至于为什么要介绍这个知识点,稍后解释。

生成式模型:         

朴素贝叶斯

朴素贝叶斯是典型的生成式模型,这里不懂朴素贝叶斯的建议看我的这篇文章,下面使用朴素贝叶斯对垃圾邮件分类的例子进行说明生成式模型的求解过程。 

这里简要介绍一下,使用x代表邮件的文本,主要由多个特征组成,特征可能包含风险连接、敏感字句如“代考”,‘伟哥’等、还包括广告等等这样的特征,y是判断是否为垃圾邮件,如果是垃圾邮件用T表示,反之用F表示,邮件分类可表示如下:

                                                 \large P(y=T/x) = \frac{P(x,y=T)}{P(x)}                                           \large \left ( 1 \right )

                                                \large P(y=F/x) = \frac{P(x,y=F)}{P(x)}                                            \large \left ( 2 \right )

上面两式分别表示邮件为垃圾邮件和非垃圾邮件的概率,大家会不会疑惑分母\large P(x)是文本文件的概率,怎么求的呢?其实在这里不用求,把\large \left ( 1 \right )\large \left ( 2 \right )相除即可抵消,即:

                                               \large \frac{P(y=T/x)}{P(y=F/x)}=\frac{P(x,y=T)}{P(x,y=F)}                                            \large \left ( 3 \right )

这样就就巧妙的消去了难求的\large P(x),此时只要比较比值的大小就可以确定分类了,如果比值大于1就把邮件分为垃圾邮件反之为正常邮件,但是这里需要注意的是即使没有了\large P(x)\large \left ( 3 \right )式还是很难求,因为联合概率密度\large P(x,y=*)很难求(\large *不是没显示是代表T或者F的意思),他表示什么意思呢?在不同特征的垃圾或者非垃圾邮件的概率,这个很难求,如果一个文本有1000个特征计算量还是很大的,因此计算联合概率密度还是很困难的,那么通过什么解决呢?还是通过条件概率,按照下式把\large \left ( 3 \right )右端的分子分母展开如下:

                                             \large P(AB) = P(B/A)P(A)

将 \large \left ( 3 \right )式按照上式展开的到:

                           \large \frac{P(y=T/x)}{P(y=F/x)}=\frac{P(x/y=T)P(y=T)}{P(x/y=F)P(y=F)}                                                                       

                                                      \large = \frac{P(x_1/y=T)P(x_2/y=T)P(x_3/y=T)...P(x_n/y=T)P(y=T)}{P(x_1/y=F)P(x_2/y=F)P(x_3/y=F)...P(x_n/y=F)P(y=F)}

上式的展开是根据朴素贝叶斯展开的,不懂的请查看我上面的链接,这个转换就很容易了求了,首先\large P(x_i/y=*)表示是垃圾邮件或者不是垃圾邮件的情况下,出现某个特征的概率,而\large P(y=*)表示是垃圾邮件或者不是垃圾邮件的概率。这还是很容易求的。上面的根据朴素贝叶斯把特征展开后怎么计算呢?即如何求\large P(x_i/y=*)?很简单,如下:

                                              \large P(x_i/y=*) = \frac{P(x_i,y=*)}{P(y=*)}

这不是又绕回来了吗?这里大家需要看清楚\large \left ( 1 \right )\large \left ( 2 \right )是求所有特征的联合概率密度,这里是求一个特征的联合概率密度,这样还是很简单的,这里大家需要深入理解,别晕了。但是呢如果某个特征不存在那他的联合概率密度不就等于0了吗,相乘结果就是0啊,怎么办呢?这里采用拉普拉斯平滑化,这里引用吴恩达的论文里的公式,这篇论文是《On Discriminative VS.Generative
classifiers: Acomparison Of logistic regression and naive Bayes》如下:

 上面的符号和我们不同,原理都是一样的,这里的s是计数的意思就是通过出现这个特征的次数比上出现总特征的次数去逼近所求的条件概率,上式加\large l就是防止特征不存在时为0的情况,这里大家需要知道,好,到这里一般就可以分类了,这了我们是按照\large \left ( 3 \right )进行比较的,即是否大于1,但是在我们的分类中更习惯和0比较,因此就出了吴恩达下面的式子:

取log就变成和0比较了,很聪明的做法,好通过上面的推倒我们知道了,最后我们是通求联合概率密度\large P(x_i/y=*)求得最后的分类。因此这样的分类模型为生成式模型,下面我们看看判别式模型。

判别式模型 

上面说了判别式模型求条件概率,他不是按照联合概率密度进行求解而是通过概率统计求解或者其他的方法进行求解,这里使用logistics回归进行说明判别式模型是如何求解的。

logistics回归

logistics回归的原理这里不再细讲了,不懂的建议参考我的这篇文章,这里直接使用了:

我们上面的分类问题可以写成如下:

                                            \large P(y=T/x) = \frac{1}{1+e^{-(w_1x_1+w_2x_2+w_3x_3+...w_nx_n)}}

这里我利用最小二乘法或者利用最大释然法求出权值\large w_1,w_2,,,w_n,求出后就可以直接使用了,期间没有求联合概率密度,因此这样的求解方式为判别式模型。

总结             

上面就是产生式模型和判别式模型了,这里大家会不会有疑问,这两个哪个好呢?吴恩达的论文给出了详细的解释了,这里直接拿过来总结一下:

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

 这里就拿过来一部分,更多的请查看原始论文,上图实线是生成式模型,虚线为判别式模型。                                               

下面我们简单的介绍一下为什么要讲这些内容,以后会用到哪里?

我们后面讲的隐马尔可夫(HMM)其实就是序列化的朴素贝叶斯,什么是序列化呢?在我们语音识别和词性标注中,我们是一个一个识别的,我们可以通过朴素贝叶斯去判断该语音或者词属于什么符号或者说属于什么分类,而且是源源不断的进行判断,这就是序列化的朴素贝叶斯了,而朴素贝叶斯分类就是生成式模型的分类器,即HMMs是生成式分类器,所以计算量很复杂,因此为了改进一下,我们在条件上进行一些假设或者条件放宽,使他变成判别式模型即条件随机场,这样处理会更好一点,这就是他们的关系,大家可能会晕,不用担心等我们到了那一步后还会详细对比一下,这里给大家提一下,就是希望大家心里有点逻辑,这样学起来会更好即从总体把握他们的关系,好了,本节就到这里,下一节就是隐马尔可夫,这里需要强调的是,不懂什么是马尔科夫的建议先学学什么是马尔科夫过程,什么是马尔科夫链,可以参考我的这篇文章,好,本节结束,下一节隐马尔可夫HMMs。

猜你喜欢

转载自blog.csdn.net/weixin_42398658/article/details/84759799