參考speech and language processing[1]
假設人類的語言是上帝擲骰子生成的, 那這個骰子應該是什麼樣的呢? 語言模型, 就是從概率的視角, 來描述這個骰子. 具體一點, 給定一句話或者詞序列, 語言模型負責給出其出現的概率. 而其中最簡單的一種語言模型就是n-gram模型.
n-gram就是n個連續的詞, "我"是1-gram (或者unigram), "我們" 就是2-gram (或者bigram). 平時使用時, n-gram模型會簡略成n-gram. 所以n-gram有兩個意思, 一說是n個連續的詞, 也指接下來要介紹的n-gram語言模型.
長度為n的一句話出現的概率可以表示為p(w
1, w
2,..., w
n), 或者p(w
1n). 如果直接估計這個概率, 需要統計兩個東西, (1) 這句話出現的次數, (2) 所有長度為n的詞序列的個數. 想想看, 長度為n的一句話有多少種不同的情況, 當n比較大的時候呢? 而且隨著序列變長, 0概率出現的情況會越來越多. 所以, 這種估計方法工作量大且不太可行. 如果通過概率論的鏈式法則對p(w1, w2,..., wn)進行分解, 就會得到:
額.....好像還是需要統計較長序列的出現次數. 例如最後一項p(wn | w
1n-1), 已知前n-1個詞第n個詞的概率, 還是會有上面說到的問題. 咋辦呢? n-gram這個時候出場了. 以2-gram或者bigram為例, 他將上述公式中的條件概率進行的簡化, 即乙個詞只與它前面乙個詞相關, 於是p(wn | w
1n-1)≈p(wn | wn-1
). 同理, 對於3-gram或者trigram, 乙個詞只與它之前兩個詞相關, 即p(wn
| w1n-1)≈p(wn
| wn-1,
wn-2
). 於是上述p(w
1n) ≈ π p(wk
|wk-1
). 我們只
要估計p(wk
|wk-1
)就可以了.
這的c(.)代表.出現的次數. 擴充套件到n-gram, 概率的計算公式為:
以bigram為例, 假設我們有如下這樣的語料:
我們可以計算出各個bigram的概率為:
於是p(i am sam
) = p(i | ) * p(am | i) * p(sam | am) * p( | sam) = 0.67 * 0.67 * 0.5 * 0.5 = 0.11225. 實際應用中, 為了防止多個小於0的數相乘引發的下溢, 常對概率取對數. 於是, 概率相稱變成對數概率的相加, 如需獲得真正的概率值, 則將對數概率作為自然對數e的指數即可計算得出.
[1] daniel jurafsky and james h martin. speech and language processing:
an introduction to natural language processing, computational linguistics, and speech recognition. tracy dunkelberger, 2008.
C語言讀書筆記
1.c語言中一共有32個關鍵字 分別是 auto int double long char short float unsigned signed sizeof extern static goto if else struct typedef union enum switch case brea...
讀書筆記 之五
筆者的話 接觸硬體較少,很多術語都是字面翻譯,讀者請見諒.我盡量帶上英文原詞,避免歧義.2.2 磁碟驅動器元件 磁碟驅動器使用快速移動的臂來在大唱片一樣的覆蓋著小磁粒的碟片上讀寫資料的.資料從磁碟片上通過r w頭傳輸到計算機中.多個碟片,讀寫頭和控制器被組合在一起,通常這被稱為是硬碟驅動器 hard...
讀書筆記之TCP UDP
網際網路,更一般的是tcp ip網路為應用程式提供兩個運輸層協議,即udp和tcp。當乙個軟體開發者為英特網建立乙個新的應用時,首先要做出的決定就是,選擇使用tcp協議還是udp協議。每個協議為呼叫他們的應用程式提供了不同的服務集合。tcp服務模型包括面向連線服務和可靠資料傳輸服務。當某個應用程式呼...