自然語言處理4-5:語言模型之平滑操作


為什么需要平滑操作

假設有一個預料集

我 喜歡 喝 奶茶
我 喜歡 吃 巧克力
我 喜歡 健身
天啦擼,一起同過窗 要出 第三季 了

這個時候要計算“我喜歡喝咖啡”的概率

假設我們用bi-gram模型來計算,也就是說

      P(我喜歡喝咖啡) = P(我)P(喜歡|我)P(喝|喜歡)P(咖啡|喝) = (3/16) * (1)  * (1/3) * (0) = 0

但是我們都容易感覺出來,“我喜歡喝咖啡”是符合語言習慣的句子,也就是說,雖然現在的語料庫中沒有這個句子,但是將來也有可能出現,但是我們算出的這個句子出現的概率是0,這不符合常識。因為語料庫中沒有出現“喝”后面接“咖啡”,只能說明這個句子未來出現的概率比較小,但是不排除它會出現,畢竟“我喜歡喝”這個前綴的概率該是很大的,“喝 咖啡”沒有出現,只能說明“喝”后面接“咖啡”的概率很小,但是就將這個句子的概率定為0是不科學的。那么,該如何做才能使得沒出現的搭配也能有一個小的概率呢?

Add-one smoothing

直接給公式:

$$P(w _{i}| w_{i-1}) = \frac{C(w_{i-1}, w_{i}) + 1}{C(w_{i-1})+v} $$

這里的v是詞典庫的大小,注意,是詞典庫的大小,不是訓練的預料集分詞之后的詞語個數。例如,對於上面那個預料集,分詞之后有16個單詞,但是詞典庫的大小是12個。所以v是12哦。

分母加1可以理解,為了讓那些出現頻次為0的$C(w_{i-1}, w_{i})$算出來的概率不為0,從而避免了因為它使得整個句子的概率為0了。

可是為什么分子要加v呢,笨蛋,為了使得$\sum_{w_{i}}^{}  \frac{C(w_{i-1}, w_{i}) + 1}{C(w_{i-1})+v} $為1啊,物理意義就是,詞典庫中有v個詞匯,$w_{i-1}$后面接的單詞在這v個詞匯之中的概率要為1,也就是加起來為1。

 

add-k Smoothing

沒啥好說的,上公式:

$$P(w _{i}| w_{i-1}) = \frac{C(w_{i-1}, w_{i}) + k}{C(w_{i-1})+kv} $$

只是由加1變成了加k而已啦。add-one smoothing和add-k smoothing都是拉普拉斯平滑

 

interpolation

但是其實上面介紹的兩個平滑還是會有一個問題沒有解決

下面舉一個例子

假設我們有語料庫

in the bathroom
the kitchen
kithcen
arboretum

如果通過add-one smoothing,我們計算P(kitchen|in the)和P(arboretum|in the)的值是一樣的,因為他們的頻次都是0,所以值都是(0+1)/(1+ 7) = 1/8。但是我們直觀感覺,in the kitchen 肯定要比in the arboretum的概率要大得多,那么這種感覺是怎么來的呢?因為kitchen和the kitchen出現的次數大於arboretum和the arboretum啊笨蛋。所以我們計算tri-gram模型的概率的時候,如果能夠考慮bi-gram和unigram的概率,那么就能避免上述情況了。

公式也很簡單,如下:

$$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}$是可以變化的參數,且滿足$\lambda _{1} + \lambda _{2} + \lambda _{3} = 1$

 good-turning smoothing

老規矩,先說為什么需要發明這個算法,請看下圖哦

 

 Q1:總共18條魚,有一條鯊魚,好簡單,不就是1/18嗎

Q2:對哈,還有可能出現新魚種,但是這個該怎么算呢,又不知道新魚種的比例之類的,沒關系,對於前面18個已經釣到的魚來說,鯊魚,草魚,鰻魚都只是釣到了一次,所以是不是可以認為是新魚種呢,所以概率就是1/6

Q3:咦,既然新魚種也占了一部分,那確實不能再用1/18表示接下來釣到鯊魚的概率了呢,那么怎么表示呢,就是如下的公式:

如果對一個語料庫進行統計之后,要預測接下來出現某個單詞的概率

對於沒有出現的單詞:

$$P = \frac{N_1}{N} $$

對於出現c次的單詞:

$$P = \frac{(c+1)N_{C+1}}{N_C*N} $$

這里的$N_c$指的是在預料集中出現頻次為c的單詞的個數

實踐證明,good-turning算法得出的概率和實際情況很符合,如下圖所示:第一列r是出現頻次,第二列Nr是相應頻次的單詞個數,第三列是根據good-turning算法算出的下一次會出現的概率,第四列是在測試集中對相應頻次的單詞的個數的統計結果,與第三列很相似啊,兄嘚!!!!太激動了,仿佛是我發的論文一樣。靠,原來不是我發的

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM