學習NLP的第13天 語言模型

2021-10-05 16:07:11 字數 2604 閱讀 5375

在了解了詞典分詞之後,我們發現一些類似於「商品和服務」的句子並不能被準確地識別。

由此,我們設想如何能夠提高準確率?乙個簡單有效的方法就是通過人工置頂分詞結果的優先順序列表,並使用到分詞器中。

但是這樣的方法顯然需要大量的人工成本,並不現實。所以我們考慮是否可以通過製作乙個完成分詞的語料庫,通過統計所有切分方式的次數來實現優先順序列表的計算。每個句子出現頻率越高的切分方式,就擁有越高的權重。

這樣我們就引入了語言模型(language model,lm)的概念。

語言模型是語言現象的數學抽樣,簡單來說,語言模型就是計算給定的句子w出現概率p(w)的模型。

例如,我們使用何晗《自然語言處理入門》中作為案例的語料庫:

商品 和 服務

商品 和服 物美價廉

服務 和 貨幣

根據語料庫,因為樣本空間大小為3,所以僅有的3個句子平分了所有的概率,即它們的概率都是1/3,其他所有句子的概率均為0。所以語言模型p(w)如下所示:

p(商品 和 服務) = 1/3

p(商品 和服 物美價廉) = 1/3

p(服務 和 貨幣) = 1/3

這個語言模型只能用來判斷已有的這3個句子,而其他的句子因為概率都是0而無法判斷。

乙個方式就是增大樣本數量,但是句子總數無窮無盡,無法列舉,即使是大型語料庫,也只能「列舉」幾百萬個句子。因此,無論我們使用多達的語料庫,絕大部分的句子還是在語料庫之外,即它們的概率仍然為0,這個現象被稱為資料稀疏。

由此,我們考慮到句子數雖然是無限的,但是句子中包含的詞卻是有限的。於是我們嘗試從構成句子的角度去建模句子,即通過已經說出口的所有的詞語,來**下乙個詞語。

在**的過程中,我們將句子的開頭和結尾當做兩個特殊的單詞,分別記作bos(begin of sentence)和eos(end of sentence)。

在當前演算法下,句子「商品 和 服務「的概率的計算結果如下:

p(商品|bos) = 2/3

p(和|bos 商品) = 1/2

p(服務|bos 商品 和) = 1/1

p(eos|bos 商品 和 服務) = 1/1

p(商品 和 服務) = p(商品|bos) + p(和|bos 商品) + p(服務|bos 商品 和) + p(eos|bos 商品 和 服務) = 2/3 * 1/2 * 1/1 * 1/1 = 1/3

此時語言模型p(w)如下所示:

p(商品 和 服務) = 1/3

p(商品 和服 物美價廉) = 1/3

p(服務 和 貨幣) = 1/3

這樣仍然只能識別語料庫中的文字,語料庫外的文字的概率仍然為0,存在資料稀疏的問題。

為了解決這個問題,我麼引入馬爾科夫假設:給定時間線上有一串事件順序發生,假設每個事件的發生概率只取決於前乙個事件,那麼這串事件構成的因果鏈就被稱為馬爾可夫鏈。

基於此假設,每次計算只涉及兩個單詞的二元接續,此時的語言模型稱為二元語法模型。

在當前演算法下,句子「商品 和 服務「的概率的計算結果如下:

p(商品|bos) = 2/3

p(和|商品) = 1/2

p(服務|和) = 1/2

p(eos|服務) = 1/2

p(商品 和 服務) = p(商品|bos) + p(和|bos 商品) + p(服務|bos 商品 和) + p(eos|bos 商品 和 服務) = 2/3 * 1/2 * 1/2 * 1/2 = 1/12

此時語言模型p(w)如下所示:

p(商品 和 服務) = 1/12 = 2/24

p(商品 和服 物美價廉) = 1/3 = 8/24

p(服務 和 貨幣) = 1/8 = 3/24

p(商品 和 貨幣) = 1/6 = 4/24

p(服務) = 1/6 = 4/24

p(服務 和 服務) = 1/24

p(商品 和 服務 和 ...) = 1/24

p(服務 和 服務 和 ...) = 1/24

可見,當前的語言模型不但可以識別語料庫中的文字,也可以識別一部分的語料庫外的文字了,緩解了一部分資料稀疏的問題。

利用類似的思路,我們得到n元語法的定義:每個單詞的概率僅取決於該單詞之前的n-1個單詞。通常而言,實際工程中不會使用n≥4的演算法。

另外,深度學習也剔除了一種遞迴神經網路語言模型(rnn language model),理論上可以記憶無限個單詞,可以看作「無窮元語法」。

資料稀疏與平滑策略

對於n元語法模型中,n越大,資料稀疏的問題就會越嚴峻。

因此,考慮到低階n元語法更豐富,乙個自然而然的解決方案就是用低階n元語法去平滑高階n元語法。就是避免高階n元語法因為頻次突然為0,而使用低階的頻次去平滑它。

即高階n元語法和低階n元語法同時佔一定的比例,當高階n元語法為0時,低階n元語法不為0。

此時,新的二元語法的概率為:

p(wa|wb) = n * p(wa|wb) + (1-n) * p(wa)

其中,n∈(0,1),為常數平滑因子。

python學習第13天

讀取 reader csv.reader 開啟的file物件 reader為可迭代物件,可以用for迴圈遍歷他 讀取到字典表 reader csv.dictreader f reader也是可迭代物件,可以用for迴圈遍歷他 寫入 writer csv.write f writer.writerow...

學習NLP的第21天 短語提取

將基於資訊熵和互資訊的新詞提取方法 第20天 中的字元替換為單詞,即可將其轉換為短語識別的方法。下面我們仍然使用神超直播間的彈幕的8個小時的時間切片作為例子,使用hanlp中的extractphrase方法實現。from pyhanlp import from utils import file d...

NLP系列學習 常用的語言平滑模型

語言模型常見的平滑演算法就那幾種,一般的教程都不提分幾種的模式 分類。不過在mit的nlp課程ppt中總結說有三種模式 discounting,interpolationg,back off 有關這三種模式的描述可以見其ppt discounting類包括 add one smoothing 加法平...