今天的博客主要参考了戴文渊的2007年在AAAI上发表的论文《Transferring Naive Bayes Classifiers for Text Classification》。这篇paper遇到的任务场景是:source文本数据和task文本数据分布属于分布DuDu和DlDl(同时这里的DlDl和DuDu并不满足独立同分布),而source文本是有标注的,task文本是没有标注的,任务是利用朴素贝叶斯算法,把在DlDl上学到的规律运用到DuDu上去。
下面首先来简要地介绍一下朴素贝叶斯分类算法,假设符号dd代表了document,代表了class label,ww代表了word,那么文本分类的目标就是:
一种对P(w|c)P(w|c)最好的估计方式是:P(w|c)=1+n(w,c)|W|+n(c)P(w|c)=1+n(w,c)|W|+n(c)
其中n(w,c)n(w,c)代表了ww词在类别为的语料中出现的次数,n(c)n(c)代表了类别为cc语料中出现的词数总和。
根据最大后验估计原理,整个模型在和DlDl上的损失函数如下,h是模型参数:
l(h|Dl,Du)=>logPDu(h)+∑d∈Dllog∑c∈CPDu(d|c,h).PDu(c|h)+λ∑d∈Dulog∑c∈CPDu(d|c,h).PDu(c|h)l(h|Dl,Du)=>logPDu(h)+∑d∈Dllog∑c∈CPDu(d|c,h).PDu(c|h)+λ∑d∈Dulog∑c∈CPDu(d|c,h).PDu(c|h)
当label data数量比较少的时候,λλ就可以设置的比较小。
接下来使用EM算法来对模型的参数进行估计,可以从公式看出所有的计算和估计都是在DuDu分布下进行的:
E_Step:
PDu(c|d)=>PDu(c)Πw∈dPDu(w|c)PDu(c|d)=>PDu(c)Πw∈dPDu(w|c)
M_Step:
PDu(c)=>∑i∈{l,u}PDu(Di).PDu(c|Di)=>∑i∈{l,u}PDu(Di).∑d∈DiPDu(c|d).PDu(d|Di)PDu(c)=>∑i∈{l,u}PDu(Di).PDu(c|Di)=>∑i∈{l,u}PDu(Di).∑d∈DiPDu(c|d).PDu(d|Di)
Du(w|c)=>∑i∈{l,u}PDu(Di).PDu(c|Di).PDu(w|c,Di)Du(w|c)=>∑i∈{l,u}PDu(Di).PDu(c|Di).PDu(w|c,Di)
其中,PDu(w|c,Di)=1+nDu(w,c,Di)|w|+nDu(c,Di)PDu(w|c,Di)=1+nDu(w,c,Di)|w|+nDu(c,Di)
而nDu(w,c,Di)=∑d∈Di|d|.PDu(w|d).PDu(c|d)nDu(w,c,Di)=∑d∈Di|d|.PDu(w|d).PDu(c|d)
nDu(c,Di)=∑d∈Di|d|.PDu(c|d)nDu(c,Di)=∑d∈Di|d|.PDu(c|d)
上述公式中,PDu(w|d)PDu(w|d)与PDu(d|Di)PDu(d|Di)和分布DuDu没有关系,因此也可以表示为P(w|d)P(w|d)与P(d|Di)P(d|Di)
由于数据DuDu是从分布DuDu中采样生成的,故有PDu(Du)>PDu(Dl)PDu(Du)>PDu(Dl),但是它们之间具体的函数关系是多少,作者采用了一中实验方法来获得:
首先作者使用KL散度来衡量这种差异:
KL(Dl||Du)=∑w∈WPDl(w)log2PDl(w)PDu(w)=∑w∈WP(w|Dl)log2P(w|Dl)P(w|Du)KL(Dl||Du)=∑w∈WPDl(w)log2PDl(w)PDu(w)=∑w∈WP(w|Dl)log2P(w|Dl)P(w|Du)
接下来采用求解曲线拟合问题的方法来解决这个问题,即给两个变量(x,y)对应的一些取值,然后找出它们之间的映射关系 f(x)=>yf(x)=>y
在该场景下x值就是KL散度,y值是PDu(Dl)PDu(Du)PDu(Dl)PDu(Du),在几个数据集上调节y的取值到最好的效果,然后把这个时候的x值记录下来,这样在几个数据集上操作就可以获得好几对(x,y)的组合,接下来就可以进行函数拟合了。