NLP-統計語言模型的平滑處理方法
本文已參與「新人創作禮」活動,一起開啟掘金創作之路。
一、引言
在NLP-統計語言模型中簡要介紹了統計語言模型的原理和實現方法,以bigram為例,計算了
$P(\color{green}{我,喜歡 ,自然語言 ,處理})=P(\color{green}{我})P(\color{green}{喜歡|我})P(\color{green}{自然語言|喜歡})*P(\color{green}{處理|自然語言})$
的概率,這是比較理想的情況,而現實與理想的差距是我們預測了一萬種可能,卻還有一萬零一種可能的存在。而我們企圖用已經存在的語料資料來覆蓋未來有可能出現的測試資料,未免有些天真。 還是以NLP-統計語言模型中的假設語料來舉例
- 我 喜歡 大自然
- 自然語言 是 如何 形成 的 呢
- 如何 處理 資料 是 很 重要 的
- 越來越多 的 人 喜歡 自然語言 處理
而我需要計算句子$\color{green}{我 喜歡 看電影}$的概率時:
$P(\color{green}{我,喜歡 ,看電影})=P(\color{green}{我})P(\color{green}{喜歡|我})P(\color{green}{看電影|喜歡})$
在語料庫中喜歡的後面並沒有出現過看電影,也就意味著$P(\color{green}{看電影|喜歡})=0$,直接導致了$\color{green}{我 喜歡 看電影}$的可能性為0,這顯然是不科學的,所以就需要一些平滑的處理方法,用以過渡上述情況。
二、add-k smoothing
add-k smoothing 是一種比較簡單的方式,為了防止出現概率為0的情況,對求概率的公式做了一點手腳,如下:
$$ P(w_n|w_{n-1})=\frac{w_n、w_{n-1}同時出現的次數+k}{語料庫中w_{n-1}出現的次數+k*詞庫大小} \tag{k=1,2,3...n} $$
為什麼是$k詞庫大小$呢,因為要確保概率的總和為1,具體過程此處不做推導。 add-k smoothing 是一種行之有效的方式,但其中也隱含著一種價值觀: 沒有出現的詞未來出現的可能性相等*,對於所有概率為0的情況,都是在分子和分母上做了同樣的操作,那麼就導致了這些情況的概率都一致,是否還有更加“公平”的一些方式呢?有,來看看interpolation smoothing。
三、interpolation smoothing
interpolation smoothing的思想在於求上不得而求其中,其中不足餘下來補,為了更好的說明interpolation 以trigram為例,假設我們要求$P(w_n|w_{n-1},w_{n-2})$,$P(w_n|w_{n-1},w_{n-2})$會等於0,那麼求$P(w_n|w_{n-1})$,再不濟還可以求$P(w_n)$,綜合上面三種情況,給每種情況分配不同的權重得:
$P(w_n|w_{n-1},w_{n-2})=\lambda_1 * P(w_n|w_{n-1},w_{n-2})+\lambda_2 * P(w_n|w_{n-1})+\lambda_3 * P(w_n)$ $\lambda_1+\lambda_2+\lambda_3=1$
此方法綜合unigram、bigram和trigram甚至可以更多,這樣就確保了語料庫未出現詞組合的概率的不一致,相對來說,公平了些。
四、good-turing smoothing
good-turing的核心思想在於,對於沒有出現的過的事件,不能認為該事件出現的概率為0,所以我們從已經發生的事件概率總量1中分配一個很小的比例給該事件。 這是一種很有前瞻性的格局,但是把概率分出去一分部以後,那未出現的事件+已經出現的事件的概率總和就會大於1,所以就需要把已經發生的事件的概率稍微調小一點,確保概率的總合為1,具體怎麼調整呢,先擺出公式再來解釋: 為了說明公式,先來認識一個概念:
$N_c:表示語料庫中出現了c次的詞有N_c個$ $N_1:表示語料庫中出現了1次的詞有N_1個$ $d_c:表示調整以後語料庫中出現了c次的詞的頻次$ $c:表示某個詞在語料庫中出現的頻次$
假設語料庫的大小為N,對於沒有出現過的詞,概率原本為0,那麼分一個語料庫中低頻事件的概率給它,比如,把語料庫中只出現只出現過一次的事件的概率給它:
$P(未出現詞)=0 =>P(未出現詞)=\frac{N_1}{N}$
對於已經出現過的詞,需要調整概率
$$P(出現的詞)=\frac{c}{N} =>P(出現的詞)=d_c\frac{1}{N}=\frac{(c+1)N_{c+1}}{N_cN} $$
至於公式為何是這樣,吳軍老師在《數學之美》中講解較好,感興趣的可以前去參考,此處不做過多解釋,本文著眼於如何利用成果解決問題。
看了公式可能有點蒙圈,還是根據語料庫來解釋一下 設語料來舉例
- 自然語言 是 如何 形成 的 呢
- 如何 處理 自然語言 是 很 重要 的
- 是 又 如何
假設現在要根據語料庫計算計算的概率,而計算剛好沒有出現過,那麼
$P(計算)=\frac{N_1}{16}=\frac{6}{16} \tag{只出現過一次的詞有6個}$
此時,原先出現過的詞的概率需調整
$P(自然語言)=\frac{c}{N}=\frac{2}{16}=>\frac{(c+1)N_{c+1}}{N_cN}=\frac{(2+1)N_{2+1}}{N_2N}=\frac{3}{16}$
突然發現了神奇的一幕,調整以後概率還變大了,這是因為舉例的語料庫太小,很多地方不合理,在較大的語料庫中是不會出現這種情況的,拿漢字來說,常用的漢字的比例在總漢字中的比例是很小的,也就是c越大,$N_c$越小,那麼一般情況下$N_{c+1}<N_{c}$(具體證明參考齊夫定律),即概率調整後是減少的。
五、總結
本文簡單介紹一些在統計語言模型中需要的一些平滑過渡的方法,總體而言就是考慮未登入詞的情況,方法並非絕對,如果讀者還有更多的方法歡迎介紹。
- NLP-中文分詞:最大正向匹配演算法
- 重陽節營銷看這篇,助力你的創意之路節節登高
- 牛散“夫妻檔”夏重陽、張素芬撰寫“捕牛者說”,一隻牛股暴賺1500萬,還看中了一家“殼公司”
- NLP-統計語言模型的平滑處理方法
- NLP-什麼是one hot?
- 人大重陽x抖音x民生研究230頁展望2030年的元宇宙
- 評論丨重陽節,老年版“手機應用商店”值得別樣期待
- 佳節又重陽 國家政務服務平臺“智慧助老”在行動
- 意派Epub360丨重陽節品牌祝福海報H5案例,創意十足!
- 這套重陽節文案,我懟得太爽了
- 10月營銷熱點日曆丨國慶節、寒露、霜降、重陽節
- 百億級私募最新持倉曝光!馮柳、重陽齊聚一隻股票,莊濤抄底淳中科技……
- 1、幾十行程式碼實現一個聊天室
- 聚好看“黑科技”重陽獻禮 溫情科技拉近父母與你的距離