Bayes方法就是一个‘逆概’问题

  1. Wiki例子

    一所学校里面有 60% 的男生,40% 的女生。男生总是穿长裤,女生则一半穿长裤一半穿裙子。有了这些信息之后我们可以容易地计算“随机选取一个学生,他(她)穿长裤的概率和穿裙子的概率是多大”,这个就是前面说的“正向概率”的计算。然而,假设你走在校园中,迎面走来一个穿长裤的学生(很不幸的是你高度近似,你只看得见他(她)穿的是否长裤,而无法确定他(她)的性别),你能够推断出他(她)是男生的概率是多大吗?

  2. Bayes公式:

     P(Girl|Pants) = 穿长裤的人中,女生的比例 = 穿长裤的女生数 / 穿长裤的人数
                   = P(Girl) * P(Pants|Girl) / [P(Boy) * P(Pants|Boy) + P(Girl) * P(Pants|Girl)]
     一般形式为:
     P(B|A) = P(A|B) * P(B) / [P(A|B) * P(B) + P(A|~B) * P(~B) ]
            = P(A|B) * P(B) / P(A)
            = P(AB)/P(A)
    
  3. bayes公式结合了先验概率和极大似然,合二为一
    • 极大似然是以当前情况为中心,以当前情况最有可能发生为目标进行建模和预测
    • 先验概率则是考虑了全局(历史)情况,统计了每种预测的全局概率
    • 以拼写纠正为例,极大似然就是根据用户输入D,找最相似的h进行猜测,即计算p(h D)
    • 但是,有些猜测h出现的几率非常小,简单利用p(h D)猜测用户想输入h显然是不合理的
    • 比如用户输入tlp,根据极大似然,我们找到编辑距离最近的两个单词top和tip,如何抉择?
    • 一个更好的解释单纯极大似然不合理的例子是曲线拟合
      • 给几个数字-1, 3, 7, 11,这个数列可以是等差数列的点,也可以是-X^3 / 11 + 9/11*X^2 + 23/11 的点
      • 极大似然可能认为是后者更好的满足了输入序列,但实际中,这往往形成‘过拟合’,
      • 一般来说,越低阶的多项式越靠谱(当然是要考虑似然的前提下),其中一个原因‘可能’就是低阶多项式更常见?
    • 我们的观测数据总会有各种误差,无论是观测误差或系统误差,如果过分拟合观测数据,就肯定会失真。
    • 观测数据的成分复杂,由各种因素集体贡献。一个现实的模型往往只提取出几个与结果相关度很高的因素。
  4. 应用例子

    1. 拼写纠正问题

      设用户输入单词为D,猜测其想输入h,我们的目标就是求最大的P(h|D)
      运用Bayes得到: p(h|D)=P(h)*P(D|h)/P(D) 由于不同的猜测h1,h2…,P(D)是一样的,所以得到:
      p(h|D)~P(h)*P(D|h)
      这个公式解读为:对于用户输入D,猜测h的好坏取决与猜测h本身的先验概率p(h),以及h和D的似然概率的乘积
      具体的做法: 先验概率p(h)可以根据用户输入历史数据直接统计得到;P(D|h)可以计算单词的编辑距离或键盘布局导致的误输入可能性得到
      给定用户输入D,找h的时候,可以事先为每个单词建立一个倒排索引,比如存放每个单词编辑距离小于2的单词

    2. 中文分词

      设X为字串(句子),Y为词串,我们的目标就是求得使P(Y|X)最大的Y,使用bayes得到
      P(Y|X)~P(X|Y)*P(Y)
      这个公式解读为,这种分词的正确性正比与分词后词串的可能性P(Y),以及词串到原始句子的转换可能性P(X|Y),一般来说,P(X|Y)是接近1的,可以不考虑,所以关键就是最大化P(Y),即计算一个词串的可能性: P(Y)=P(W1, W2, W3...)=P(W1)*P(W2|W1)*P(W3|W1,W2)...
      使用n-gram原理,认为只有连续的n个词之间有相互影响,极端情况下,认为所有的词都是独立的(马尔可夫性质, 1-gram):
      P(Y)=P(W1)*P(W2)*P(W3)...
      当然用2-gram可能要好点

    3. 统计机器翻译

      设e为句子,f为翻译后的句子,想在要求哪个f最靠谱,即P(f|e)最大,贝叶斯之: P(f|e) ~ P(f) * P(e|f)
      这个公式的解读为,翻译的准确性正比于翻译后句子的先验概率P(f),以及f到e的转化概率P(e|f)。P(f)可以使用n-gram模型简单计算,但是p(e|f)就比较棘手了,我们首先要将e和f对齐,及每个词的对应关系,有了这个对应关系,就很容易求出p(e|f),比如: e:I love you f:我爱你
      对其: I(我) love(爱) you(你)
      p(e|f)=P(I|我)P(love|爱)P(you|你)
      所以关键是如何对其,我们需要一个分词对齐的平行语料库,TODO NLP基础书已经下载

    4. 垃圾邮件过滤

      设D为一封邮件,h+/h-分别代表垃圾邮件和非垃圾邮件,需要计算和比较: P(h+|D) ~ P(D|h+)*P(h+)P(h-|D) ~ P(D|h-)*P(h-)
      P(h+)和P(h-)两个先验概率很容易从训练集中统计出来,如何计算P(D|h+)和P(D|h-),以P(D|h+)为例: D由N个词组成,W1,W2,W3…,因此:
      P(D|h+)=P(W1,W2,W3...|h+)=P(W1|h+)*P(W2|W1,h+)*P(W3|W2,W1,h+)...
      这个数据太稀疏了,这是在垃圾邮件中找完全相同的一封邮件
      使用朴素贝叶斯,认为每个词都没有关联(1-gram)简化得到:
      P(D|h+)=P(W1|h+)*P(W2|h+)*P(W3|h+)...
      即简单统计每个词在垃圾邮件中出现的词频,Easy done

其他

*REF

TOP