接上文:信息论随笔2: 交叉熵、相对熵,及上上文:信息论随笔

在读《数学之美》的时候,相关性那一节对TF-IDF模型有这样一句描述:“其实 IDF 的概念就是一个特定条件下、关键词的概率分布的交叉熵(Kullback-Leibler Divergence)”;

当时尚不明白,等我看懂交叉熵与相对熵之后,再看TF-IDF,略有所获,本想与上一篇合写在一起的,但越写越多,于是单独成文;

文档的信息量

一篇文档由m个词组成

\( d = (w_{1}, w_{2}, w_{3}, ......, w_{m} ) \)

这篇文档d成文的概率是

\( p(d) = p(w_{1}, w_{2}, w_{3}, ......, w_{m}) \)

这篇文档d的自信息量是

\( I(d) = -log_{2}p(d) = -log_{2}p(w_{1}, w_{2}, w_{3}, ......, w_{m}) \)

假设1:每个词的出现是独立事件,则有

\( p(w_{1}, w_{2}, w_{3}, ......, w_{m}) = p(w_{1})p(w_{2})p(w_{3})......p(w_{m}) \)

这篇文档d的自信息量是

\( I(d) = -log_{2}p(w_{1}, w_{2}, w_{3}, ......, w_{m}) = -log_{2}p(w_{1})-log_{2}p(w_{2})-log_{2}p(w_{3}) ...... -log_{2}p(w_{m}) \)

\(  = I(w_{1}) + I(w_{2}) + I(w_{3}) + ...... + I(w_{m}) \)

至此,得到一个很显而易见的结论,结论1:在假设1条件下,一篇文档的信息量是组成它的所有词的信息量之和;

再考虑到词可能出现重复,设m个词中共有k个不重复词,每个词的重复次数是\( n_{k} \),则:

这篇文档d的自信息量是

\( I(d) =  n_{1}I(w_{1}) + n_{2}I(w_{2}) + n_{3}I(w_{3}) + ...... + n_{k}I(w_{k}) \)

\( = \sum\limits_{i=1}^{k}n_{i}I(w_{i}) \)

词的概率分布估计

在上面文档信息量公式中,需要计算每个词的自信息量,但事实上这是做不到的,因为一个词在语言中的真实概率分布是不可知的,只能进行估计;

设我们估计得到的词概率分布为q;通常求q的方法可以是统计一个比较大的语料库中各个词的出现概率,为了迎合 IDF是KL散度的一说法,我只能再把《数字之美》中的两个假设拉进来;

假设2:每篇文档大小基本相同,都为m个词;

假设3:一个词如果出现在文档中,则在每个文档中出现的次数都相同;(注:我也觉得这个假设太过理想了)

有了以上假设后,我们可以估计每个词的概率分布进而求解其信息量了;

设共有D篇文档,每篇文档有m个词,其中包含词\(w_{i}\)的文档有\(D(w_{i})\)篇,有:

\( q(w_{i}) = \frac{n_{i}D(w_{i})}{mD}\)

设词\(w_{I}\)在文档d中的真实概率分布为p',于是:

\( p'(w_{i}) = \frac{n_{i}}{m} \)

然后把p'、q套进相对熵公式:

\( D_{KL}(p' || q) = \sum\limits_{i=1}^{k}p'(w_{i})log_{2}\frac{p'(w_{i})}{q(w_{i})} \)

\( =  \sum\limits_{i=1}^{k}  \frac{n_{i}}{m} log_{2}\frac{n_{i}/m}{ n_{i}D(w_{i})/mD} \)

\( =  \sum\limits_{i=1}^{k}  \frac{n_{i}}{m} log_{2}\frac{1}{D(w_{i})/D} \)

\( = \sum\limits_{i=1}^{k} TF(w_{i})IDF(w_{i}) \)

由此得到一个结论,结论2:利用假设1、2、3条件下的词概率分布估计一个文档中某个词W的可能性所多产生的不确定性就是d中所有词的TF-IDF之和;

这个结论2写得有点拗口,只是尽力让结论成一句话,下面试着多写几句话进行解释:

  1. 首先,这个结论基于特定的条件,即假设1、2、3所设定的条件;
  2. 在这个特定条件下,我们得到了一种关于词概率分布的估计q;
  3. 用q去估计文档d中某个词W的可能性是浪费的,因为q几乎不可能与文档d中的真实词概率分布p'相同,交叉熵大于等于信息熵,即相对熵恒大于0;
  4. 以上相对熵是描述d中的某个词时的相对熵(多出来的不确定度);重要的事情说三遍,某个词、某个词、某个词;
  5. 对文档d中的所有词求TF-IDF之和,就是这个相对熵;
  6. 每个词的TF-IDF,是对这个相对熵的贡献,其中IDF是对相对熵的关键贡献值,TF是个权重;这应该就是吴军在《数学之美》中所讲的“IDF 的概念就是一个特定条件下、关键词的概率分布的交叉熵(Kullback-Leibler Divergence)”,只不过在中英文对照上出了问题,KL散度应该对应是相对熵,而相对熵与交叉熵在很多时候又分不清楚;
  7. 当这个相对熵(TF-IDF之和)越大,q对文档d的描述越差,说明文档d的内容指向性越强,因为q是对整个语言中所有词的概率分布的估计;当这个相对熵越小(TF-IDF之和)越小,q对文档d的描述越好,说明文档d的内容指向性越差,越可能是随机按q选取词堆砌成文;

词交叉熵与文档估计信息量

上面既然推算出了相对熵,那再来看看交叉熵;

同样将p'、q带入交叉熵公式:

\( H(p', q) = -\sum\limits_{i=1}^{k}p'(w_{i})log_{2}q(w_{i}) \)

\(  = \sum\limits_{i=1}^{k}  \frac{n_{i}}{m} I'(w_{i}) , 设 I'(w_{i}) = -log_{2}q(w_{i}) \)

\(  = \frac{1}{m} \sum\limits_{i=1}^{k} n_{i}I'(w_{i}) \)

\(  = \frac{1}{m} I'(d) \)

即:

\( I'(d) = mH(p', q) \)

上面说过了,因为我们无法获知一个词的真实自信息量,所以无法获知文档d的真实自信息量,但我们引入假设2、3条件后,可以用q做估计,从而得到在q概率分布下,文档d的估计信息量,就是这个I'(d);

这个I'(d)为啥是交叉熵的m倍?还记得上面那个说三遍吗,不管是这里的交叉熵还是相对熵,都是与某个词有关的熵;而文档d有m个词,当然信息量会翻m倍了;

例子:

仍然使用上一篇随笔中的例子:

含有4个字母(A,B,C,D)的数据集,组成了一篇文档d,d的内容只有两个字母“AB”,我们不知道数据集元素的真实分布p,只知在文档d内p‘=(1/2, 1/2, 0, 0);

如果使用p'来编码,H(p') = 1,每个字母使用一位编码,设定"A" = 0, "B" = 1,则d=01,文档d的编码长度为2;

根据假设2、3条件,共有12篇文档,每篇长度是2(假设2),且每个字母在所有包含它的文档中出现次数都相同(假设3),分别是

AB  AC  AD

BA  BC  BD

CA  CB  CD

DA  DB  DC

得到估计分布q=(1/4, 1/4, 1/4, 1/4),使用q来编码,则得到H(p’,q)=2,每个字母需要2位编码来识别,设定"A" = 00, "B" = 01, "C" = 10, "D" = 11;则d=0001,文档d的编码长度为4;

字母的交叉熵是2,相对熵是1,文档d的估计信息量为4;

IDF(A) = log(12/6) = 1,IDF(B) = log(12/6) = 1;

TF(A)*IDF(A) + TF(B) *IDF(B) = 1/2* 1 + 1/2 * 1 = 1,与相对熵相等;

信息论随笔3: 交叉熵与TF-IDF模型的更多相关文章

  1. Tensorflow手写数字识别(交叉熵)练习

    # coding: utf-8import tensorflow as tffrom tensorflow.examples.tutorials.mnist import input_data #pr ...

  2. [ch03-02] 交叉熵损失函数

    系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 3.2 交叉熵损失函数 交叉熵(Cross Entrop ...

  3. 关于交叉熵损失函数Cross Entropy Loss

    1.说在前面 最近在学习object detection的论文,又遇到交叉熵.高斯混合模型等之类的知识,发现自己没有搞明白这些概念,也从来没有认真总结归纳过,所以觉得自己应该沉下心,对以前的知识做一个 ...

  4. 深度学习原理与框架-Tensorflow卷积神经网络-卷积神经网络mnist分类 1.tf.nn.conv2d(卷积操作) 2.tf.nn.max_pool(最大池化操作) 3.tf.nn.dropout(执行dropout操作) 4.tf.nn.softmax_cross_entropy_with_logits(交叉熵损失) 5.tf.truncated_normal(两个标准差内的正态分布)

    1. tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME')  # 对数据进行卷积操作 参数说明:x表示输入数据,w表示卷积核, stride ...

  5. TF Boys (TensorFlow Boys ) 养成记(五): CIFAR10 Model 和 TensorFlow 的四种交叉熵介绍

    有了数据,有了网络结构,下面我们就来写 cifar10 的代码. 首先处理输入,在 /home/your_name/TensorFlow/cifar10/ 下建立 cifar10_input.py,输 ...

  6. 信息论相关概念:熵 交叉熵 KL散度 JS散度

    目录 机器学习基础--信息论相关概念总结以及理解 1. 信息量(熵) 2. KL散度 3. 交叉熵 4. JS散度 机器学习基础--信息论相关概念总结以及理解 摘要: 熵(entropy).KL 散度 ...

  7. TF/IDF计算方法

    FROM:http://blog.csdn.net/pennyliang/article/details/1231028 我们已经谈过了如何自动下载网页.如何建立索引.如何衡量网页的质量(Page R ...

  8. 转:Lucene之计算相似度模型VSM(Vector Space Model) : tf-idf与交叉熵关系,cos余弦相似度

    原文:http://blog.csdn.net/zhangbinfly/article/details/7734118 最近想学习下Lucene ,以前运行的Demo就感觉很神奇,什么原理呢,尤其是查 ...

  9. TF/IDF(term frequency/inverse document frequency)

    TF/IDF(term frequency/inverse document frequency) 的概念被公认为信息检索中最重要的发明. 一. TF/IDF描述单个term与特定document的相 ...

随机推荐

  1. String内存分配

    Java 把内存划分成两种:一种是栈内存,另一种是堆内存.在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的 栈内存中分配,当在一段代码块定义一个变量时,Java 就在栈中为这个变量分配内存 ...

  2. 提升现代web app中页面性能

    提升现代web app的中的页面性能 前言,本文翻译自https://docs.google.com/presentation/d/1hBIb0CshY9DlM1fkxSLXVSW3Srg3CxaxA ...

  3. AdminIII连接linux Postgresql过程中的几个小问题

    1.postgresql.conf主配置文件中要配置postgresql绑定的IP,如果不设置,可能只绑定本地闭环地址:127.0.0.1,可以设定为0.0.0.0:就包括了一切IPv4地址 2.pg ...

  4. 关于Python的那些话

    1.第一个选择:版本2还是3,我选择2,保守谨慎,3的成熟周期会很长2.三种基本的文本操作:     2.1.解析数据并将数据反序列化到程序的数据结构中     2.2.将数据以某种方式转化为另一种相 ...

  5. Hashtable源码解析

    Hashtable同样是基于哈希表实现的,同样每个元素是一个key-value对,其内部也是通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长. Hashtable也是JDK1.0引入的 ...

  6. Yii2表单提交(带文件上传)

    今天写一个php的表单提交接口,除了基本的字符串数据,还带文件上传,不用说前端form标签内应该有这些属性 <form enctype="multipart/form-data&quo ...

  7. php获取指定目录下的所有文件列表

    在我们实际的开发需求中,经常用到操作文件,今天就讲一下关于获取指定目录下的所有文件的几种常用方法: 1.scandir()函数 scandir() 函数返回指定目录中的文件和目录的数组. scandi ...

  8. 使用webpack打包vue工程

    记得去年十月份的时候,自己在研究webpack,当时只是知道大致的用法,写了一个简单的demo,现在,经过了7个月对公司产品架构的使用,以及对vue-cli的使用,在了解了实际应用中各种需求之后,我自 ...

  9. python奇技淫巧——max/min函数的用法

    本文以max()为例,对min/max内建函数进行说明 源码 def max(*args, key=None): # known special case of max ""&qu ...

  10. JQuery制作基础的无缝轮播与左右点击效果

    在网页中我们想要的无缝轮播左右循环有好多好多中,这是我第一个轮播效果,也是最基础的,和大家分享一下,对于初学者希望你们能有所借鉴,对于大神我想让你们尽情的虐我给我宝贵的意见. 这个是我要的效果 进入正 ...