1. 程式人生 > >斯坦福大學-自然語言處理入門 筆記 第十一課 最大熵模型與判別模型(2)

斯坦福大學-自然語言處理入門 筆記 第十一課 最大熵模型與判別模型(2)

一、最大熵模型

1、模型介紹

  • 基本思想:我們希望資料是均勻分佈的,除非我們有其他的限制條件讓給我們相信資料不是均勻分佈的。均勻分佈代表高熵(high entropy)。所以,最大熵模型的基本思想就是我們要找的分佈是滿足我們限制條件下,同時熵最高的分佈。
  • 熵:表示分佈的不確定性的度量。就算公式如下:
  • 舉例而言:拋一枚硬幣的熵如下圖,橫軸表示拋到正面的概率
    在這裡插入圖片描述
  • 特徵限制:放到實際場景來考慮這個問題的話,我們所找的分佈是在滿足特徵限制的情況下的最大熵分佈。特徵限制公式如下:
    • 新增特徵限制會導致:得到的分佈有更低的最大熵,但是提升它對資料的最大似然(likelihood);使得分佈離均勻分佈更遠,但是會更接近資料的實際分佈。

2、例子介紹

  • 例子1:拋硬幣問題,限制一是:P(拋正面)+P(拋反面)=1,限制二:P(拋正面)=0.3
  • 例子2:已知一段文字中的元素的詞性以及對應的頻率,這個是我們的資料。基於此我們來尋找最大熵模型。

3、凸性

  • 凸的定義,滿足如下公式的函式就表示該函式有凸性,凸性保證函式只有一個單獨的全域性最大值。
  • 基於凸的推導可得:有限制條件的熵是凸函式
    • -xlog(x)是凸函式;因為凸函式的和也是凸函式,所以-∑xlog(x)是凸函式;限制條件是一個線性子空間,也是凸函式;所以有限制的熵就是凸函式。因此指數模型的最大似然也是凸的。

二、最大熵模型中的特徵重疊(overlap)

1、特徵重疊(overlap)

  • 正如我們在之前論述的那樣( Introduction to NLP by Chris & Dan翻譯 第八課 最大熵模型與判別模型 的第五節),重複的特徵對最大熵模型沒有影響,但是會對樸素貝葉斯產生影響。可以看到下面的例子中,兩個特徵都是A=2/3,對估計的結果沒有影響。
    在這裡插入圖片描述
    從下面的例子中,我們也可以看到:Grace和<G這兩個特徵(用箭頭指的特徵)存在著一定程度的重疊,因此特徵Grace的權重就接近於0。
    在這裡插入圖片描述

2、特徵互動(interaction)

  • 如果想在最大熵模型中構建特徵互動項,我們就需要直接加入互動項特徵。例子如下:
    在這裡插入圖片描述

    在這裡插入圖片描述

3、特徵選擇

  • 邏輯迴歸中的互動特徵選擇是用貪婪逐步搜尋(greedy stepwise search)
  • 但是隨著本身的特徵增長,可能有效的互動特徵是指數型增長的,所以這種選擇只在有4-8個特徵的時候是有效的。
  • 在自然語言處理中,我們經常會使用到成百上千的特徵,所以我們不能使用這樣的選擇方法。
  • 一般而言,交叉項是基於語言直覺(linguistic intuitions)直接選擇的。

三、條件和聯合指數模型的關聯

  • 對聯合模型P(X)和條件模型P(C|D)而言,我們可以認為C×D是一個複雜的X,其中
    • C比較小:2-100個種類
    • D非常巨大:文件空間是很巨大的
  • 我們構建模型P(C,D),基於此我們計算特徵的期望
  • D是無限的,但是就我們的資料而言,d是有限的。所以我們可以在這個模型 中加入一個特徵,並且對它進行限制以匹配我們的實證資料。
  • 這樣大部分的P(c,d)就是0,這樣我們就可以把期望改寫成
  • 這個改寫的途徑就是把P(c,d)改寫成下面的公式,也就是包含P(c|d)的模式
  • 因此,實際上這兩個模型的關聯在於,條件模型實際上就是有邊界限制的聯合模型(這個限制是對觀察到的資料分佈的匹配)。

四、最大熵模型的平滑

1、為什麼要進行平滑?

  • 特徵很多:NLP最大熵模型有超過一百萬的特徵,即使對這些引數進行簡單的儲存都會導致很大的記憶體負擔。
  • 稀疏很多:很容易導致過擬合,很多在訓練的時候用到的特徵可能在測試的時候不會再出現了。
  • 優化問題:特徵的權重可能是無窮大,迭代去需要花很多時間才能到無窮大
  • 舉例而言
    在這裡插入圖片描述
    在這裡插入圖片描述
    在上面的第三種情況中,會出現λ無窮大的情況,導致優化過程會非常漫長;並且它假設一直會出現正面,本身就沒意義。

2、平滑方法一:早停(early stopping)

  • 在進行幾輪的迭代之後,停止優化。
    • λ值就不會無窮大(但是會很大)
    • 優化不會無窮無盡地進行下去了
    • 經常被用在早期的最大熵模型中

3、平滑方法二:先驗(priors( MAP))

  • 設定存在一個先驗期望:引數值不會很大。這樣我們就可以利用先驗(priors)來平衡實證導致的無窮大的引數,使其平滑。
  • 實現方法:把優化目標改為最大後驗似然
  • 先驗(prior)項:高斯/二次/L2先驗
    • 基本思想:先驗期望是每個引數都遵循平均數為μ方差為σ²的高斯分佈。如果引數離他們的平均先驗值(通常μ=0)很遠的話就會對他們進行懲罰。

      對於σ²而言,它的作用是調節引數離開μ的容易程度,如果很小的話,會使得引數更容易接近0。一開始的時候,比較合適的值是σ²=1/2,後期可以再調整。
      在這裡插入圖片描述
      我們可以把高斯先驗的優化目標寫為:

      它的導數是:
    • 高斯先驗犧牲了一部分的期望匹配來獲得更小的引數。也就是那些有更多資料符合的特徵會有更高的權重。如下面的訓練資料所示,符合NNP特徵的資料比符合IN NNP特徵的資料多,因此NNP特徵的權重也更高。同時正確率也會提升。
      -
  • 例子:詞性標註
    在這裡插入圖片描述
  • 關於稱呼:在貝葉斯語境中我們一般稱之為prior或者MAP估計。人們更常見的稱呼是正則,高斯先驗對應的稱呼是L₂正則。但是實際上這幾種稱呼對應的方法在數學上沒有區別。

4、平滑方法三:虛構資料(virtual data)

  • 基本思想:平滑資料而不是平滑引數。這個方法和生成模型的加一平滑非常相似。
  • 主要的問題是當特徵很多的時候,虛構資料會非常困難。
  • 例子如下:

5、平滑方法四:計數切斷(count cutoff)

  • 主要的想法就是直接把那些實證計數比較少的特徵丟掉
    • 非常弱和不直接的平滑方法
    • 相當於把這些特徵的權重改為0
    • 相當於加入了一個平均值為0方差為0的高斯先驗
    • 丟掉的那些計數很少的特徵確實大部分是需要平滑的 ,同時它也降低了模型的規模加速了估計,但是和平滑相比它會傷害一定的準確性。
  • 我們認為儘量不要使用計數切斷,除非是基於記憶體的原因。