最大熵模型与自然语言处理
取自 自然语言处理百科
日常生活中,很多事情的发生表现出一定的随机性,试验的结果往往是不确定的,而且也不知道这个随机现象所服从的概率分布,所有的只有一些试验样本或样本特征,统计学常常关心的一个问题,在这种情况下如何对分布作出一个合理的推断?根据样本信息对某个未知分布作出推断的方法,最大熵的方法就是这样一个方法。
最大熵原理是在1957 年由E.T.Jaynes 提出的,其主要思想是,在只掌握关于未知分布的部分知识时,应该选取符合这些知识但熵值最大的概率分布。因为在这种情况下,符合已知知识的概率分布可能不止一个。我们知道,熵定义的实际上是一个随机变量的不确定性,熵最大的时侯,说明随机变量最不确定,换句话说,也就是随机变量最随机,对其行为做准确预测最困难。从这个意义上讲,那么最大熵原理的实质就是,在已知部分知识的前提下,关于未知分布最合理的推断就是符合已知知识最不确定或最随机的推断,这是我们可以作出的唯一不偏不倚的选择,任何其它的选择都意味着我们增加了其它的约束和假设,这些约束和假设根据我们掌握的信息无法作出。
自然语言处理中很多问题都可以归结为统计分类问题,很多机器学习方法在这里都能找到应用,在自然语言处理中,统计分类表现在要估计类a 和某上下文b 共现的概率P(a,b) ,不同的问题,类a 和上下文b 的内容和含义也不相同。在词性标注中是类的含义是词性标注集中的词类标记,而上下文指的是当前被处理的词前面一个词及词类,后面一个词及词类或前后若干个词和词类。通常上下文有时是词,有时是词类标记,有时是历史决策等等。大规模语料库中通常包含a 和b 的共现信息,但b 在语料库中的出现常常是稀疏的,要对所有可能的(a,b)计算出可靠的P(a,b) ,语料库规模往往总是不够的。问题是要发现一个方法,利用这个方法在数据稀疏的条件下可靠的估计P(a,b) 。不同的方法可能采用不同的估计方法。
p*=argmaxH(p) p∈P
P(p|p是X上满足条件的概率分布)
特征:(x, y)
y:这个特征中需要确定的信息
x:这个特征中的上下文信息
关于某个特征(x, y)的样本——特征所描述的语法现象在标准集合里的分布:
(xi, yi)pairs
yi是y的一个实例
xi是yi的上下文
特征函数:对于一个特征(x0, y0),定义特征函数:
f(x, y)=1 如果y=y0且x=x0
0 其他情况
特征函数期望值:
对于一个特征(x0, y0),在样本中的期望是:
p'(f)=Σp'(x, y)f(x, y)
p'(x, y)是(x, y)在样本中出现的概率
条件:
对每一个特征(x, y),模型所建立的条件概率分布要与训练样本表现出来的分布相同。
Epfj =Σp'(x) fj(x)
于是,最大熵模型可表示为
p*=-argmaxΣp(y|x)p'(x)logp(y|x)
p∈P
P={p(y|x)|∀fi: Σp(y|x)p'(x)fi(x, y)=Σp'(x, y)fi(x, y)
(x,y) (x,y)
∀x: Σp(y|x) =1 }
y
即解带限制条件的极值问题。
这些从理论上来看似乎都没有问题。可是应用到实际中,究竟该把x定义为什么,y定义为什么,而且对于每对(x, y),为什么会有多个特征函数fi与之对应呢?师姐的模型里简化了,y代表上下文,x代表类别,有唯一的fi与之对应。所以集合P里只有一个元素了,所以之后迭代一次拉格郎日乘子就确定了。那么,究竟该如何定义呢?看了那么多paper,居然没有篇仔细说明的!太郁闷了,谁做过最大熵的,教教我吧!

