zoukankan      html  css  js  c++  java
  • 信息论随笔3: 交叉熵与TF-IDF模型

    接上文:信息论随笔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}) )

        ( = sumlimits_{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) = sumlimits_{i=1}^{k}p'(w_{i})log_{2}frac{p'(w_{i})}{q(w_{i})} )

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

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

        ( = sumlimits_{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) = -sumlimits_{i=1}^{k}p'(w_{i})log_{2}q(w_{i}) )

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

    (  = frac{1}{m} sumlimits_{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,与相对熵相等;

  • 相关阅读:
    每日一水 POJ8道水题
    编译和使用 MySQL C++ Connector
    j2ee model1模型完成分页逻辑的实现 详解!
    DB查询分析器访问EXCEL时,要在表名前后加上中括弧或双引号
    指向结构体变量的指针
    EOSS V3.0 企业运营支撑系统(基于RBAC原理的权限管理)
    MybatisGen1.0 Mybatis JavaBean Mapper生成工具
    The table name must be enclosed in double quotation marks or sqare bracket while accessing EXCEL by
    资源-Android:Android
    软件-开发软件:Android Studio
  • 原文地址:https://www.cnblogs.com/ZisZ/p/9087921.html
Copyright © 2011-2022 走看看