但似乎數學和語言學關系不大。在很長壹段時間裏,數學主要用於天文學和力學。
在這壹章中,我們將回顧信息時代的發展,看看語言學是如何慢慢與數學聯系在壹起的。
壹開始,人類會用聲音來傳播信息。
信息的產生、傳輸、接收和反饋在原理上與最先進的通信沒有什麽不同。
因為早期人類需要傳播的信息量並不多,所以不需要語言。
但是當人類進步到壹定程度時,就需要語言了。
因此,我們的祖先抽象出語言所描述的相同因素,如對象、數量和動作,並形成了今天的詞匯。
隨著人類的發展,有太多的語言和單詞,大腦無法完全記住它們。這時候就需要壹種文字來記錄信息。
使用文字的好處是信息的傳遞可以跨越時間和空間,兩個人不需要在同壹時間和地點見面就可以交流信息。
那麽如何創造單詞呢?最直接的方法是模仿要描述的物體的形狀,這就是所謂的象形文字。
在早期,象形文字的數量與壹個文明記錄的信息量有關,也就是說,有許多象形文字,這代表了這個文明的大量信息。
但是隨著信息的增加,沒有人能學會和記住這麽多單詞,所以需要總結和分類。也就是用壹個詞來表達相同和相似的意思。
例如,“太陽”原本是指太陽,但它也可以是我們談論的日子。
這種概念聚類與現在自然語言處理或機器學習的聚類非常相似,只不過在古代可能需要幾千年的時間,而現在只需要幾個小時。
然而,當單詞根據含義進行聚類時,總會出現歧義,即不清楚壹個多義詞在特定環境中代表哪個含義。
要解決這個問題,要看語境。大多數消歧都能做到,但總有壹些時候做不到。無論上下文的概率模型有多好,它有時都會失敗。
由於地理原因,不同的文明壹般有不同的文字和語言。當兩種文明相遇時,就需要翻譯。
之所以能夠實現翻譯:不同的書寫系統在記錄信息方面是等效的,文字只是信息的載體,而不是信息本身,甚至可以用數字來承載。
今天,我們對埃及的了解超過了瑪雅文明,這要歸功於埃及人通過文字記錄了生活中最重要的信息,這對我們具有指導意義:
只有當妳的頭腦中沒有空間容納信息時,單詞才會出現,而數字只有在需要清點財產以使其清晰時才會出現。
早期的數字沒有書面形式,只是打響指,這就是為什麽我們使用十進制。
漸漸地,祖先們發現十根手指不夠用了。最簡單的方法是數腳趾,但這不能解決根本問題。所以他們發明了進位制,也就是十分之壹。
那為什麽現存的文明使用十進制而不是十進制呢?
與十進制相比,十進制更不方便。比如十進制只需要背1999年的乘法表,如果是十進制就需要背19*19的圍棋棋盤。
對於不同數字的數字表示,中國和羅馬都使用明確的單位來表示不同的數量級。
中國用十兆字節,羅馬人用I代表壹兆字節,用V代表五兆字節等等。
這兩種表示都不自覺地引入了簡單編碼的概念。
最有效的描述數字的方法是古代印度人,他們發明了65,438+00個阿拉伯數字,比中國和羅馬的數字更抽象,這也標誌著數字和字符的分離。客觀上,自然語言和數學幾千年來沒有重復的軌跡。
它是從象形文字到拼音文字的飛躍,因為人類在描述物體的方式上無意識地采用了信息的編碼,從物體的外觀到抽象的概念。
而且在羅馬文字中,常用字短,生僻字長,意大利文字也是如此,常用字筆畫少,生僻字筆畫多,符合信息論中的最短編碼原則。
羅馬語言系統:
在紙發明之前,寫字並不容易。所以要惜墨如金,所以古代漢語的書面文字很簡潔,但很難理解。然而,英語口語與現在沒有太大區別。這類似於現在信息科學的壹些原理。
這就是當前互聯網和移動互聯網的網頁設計是完全壹致的。
如果使用寬帶,頁面必須設計得相對較大,而手機終端由於空中信道帶寬的限制,傳輸速度慢,分辨率低。
《聖經》記載了自創世紀以來猶太人祖先的故事。《聖經》的寫作持續了許多世紀,有幾個人做到了這壹點,因此抄寫中的錯誤是不可避免的。
為了避免抄寫錯誤,猶太人發明了壹種類似於校驗碼的方法。他們把希伯來字母和壹個數字對應起來,每壹行加起來就是壹個特殊的數字,這就是校驗碼。
復印壹頁後,妳需要把每壹行的單詞加起來,看看校驗碼是否與原件相同。
從字母到單詞的構詞法是單詞的編碼規則,語法是語言的編碼和解碼規則。
相對而言,詞是有限的閉集,而語言是無限的開集。從數學上講,前者有完整的編碼和解碼規則,而語言沒有,也就是說,語言有語法規則無法覆蓋的地方,這就是所謂的“病句”
那麽是語言正確還是語法正確呢?有人堅持從真實語料出發,有人堅持從規則出發。
本章講述了字符、數字和語言的歷史,以幫助讀者感受語言和數學之間的內在關系。提到了以下概念。
上壹章我們說了語言的目的是為了人類交流,字母、字符和數字實際上是不同的信息編碼單位。
任何語言都是壹種編碼方法,語言的語法規則就是編碼和解碼算法。例如,我們通過語言來組織我們想要表達的內容,這是壹種編碼。如果對方能聽懂這種語言,就可以用這種語言的解碼方法解碼。
那麽機器能讀懂自然語言嗎?當然可以
自然語言處理的發展可以分為兩個階段:
20世紀50年代,學術界對人工智能和自然語言理解的理解是這樣的:為了讓機器完成語音識別,必須讓計算機理解自然語言。因為人類就是這麽做的。這種方法論被稱為“飛禽”,即觀察鳥類如何飛行來制造飛機。事實上,人們發明飛機靠的是空氣動力學,而不是仿生學。
那麽我們如何才能理解自然語言呢?
通常需要:
我們可以看壹個簡單的句子
這個句子可以分為三個部分:主語、謂語和句號。我們可以進壹步分析每個部分,得到下面的解析樹。
用於分析它的語法規則稱為重寫規則。
但這種方法很快就遇到了麻煩。從上圖可以看出,壹個簡短的句子實際上可以分析如此復雜的二維樹結構,處理真實的句子非常麻煩。
有兩個主要障礙:
事實上,從語法的角度分析句子並不可靠。
正如我們上面提到的,基於規則的解析對於語義處理來說很麻煩,因為自然語言中單詞的多義性很難用規則來描述,而是取決於上下文。
例如,“盒子在鋼筆裏。”因為pen在這裏的意思是柵欄。整句翻譯成中文就是“the box is in the fence”裏面的pen指的是鋼筆還是柵欄無法通過上下文解決,需要常識。
1970之後,統計語言學賦予了自然語言處理新的生命,其中的關鍵任務是賈尼尼和他的IBM Watson實驗室。壹開始,他們使用統計方法將語音識別率從70%提高到90%,與此同時,語音識別的規模也從數百個單詞增加到數萬個單詞。
基於統計的自然語言處理方法與數學模型中的交流聯系在壹起,因此在數學意義上,自然語言處理與語言交流的初衷聯系在壹起。
在上壹章中,我們壹直強調自然語言自誕生以來已逐漸演變為壹種上下文敏感的信息表達和傳遞方式。
因此,為了讓機器處理自然語音,關鍵是為自然語音的上下文相關特征建立數學模型,這就是統計語言模型。
該模型廣泛應用於機器翻譯、語音識別、印刷體識別、拼寫校正、漢字輸入和文檔查詢等領域。
語音識別要解決的壹個重要問題是計算機給出的文本序列能否被人類理解。20世紀70年代以前,人們使用語義分析來解決它。
Jarek從另壹個角度看待這個問題,壹個簡單的統計模型就可以解決這個問題。
也就是說,壹個句子是否合理取決於它的可能性。
例如,語句流暢的概率是10 {-20}$,而語句混亂的概率是10 {-70}$,因此語句流暢的可能性更大。
假設$S$表示壹個有意義的句子,該句子由壹系列單詞$ {\ omega _ 1}、{\ omega _ 2}、\ cdots、{\ omega _ n} $按特定順序組成,其中$n$是句子的長度。現在我們需要知道這句話的概率。
$ $ P \ left(S \ right)= P \ left({ { w _ 1 },{w_2},\cdots,{ w _ n } } \ right)$ $
使用條件概率公式,序列$S$的出現概率等於每個單詞的出現概率相乘。
$ $ P \ left({ { w _ 1 },{w_2},\cdots,{ w _ n } } \ right)= P \ left({ { w _ 1 } } \ right)P \ left({ {w_2} | { w _ 1 } } \ right)\cdots P \ left({ { w _ n } | { w _ 1 },{ w _ 2 },\ cdots,{w_{n
問題是,如何計算這個條件概率?
20世紀初,俄羅斯數學家馬爾科夫給出了壹個有效的方法。當這種情況發生時,假設任何單詞$w_i$的概率只與前壹個單詞$w_{i-1}$相關,這就是所謂的馬爾可夫假設。
所以公式又變成了
$ $ P \ left({ { w _ 1 },{w_2},\cdots,{ w _ n } } \ right)= P \ left({ { w _ 1 } } \ right)P \ left({ { w _ 2 } | { w _ 1 } } \ right)\ cdots P \ left({ { w _ n } | { w _ { n-1 } } \ right)$ $
這被稱為二元模型。
如果壹個單詞由第壹個$N-1$單詞確定,則對應的模型稱為$N。
$元模型,會更復雜。
同樣,如何估計條件概率$ p \ left({ { w _ I } | { w _ { I-1 } } \ right)$,可以先看看它的定義。
$ $ P \ left({ { w _ I } | { w _ { I-1 } } } \ right)= \ frac { { P \ left({ { w _ { I-1 } },{ w _ I } } \ right)} } { { P \ left({ { w _ { I-1 } } } \ right)} } $ $
需要做的是估計
那麽如何得到這兩個概率呢?
對於壹個大型語料庫,只需計算$ {{w _ {I-1}}和{w _ I}} $在統計文本{w _ {I-1}}前後相鄰出現的次數。然後將其除以語料庫的大小#,這樣就可以使用頻率來估計概率。
根據大數定理,只要統計量足夠,相對頻率就等於概率。
$ $ P \ left({ { w _ I } | { w _ { I-1 } } } \ right)= \ frac { { # \ left({ { w _ { I-1 } },{ w _ I } } \ right)} } { { # \ left({ { w _ { I-1 } } })} } $ $
如此復雜的模型可以解決語音識別和機器翻譯的復雜問題,真是令人驚嘆。
二元模型最大的特點是每個單詞只與前壹個單詞相關,過於簡化。更壹般地說,壹個單詞與前面的幾個單詞相關。
因此,$N$元模型意味著當前單詞$w_i$僅依賴於第壹個$N-1$單詞,這是N-1階的馬爾可夫假設。
實際上,三元模型的使用越來越多,因此$N=3$,而高階模型的使用較少,因為
要使用語言模型,我們需要知道模型中的所有條件概率,我們稱之為模型參數。
通過對語料的統計,得到這些參數的過程稱為模型訓練。
我們之前說過,我們只需要統計兩個相鄰字符同時出現的次數和${w_{i-1}}$單獨出現的次數,然後計算比率。
但是,有壹種情況我們沒有考慮到。如果相鄰的兩個單詞沒有同時出現,即$ # \ left({ { w _ { I-1 } },{ w _ I } } \ right)= 0 $,是否意味著概率為0?
當然不是。這涉及到統計數據的可靠性。
在數理統計中,我們之所以敢用數據來預測概率,是因為大數定理需要足夠多的觀測值。也就是說,如果樣本太小,用次數來預測概率肯定是不可靠的。
那麽如何正確訓練壹個語言模型呢?
我們來具體說說統計詞典中每個詞出現的概率。
假設有$N_r$個單詞在語料庫中出現$r$次,$N$表示語料庫的大小。
$ $ n = \ sum \ limits _ { r = 1}^\infty { r { n _ r } } $ $
也就是說,每個單詞中$r$單詞的數量乘以它們出現的次數。
當$r$很小時,這意味著出現的次數不夠多,因此在計算它們的概率時,我們應該使用壹個較小的數字,例如$d_r$
$ $ { d _ r } = \ left({ r+1 } \ right)\ frac { { { N _ { r+1 } } } { { { N _ r } } $ $
和
$ $ \ sum \ limits _ r { { d _ r } { N _ r } } = N $ $
壹般來說,出現1次的詞比出現兩次的多,同樣的詞出現兩次的比出現三次的多。
也就是說,出現頻率$r$越大,單詞$N_r$的數量就越少,因此$ { N _ { R+1 } }《{ N _ R } $,可以看出$ { d _ R }《R $,這種估計是因為$d_r$是我們要尋找的小於$r$的數字,當它只出現0次時,$ { d _ 0 } & gt0$
這樣壹來,
對於二元模型,
在…之中
這種平滑方法最早由IBM的Katz提出,因此被稱為Katz back-off方法。
另壹種方法是刪除差分法,即通過低階模型和高階模型的線性插值進行平滑,但由於其效果比Katz的back-off差,因此很少使用。
模型訓練中的另壹個重要問題是訓練數據或語料庫的選擇。如果訓練期望與模型的應用領域脫節,模型的效果就會大打折扣。
例如,對於構建語言模型來說,如果應用程序是web搜索,其訓練數據應該是用戶輸入的雜亂的web數據和搜索字符串,而不是傳統和標準化的新聞稿,即使前者夾雜著噪音和錯誤。由於訓練數據與應用程序壹致,因此搜索質量更好。
通常,訓練數據越多越好。由於許多參數,高階模型需要更多的訓練數據。不幸的是,並非所有應用程序都可以擁有足夠的訓練數據,例如用於機器翻譯的雙語語料庫。這個時候追求高階大模型是沒有意義的。
如果訓練數據與應用數據壹致,並且訓練量足夠大,則訓練預期的噪聲水平也會對模型產生影響。所以訓練前需要進行預處理,有很多噪音是可以經常發現的,比如制表符。
對於西方拼音來說,單詞之間有明確的分界。但是對於中文來說,單詞之間沒有明確的分隔符。所以要先分句。
想到的最簡單的方法是在字典中查找它,即從左到右掃描它,並在遇到單詞時在字典中識別它們。
但是如果遇到復雜的問題,這種方法就行不通了。例如,當涉及到模糊分割時。就像“發展中國家”壹樣,正確的劃分是“發展-中國-國家”,而從左到右查字典會分為“發展-中國-家”
同樣,我們可以使用統計語言模型來解決分詞歧義問題。
假設有幾種方法來劃分壹個句子$S$:
$$\begin{array}{l}
{A_1},{A_2},{A_3},\cdots,{A_k}\
{B_1},{B_2},{B_3},\cdots,{B_m}\
{C_1},{C_2},{C_3},\cdots,{C_n}
\end{array}$$
最好的分詞方法是,分詞後,這句話出現的概率最高。
當然,如果我們列舉所有的分詞方法,並計算每種可能性下的句子概率,那麽計算量相當大。
它可以被視為壹個動態規劃問題,維特比算法可以用來快速找到最佳分詞。
語言學家對單詞有不同的定義,比如“北京大學”。有人覺得是壹個字,有人覺得是兩個字。折中的方法是先把它當作壹個四字詞,然後進壹步找到細分詞“北京”和“大學”
人工分詞不壹致的主要原因在於人們對詞的粒度的理解。
以“清華大學”為例。有人認為它是壹個整體,有人認為“清華”是“大學”的壹個擺設。這裏不需要強調誰是正確的,但我們應該知道,在不同的應用程序中,會出現粒度優於另壹個的情況。
例如在機器翻譯中,粒度大時翻譯效果好。例如,如果將聯想拆分為兩部分,則很難將其翻譯為聯想。然而,在web搜索中,小粒度將優於大粒度。例如,用戶在查詢“清華”而不是“清華大學”時,可以找到清華大學的主頁。
為不同的應用程序構建不同的斷字符太浪費了。分詞器可以同時支持不同層次的分詞。
也就是說,首先根據基本詞對句子進行切分,然後根據復合詞模型對基本詞串進行切分。