您的位置:首页 > 编程语言 > Java开发

相对熵(relative entropy或 Kullback-Leibler divergence,KL距离)的java实现(一)

2010-03-12 10:08 471 查看

利用信息论的方法可以进行一些简单的自然语言处理

比如利用相对熵进行分类或者是利用相对熵来衡量两个随机分布的差距,当两个随机分布相同时,其相对熵为0.当两个随机分布的差别增加时,器相对熵也增加。我们下面的实验是为了横量概率分布的差异。

试验方法、要求和材料

要求:

1.任意摘录一段文字,统计这段文字中所有字符的相对频率。假设这些相对频率就是这些字符的概率(即用相对频率代替概率);

2.另取一段文字,按同样方法计算字符分布概率;

3.计算两段文字中字符分布的KL距离;

4.举例说明(任意找两个分布p和q),KL距离是不对称的,即D(p//q)!=D(q//p);

方法:

D(p//q)=sum(p(x)*log(p(x)/q(x)))。其中p(x)和q(x)为两个概率分布

约定 0*log(0/q(x))=0;p(x)*log(p(x)/0)=infinity;

实验材料:

从凤凰新闻网,提取的两篇新闻名字为:

《《小团圆》究竟泄了张爱玲什么“秘密”?》

《《小团圆》:张爱玲的一个梦》

《1945年毛zedong和蒋介石在重庆谈判前的秘密情报战》

三篇新闻的编码均为utf-8,大小都是11k左右,都为多页新闻。

三篇新闻的内容如下







从上面可以很显然的看出:第一篇新闻和第二篇新闻都是讲张爱玲的著作《小团圆》的,第三篇新闻内容是国共内战的,显然是第一篇新闻和第二篇新闻之间的概率分布相似度大,那么实验结果是不是这样呢?让我们擦亮眼睛,拭目以待吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: