當前位置:成語大全網 - 漢語詞典 - 【數學之美筆記】自然語言處理部分(1)。鍆

【數學之美筆記】自然語言處理部分(1)。鍆

數字、文字、自然語言都是信息的載體,都是為了記錄和傳播信息而產生的。

但是好像數學和語言學關系不大。很長壹段時間,數學主要用於天文學和力學。

在這壹章中,我們將回顧信息時代的發展,看看語言學是如何慢慢與數學聯系起來的。

壹開始,人類會用聲音來傳播信息。

其中信息的產生、傳遞、接收、反饋,在原理上與最先進的通信沒有區別。

因為早期人類需要傳播的信息量不多,不需要語言。

但是當人類進步到壹定程度,就需要語言了。

所以我們的祖先把語言所描述的同樣的因素,如物體、數量、動作等抽象出來,形成了今天的詞匯。

隨著人類的發展,語言和詞匯越來越多,大腦無法完全記住。這時候就需要壹種文字來記錄信息。

使用文字的好處是信息的傳遞可以跨越時間和空間,兩個人不在同壹時間同壹地點見面也可以交流信息。

那麽如何創造文字呢?最直接的方法就是模仿所要描述的物體的形狀,這就是所謂的象形文字。

在早期,象形文字的數量與壹個文明記錄的信息量有關,也就是說,象形文字的數量多,就代表這個文明的信息量大。

但是隨著信息量的增加,沒人能學會並記住那麽多單詞,所以需要總結歸類。也就是用壹個詞來表達相同相似的意思。

比如“太陽”本來就是太陽的意思,但也可以是我們說的天。

這種概念聚類和現在的自然語言處理或者機器學習的聚類非常相似,只不過在古代可能需要幾千年,而現在只需要幾個小時。

但是,當詞按照意義進行聚類時,總會出現歧義,即在特定的環境下,壹個多義詞所代表的是哪壹種意義是不清楚的。

解決這個問題,要看語境。大多數消歧都能做到,但總有壹些時候做不到。再好的語境概率模型,有時也會失效。

因為地理原因,不同的文明壹般有不同的文字和語言。當兩種文明相遇,就需要翻譯。

之所以能做到翻譯:不同的書寫體系在記錄信息上是等價的,文字只是信息的載體,而不是信息本身,甚至可以用數字來承載。

今天,我們對埃及的了解超過了瑪雅文明,這要歸功於埃及人通過文字記錄了生活中最重要的信息,這對我們具有指導意義:

文字只有在妳的頭腦中沒有容納信息的空間時才會出現,而數字只有在需要統計財產才能說清楚的時候才會出現。

早期的數字沒有書面形式,只是打響指,這就是為什麽我們使用十進制。

漸漸的,老祖宗發現十個手指頭不夠用。最簡單的方法是數腳趾頭,但這不能解決根本問題。所以他們發明了進位制,十分之壹。

那為什麽現有的文明都用十進制而不是十進制呢?

與十進制相比,十進制更不方便。比如十進制只需要背1999年的乘法表,如果是十進制就需要背19*19的圍棋棋盤。

對於不同數字的數字表示,中國和羅馬都使用了明確的單位來表示不同的數量級。

中國用十兆字節,羅馬人用I代表壹,V代表五等等。

這兩種表示都不自覺地引入了天真編碼的概念。

最有效的描述數字的方法是古印度人,他們發明了10的阿拉伯數字,比中國和羅馬的更抽象,這也標誌著數字和文字的分離。客觀上,自然語言和數學並沒有重復幾千年的軌跡。

是從象形文字到拼音文字的飛躍,因為人類在描述物體的方式上,從物體的外觀到抽象的概念,都不自覺地采用了信息的編碼。

而且在羅馬文字中,常用字短,不常用字長,意大利文字也是如此,常用字筆畫少,不常用字筆畫多,符合信息論中的最短編碼原則。

羅馬語言系統:

在紙發明之前,寫作並不容易。所以要惜墨如金,所以古代漢語的書面文字很簡潔,但是很難懂。但是,口語和現在差別不大。這和現在情報學的壹些原理類似。

這就是當前互聯網和移動互聯網的網頁設計是完全壹致的。

如果使用寬帶,頁面必須設計得比較大,而手機終端由於空中信道帶寬的限制,傳輸速度慢,分辨率低。

《聖經》記載了創世紀以來猶太人祖先的故事。《聖經》的寫作持續了許多世紀,有幾個人做到了,所以抄寫中的錯誤是不可避免的。

為了避免抄寫錯誤,猶太人發明了壹種類似於校驗碼的方法。他們把希伯來字母和壹個數字對應起來,每壹行加起來就是壹個特殊的數字,這就是校驗碼。

抄完壹頁,需要把每壹行的字加起來,看校驗碼是不是和原來的壹樣。

從字母到單詞的構詞法是單詞的編碼規則,語法是語言的編碼和解碼規則。

相比較而言,詞是有限的閉集,而語言是無限的開集。從數學上講,前者有完整的編碼和解碼規則,而語言沒有,也就是說,語言有語法規則無法覆蓋的地方,這就是所謂的“病句”

那麽是語言對還是語法對呢?有人堅持從真實語料出發,有人堅持從規則出發。

本章講述了文字、數字和語言的歷史,幫助讀者感受語言和數學的內在聯系。提到了以下概念。

上壹章我們說過,語言的目的是為了人類的交流,字母、字符、數字其實是不同的信息編碼單位。

任何語言都是壹種編碼方式,語言的語法規則就是編碼和解碼算法。比如我們通過語言來組織我們想要表達的東西,這是壹種編碼。如果對方能聽懂這種語言,就可以用這種語言的解碼方法解碼。

那麽機器能讀懂自然語言嗎?當然可以

自然語言處理的發展可以分為兩個階段:

20世紀50年代,學術界對人工智能和自然語言理解的理解是這樣的:為了讓機器完成語音識別,必須讓計算機理解自然語言。因為人類就是這樣。這種方法論叫做“飛鳥”,就是看鳥怎麽飛來造飛機。其實人們發明飛機靠的是空氣動力學,而不是仿生學。

那麽如何才能理解自然語言呢?

壹般需要:

我們可以看壹個簡單的句子

這個句子可以分為三個部分:主語、謂語和句號。我們可以進壹步分析每個部分,得到下面的解析樹。

用來分析它的語法規則叫做重寫規則。

但是這種方法很快就遇到了麻煩。從上圖可以看出,壹個簡短的句子其實可以分析出如此復雜的二維樹形結構,處理壹個真實的句子是非常麻煩的。

有兩個主要障礙:

其實從語法的角度來分析句子是不靠譜的。

上面我們提到過,基於規則的解析對於語義處理來說比較麻煩,因為自然語言中詞的多義性很難用規則來描述,而是依賴於上下文。

比如“盒子在鋼筆裏。”因為pen在這裏的意思是柵欄。整句翻譯成中文就是“盒子在圍欄裏”裏面的筆指的是筆還是圍欄不是上下文可以解決的,需要常識。

1970之後,統計語言學賦予了自然語言處理新的生命,而其中的關鍵任務就是賈尼尼和他的IBM Watson實驗室。壹開始他們用統計學的方法,把語音識別率從70%提高到90%,同時語音識別的規模也從幾百字提高到幾萬字。

基於統計的自然語言處理方法在數學模型上與交流聯系在壹起,因此在數學意義上,自然語言處理與語言交流的本意聯系在壹起。

上壹章我們壹直強調,自然語言自誕生之日起,就逐漸演變為壹種語境敏感的信息表達和傳遞方式。

所以,要讓機器處理自然語音,關鍵是要為自然語音的上下文相關特征建立壹個數學模型,也就是統計語言模型。

該模型廣泛應用於機器翻譯、語音識別、印刷體識別、拼寫糾正、漢字輸入和文檔查詢等領域。

語音識別要解決的壹個重要問題是計算機給出的文本序列能否被人類理解。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。

$ metamodel,會比較復雜。

同樣,如何估計條件概率$ 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 } } } } $。

需要做的是估計

那麽如何得到這兩個概率呢?

有了大語料庫,只要統計壹下統計文本前後${ {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的退避法差,所以很少使用。

模型訓練中的另壹個重要問題是訓練數據或語料庫的選擇。如果訓練預期與模型的應用領域脫節,模型的效果就會大打折扣。

例如,對於建立語言模型,如果應用程序是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搜索中,小粒度會比大粒度好。比如用戶查詢“清華”,而不是“清華大學”,就可以找到清華大學的主頁。

為不同的應用程序構建不同的斷字符太浪費了。分詞器可以同時支持不同層次的分詞。

即先根據基本詞對句子進行切分,再根據復合詞模型對基本詞串進行切分。