日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

NLP基础:n-gram语言模型和神经网络语言模型

發(fā)布時間:2023/12/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NLP基础:n-gram语言模型和神经网络语言模型 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 語言模型的計算
    • n-gram 語言模型
    • n-gram 平滑技術
  • 神經(jīng)網(wǎng)絡語言模型(NNLM)
    • 基本思想
    • 神經(jīng)網(wǎng)絡語言模型小結
  • 語言模型評價指標—困惑度

語言模型是自然語言處理中的重要技術,假設一段長度為 TTT的文本中的詞依次為 w1,w2,…,wTw_1, w_2, \ldots, w_Tw1?,w2?,,wT?,語言模型將計算該序列的概率:
P(w1,w2,…,wT).P(w_1, w_2, \ldots, w_T). P(w1?,w2?,,wT?).
語言模型有助于提升自然語言處理任務的效果,例如在語音識別任務中,給定一段“廚房里食油用完了”的語音,有可能會輸出“廚房里食油用完了”和“廚房里石油用完了”這兩個讀音完全一樣的文本序列。合適的語言模型能夠判斷出前者的概率大于后者的概率,于是可以得到正確的“廚房里食油用完了”這個文本序列。

語言模型的計算

我們可以把文本看作一段離散的時間序列w1,w2,…,wTw_1, w_2, \ldots, w_Tw1?,w2?,,wT?,假設每個詞是按時間先后順序依次生成的,那么在離散的時間序列中,wtw_twt?1≤t≤T1 \leq t \leq T1tT)可看作在時間步(time step)ttt的輸出或標簽。于是,對于一個句子而言,有:
P(w1,w2,…,wT)=∏t=1TP(wt∣w1,…,wt?1).P(w_1, w_2, \ldots, w_T) = \prod_{t=1}^T P(w_t \mid w_1, \ldots, w_{t-1}). P(w1?,w2?,,wT?)=t=1T?P(wt?w1?,,wt?1?).
例如,一段含有4個詞的文本序列的概率:

P(w1,w2,w3,w4)=P(w1)P(w2∣w1)P(w3∣w1,w2)P(w4∣w1,w2,w3).P(w_1, w_2, w_3, w_4) = P(w_1) P(w_2 \mid w_1) P(w_3 \mid w_1, w_2) P(w_4 \mid w_1, w_2, w_3). P(w1?,w2?,w3?,w4?)=P(w1?)P(w2?w1?)P(w3?w1?,w2?)P(w4?w1?,w2?,w3?).

n-gram 語言模型

如果一個句子特別長,那么計算和存儲多個詞共同出現(xiàn)的概率的復雜度會呈指數(shù)級增加。

由此引入 n-gram 語言模型,n-gram 是一種基于統(tǒng)計模型的算法。它的基本思想是將文本里面的內(nèi)容按照字節(jié)進行大小為n的滑動窗口操作,形成了長度為n的字節(jié)片段序列,每一個字節(jié)片段稱為gram。

n-gram 模型基于馬爾可夫假設,第n個詞的出現(xiàn)只與前面 n-1 個詞相關,而與其它任何詞都不相關,整句的概率就是各個詞出現(xiàn)概率的乘積:
P(w1,w2,…,wT)≈∏t=1TP(wt∣wt?(n?1),…,wt?1).P(w_1, w_2, \ldots, w_T) \approx \prod_{t=1}^T P(w_t \mid w_{t-(n-1)}, \ldots, w_{t-1}) . P(w1?,w2?,,wT?)t=1T?P(wt?wt?(n?1)?,,wt?1?).
這些概率可以通過直接從語料中統(tǒng)計 n 個詞同時出現(xiàn)的次數(shù)得到。常用的是 n=2 的Bi-Gram和 n=3 的Tri-Gram。

例如,長度為4的序列w1,w2,w3,w4w_1, w_2, w_3, w_4w1?,w2?,w3?,w4?在Bi-Gram和Tri-Gram中的概率分別為:

P(w1,w2,w3,w4)=P(w1)P(w2∣w1)P(w3∣w2)P(w4∣w3),P(w1,w2,w3,w4)=P(w1)P(w2∣w1)P(w3∣w1,w2)P(w4∣w2,w3).\begin{aligned} P(w_1, w_2, w_3, w_4) &= P(w_1) P(w_2 \mid w_1) P(w_3 \mid w_2) P(w_4 \mid w_3) ,\\ P(w_1, w_2, w_3, w_4) &= P(w_1) P(w_2 \mid w_1) P(w_3 \mid w_1, w_2) P(w_4 \mid w_2, w_3) . \end{aligned} P(w1?,w2?,w3?,w4?)P(w1?,w2?,w3?,w4?)?=P(w1?)P(w2?w1?)P(w3?w2?)P(w4?w3?),=P(w1?)P(w2?w1?)P(w3?w1?,w2?)P(w4?w2?,w3?).?

nnn較小時,nnn元語法往往并不準確。然而,當nnn較大時,nnn元語法需要計算并存儲大量的詞頻和多詞相鄰頻率。

對于Bi-Gram而言,有:
p(wt∣wt?1)=c(wt?1,wt)∑wtc(wt?1,wt)p(w_t|w_{t-1}) = \frac{c(w_{t-1},w_t)}{\sum_{w_t}c(w_{t-1},w_t)} p(wt?wt?1?)=wt??c(wt?1?,wt?)c(wt?1?,wt?)?
t=1t=1t=1時,為了使上式有意義,在句子的開頭加上<BOS><BOS><BOS>,即對于所有的句子w0=<BOS>w_0 = <BOS>w0?=<BOS>。同時,給每個句子加上一個結束符<EOS><EOS><EOS>,加上結束符的目的是使得所有的字符串的概率之和∑sp(s)=1\sum_sp(s)=1s?p(s)=1

舉個例子,我們有下面的語料數(shù)據(jù):

用計算最大似然估計的方法計算概率:
p(wi∣wi?1)=c(wi?1wi)∑wic(wi?1wi)p(w_i|w_{i-1}) = \frac{c(w_{i-1}w_i)}{\sum_{w_i}c(w_{i-1}w_i)} p(wi?wi?1?)=wi??c(wi?1?wi?)c(wi?1?wi?)?
其中,函數(shù) c 表示個數(shù)統(tǒng)計。

用計算最大似然估計的方法計算概率p(BROWREADABOOK)p(BROW \quad \quad READ \quad A \quad BOOK)p(BROWREADABOOK),具體過程如下:
P(BROW∣<BOS>)=c(<BOS>BROW)∑wc(<BOS>w)=13P(READ∣BROW)=c(BROWREAD)∑wc(BROWw)=11P(A∣READ)=c(READA)∑wc(READw)=23P(BOOK∣A)=c(ABOOK)∑wc(Aw)=12P(<EOS>∣BOOK)=c(BOOK<EOS>)∑wc(BOOKw)=12\begin{aligned} &P(BROW |<BOS>) = \frac{c(<BOS>\quad BROW )}{\sum_{w}c(<BOS> \quad w)} = \frac{1}{3} \\ & P(READ |BROW) = \frac{c(BROW \quad READ )}{\sum_{w}c(BROW \quad w)} = \frac{1}{1} \\ & P(A |READ) = \frac{c(READ \quad A )}{\sum_{w}c(READ \quad w)} = \frac{2}{3} \\ & P(BOOK |A) = \frac{c( A \quad BOOK )}{\sum_{w}c(A \quad w)} = \frac{1}{2} \\ & P(<EOS>|BOOK ) = \frac{c( BOOK \quad <EOS> )}{\sum_{w}c(BOOK \quad w)} = \frac{1}{2} \end{aligned} ?P(BROW<BOS>)=w?c(<BOS>w)c(<BOS>BROW)?=31?P(READBROW)=w?c(BROWw)c(BROWREAD)?=11?P(AREAD)=w?c(READw)c(READA)?=32?P(BOOKA)=w?c(Aw)c(ABOOK)?=21?P(<EOS>BOOK)=w?c(BOOKw)c(BOOK<EOS>)?=21??
所以:
p(BROWREADABOOK)=P(BROW∣<BOS>)×P(READ∣BROW)×P(A∣READ)×P(BOOK∣A)×P(<EOS>∣BOOK)=13×1×23×12×12≈0.06\begin{aligned} &p(BROW \; READ\; A\; BOOK)\\ = &P(BROW |<BOS>)\times P(READ |BROW) \times P(A |READ)\\&\times P(BOOK |A)\times P(<EOS>|BOOK ) \\ =&\frac{1}{3} \times 1 \times\frac{2}{3}\times\frac{1}{2}\times\frac{1}{2}\\ \approx & \;0.06 \end{aligned} ==?p(BROWREADABOOK)P(BROW<BOS>)×P(READBROW)×P(AREAD)×P(BOOKA)×P(<EOS>BOOK)31?×1×32?×21?×21?0.06?

n-gram 平滑技術

在自然語言處理處理中,難免會遇到未登錄詞(OOV),即測試集中出現(xiàn)了訓練集中未出現(xiàn)過的詞,或者未出現(xiàn)過的子序列,導致語言模型計算出的概率為0。使用平滑技術的目的就是在條件概率為0時,防止整個句子的概率為0,人為按一定規(guī)則,給0條件概率一定的值。常見的平滑方法有:

  • 加法平滑方法
  • 古德-圖靈(Good-Turing)估計法
  • Katz平滑方法
  • Jelinek-Mercer平滑方法
  • Witten-Bell平滑方法
  • 絕對減值法

具體內(nèi)容參考宗成慶老師的《統(tǒng)計自然語言處理 第二版》

神經(jīng)網(wǎng)絡語言模型(NNLM)

基本思想

神經(jīng)網(wǎng)絡語言模型先給每個詞賦予一個詞向量,利用神經(jīng)網(wǎng)絡去建模當前詞出現(xiàn)的概率與其前 n-1 個詞之間的約束關系,即通過神經(jīng)網(wǎng)絡去學習詞的向量表示。結構如下圖所示:

具體而言,假設當前詞出現(xiàn)的概率只依賴于前n?1n-1n?1個詞。即:
p(wt∣w1…wt?1)=p(wt∣wt?n+1…wt?1)p(w_t|w_1\ldots w_{t-1}) = p(w_t|w_{t-n+1}\ldots w_{t-1}) p(wt?w1?wt?1?)=p(wt?wt?n+1?wt?1?)
假設VVV表示所有N個詞的集合,wt∈Vw_t \in Vwt?V,存在一個∣V∣×m|V|\times mV×m的參數(shù)矩陣C,矩陣的每一行代表每一個詞的特征向量,m代表每個特征向量由m個維度。C(wt)C(w_t)C(wt?)表示第 t 個詞wtw_twt?的對應的特征向量。

如上圖所示,將句子的前 n-1 個詞特征對應的向量C(wt?n+1)…C(wt?1)C(w_{t-n+1})\ldots C(w_{t-1})C(wt?n+1?)C(wt?1?)作為神經(jīng)網(wǎng)絡的輸入,輸出當前的詞是wtw_twt?的概率。計算過程如下:
y=Wx+Utanh(d+Hx)+by = W x + U tanh(d+Hx) + b y=Wx+Utanh(d+Hx)+b
其中:
x=(C(wt?1),C(wt?2),…,C(wt?n+1))x = (C(w_{t-1}),C(w_{t-2}),\ldots ,C(w_{t-n+1})) x=(C(wt?1?),C(wt?2?),,C(wt?n+1?))
經(jīng)過上式得到yw=(yw,1,yw,2,…,yw,N)Ty_w = (y_{w,1},y_{w,2},\ldots,y_{w,N})^Tyw?=(yw,1?,yw,2?,,yw,N?)T ,其中,將ywy_wyw?進行softmax后,yw,iy_{w,i}yw,i? 表示當上下文為context(w)context(w)context(w)時,下一個詞恰好是詞典中第iii個詞的概率,即:
P(w∣context(w))=eyw,iw∑i=1Neyw,iP(w|context(w)) = \frac{e^{y_{w,i_w}}}{\sum_{i=1}^N e^{y_{w,i}}} P(wcontext(w))=i=1N?eyw,i?eyw,iw???
其中,iwi_wiw?表示詞在詞典中的索引。

計算集中在隱藏層和輸出層之間的矩陣向量運算,以及輸出層上的softmax歸一化運算。該模型的參數(shù)是:
θ=(b,d,W,U,C)\theta = (b,d,W,U,C) θ=(b,d,W,U,C)
損失函數(shù)是:
L=?1T∑tlog?p^(wt=i∣wt?n+1…wt?1)+R(θ)L = -\frac{1}{T} \sum_t \log \hat p(w_t=i|w_{t-n+1}\ldots w_{t-1}) + R(\theta) L=?T1?t?logp^?(wt?=iwt?n+1?wt?1?)+R(θ)
$ R(\theta)$是正則化項,用于控制過擬合。

有了損失函數(shù),我們可以用梯度下降法,在給定學習率η\etaη的條件下,進行參數(shù)更新:
θ←θ?η?L?θ\theta \leftarrow \theta - \eta \frac{\partial L}{\partial \theta} θθ?η?θ?L?
直至收斂,得到一組最優(yōu)參數(shù)。

神經(jīng)網(wǎng)絡語言模型小結

只要詞的表征足夠好,就能具有比 n-gram 更好的泛化能力,從而很大程度地降低了數(shù)據(jù)稀疏帶來的問題。不足之處是僅包含了有限的前文信息。

優(yōu)點:(1) 長距離依賴,具有更強的約束性;(2) 避免了數(shù)據(jù)稀疏所帶來的OOV問題;(3) 好的詞表征能夠提高模型泛化能力。

缺點:(1) 模型訓練時間長;(2) 可解釋性較差。

神經(jīng)網(wǎng)絡語言模型與 n-gram 模型相比,

1,相似的詞具有相似的向量。對 n-gram 模型而言,如果語料中S1=“A dog is running in the room”出現(xiàn)了10000次,而S2=“A cat is running in the room”只出現(xiàn)了1次,p(S1)肯定會遠大于p(S2)。而實際上,dog 和 cat 是相似的存在,神經(jīng)網(wǎng)絡語言模型所得到的詞向量距離會比較近,表示兩個詞十分相似。

2,用向量表示的詞自帶平滑化功能(由p(w∣Context(w))∈(0,1)p(w|Context(w))∈(0,1)p(w∣Context(w))∈(0,1)不會為零),不再需要像 n-gram 那樣進行額外處理了。

語言模型評價指標—困惑度

通常用困惑度作為語言模型的評價指標。

設存在文本序列W=(w1,w2,…,wN)W=(w_1,w_2,\ldots,w_N)W=(w1?,w2?,,wN?),則每個詞的平均交叉熵為:
H(W)=?1Nlog?P(w1,w2,…,wN)H(W) = -\frac{1}{N}\log P(w_1,w_2,\ldots,w_N) H(W)=?N1?logP(w1?,w2?,,wN?)
顯然,交叉熵越小,得到的概率模型越接近真實分布,進一步我們定義困惑度為:
Preplexity(W)=2H(W)=1P(w1,w2,…,wN)NPreplexity(W) = 2^{H(W)} = \sqrt[N]{\frac{1}{ P(w_1,w_2,\ldots,w_N)}} Preplexity(W)=2H(W)=NP(w1?,w2?,,wN?)1??
由公式可知:困惑度越小,說明所建模的語言模型越精確。

參考文章

  • A Neural Probabilistic Language Model

  • 深入理解語言模型 Language Model

  • 6.1語言模型

  • 語言模型基礎

  • 總結

    以上是生活随笔為你收集整理的NLP基础:n-gram语言模型和神经网络语言模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。