以下內(nèi)容學(xué)習(xí)、摘錄自《數(shù)學(xué)之美》

亞洲語(yǔ)言及所有非羅馬拼音式的語(yǔ)言( non-roman Languages)的輸人原本是個(gè)間題,但是近20年來(lái),以中國(guó)為代表的亞洲國(guó)家在輸入法方面有了長(zhǎng)足的進(jìn)步,現(xiàn)在這已經(jīng)不是人們使用計(jì)算機(jī)的障礙了。以中文輸入為例,過(guò)去的25年里,輸入法基本上經(jīng)歷了以自然音節(jié)編碼輸入,到偏旁筆畫(huà)拆字輸入,再回歸自然音節(jié)輸入的過(guò)程。和任何事物的發(fā)展一樣,這個(gè)螺旋式的回歸不是簡(jiǎn)單的重復(fù),而是一種升華。
輸入法中對(duì)漢字的編碼分為兩部分:對(duì)拼音的編碼(參照漢語(yǔ)拼音標(biāo)準(zhǔn)即可)和消除歧義性的編碼。對(duì)一個(gè)漢字編碼的長(zhǎng)度取決于這兩方面,只有當(dāng)這兩個(gè)編碼都縮短時(shí),漢字的輸入才能夠變快。早期的輸入法常常只注重第一部分而忽視第二部分。
由于種種原因,早期的拼音輸入法不是很成功,這就給其他輸入法的迅速崛起創(chuàng)造了條件。很快,各種中文輸入法如雨后春筍般地冒了出來(lái),總數(shù)上,有的報(bào)道說(shuō)有上千種,有的報(bào)道說(shuō)有三千多種。到20世紀(jì)90年初,各種輸入法的專利已經(jīng)有上千件,以至于一些專家認(rèn)為中國(guó)軟件行業(yè)之所以上不去,是因?yàn)榇蠹叶既プ鲚斎敕?。所有這些輸入法,除了少數(shù)對(duì)拼音輸入法的改進(jìn),大多是利用26個(gè)字母和10個(gè)數(shù)字對(duì)漢字庫(kù)(二級(jí)國(guó)標(biāo)漢字)中6300個(gè)左右的常見(jiàn)字直接編碼。大家知道,即使只用26個(gè)字母編碼,三個(gè)鍵的組合也可以表示26≈17000個(gè)漢字,因此,所有這些編碼方法都宣稱自己能兩三個(gè)鍵就輸入一個(gè)漢字,常見(jiàn)字兩個(gè)鍵,非常見(jiàn)字三個(gè)鍵也足夠了。其實(shí)這里面沒(méi)有什么學(xué)問(wèn),很容易做到。
但是,這些復(fù)雜的編碼要讓人記住幾乎是不可能的,因此這里面的藝術(shù)就是如何將編碼和漢字的偏旁、筆畫(huà)或者讀音結(jié)合,讓人記住。其實(shí),這些輸入法的編碼方法從信息論的角度來(lái)看都在同一個(gè)水平,互相也比不出什么優(yōu)劣。但是為了證明自己的方法比別人的快,大家繼續(xù)走偏,單純追求擊鍵次數(shù)少,最直接的方法就是對(duì)詞組進(jìn)行編碼。但這樣一來(lái),使用者就更無(wú)法記住了,只有這些輸入法的表演者能記住。這已經(jīng)不是技術(shù)的比賽,而是市場(chǎng)的競(jìng)爭(zhēng)。最后,王永民的五筆輸入法暫時(shí)勝出,但并不是他的編碼方法更合理,而是他比其他發(fā)明者(大多數(shù)是書(shū)呆子)更會(huì)做市場(chǎng)而已。現(xiàn)在,即使五筆輸入法也已經(jīng)沒(méi)有多少市場(chǎng)了,這一批發(fā)明人可以說(shuō)是全軍覆沒(méi)。
本書(shū)一開(kāi)頭就強(qiáng)調(diào)把語(yǔ)言和文字作為通信的編碼手段,一個(gè)重要目的是幫助思維和記憶。如果一個(gè)輸入法中斷了人們的思維過(guò)程,就和人的自然行為不相符合。認(rèn)知科學(xué)已經(jīng)證明,人一心無(wú)二用。
最終,用戶還是選擇了拼音輸入法,而且是每個(gè)漢字編碼較長(zhǎng)的全拼輸入法。雖然看上去這種方法輸入每個(gè)漢字需要多敲幾個(gè)字,但是有三個(gè)優(yōu)點(diǎn)讓它的輸入速度并不慢:第一,它不需要專門(mén)學(xué)習(xí);第二,輸入自然,不會(huì)中斷思維,也就是說(shuō)找每個(gè)鍵的時(shí)間非常短;第三,因?yàn)榫幋a長(zhǎng),有信息冗余量,容錯(cuò)性好。
如果對(duì)每一個(gè)字進(jìn)行統(tǒng)計(jì),而且不考慮上下文相關(guān)性,大致可以估算出它的值在10比特以內(nèi)。如果假定輸入法只能用26個(gè)字母輸入,那么每個(gè)字母可以代表log26≈4.7比特的信息,也就是說(shuō),輸入一個(gè)漢字平均需要敲10/4.7≈2.1次鍵。聰明的讀者也許已經(jīng)發(fā)現(xiàn),如果把漢字組成詞,再以詞為單位統(tǒng)計(jì)信息熵,那么,每個(gè)漢字的平均信息熵將會(huì)減少。這樣,平均輸人一個(gè)字可以少敲零點(diǎn)幾次鍵盤(pán)。不考慮詞的上下文相關(guān)性,以詞為單位統(tǒng)計(jì),漢字的息熵大約是8比特,也就是說(shuō),以詞為單位輸入一個(gè)漢字平均只需要8/4.7≈1.7次鍵。這就是現(xiàn)在所有輸入法都是基于詞輸入的根本原因。當(dāng)然,如果再考慮上下文的相關(guān)性,對(duì)漢語(yǔ)建立一個(gè)基于詞的統(tǒng)計(jì)言模型(見(jiàn)第3章“統(tǒng)計(jì)語(yǔ)言模型”),就可以將每個(gè)漢字的信息熵到6比特左右,這時(shí),輸入一個(gè)漢字只要敲6/4.7≈1.3次鍵。如果種輸入方法能做到這一點(diǎn),那么漢字的輸入已經(jīng)比英文快得多了
拼音轉(zhuǎn)漢字的算法和在導(dǎo)航中尋找最短路徑的算法相同,都是動(dòng)態(tài)規(guī)劃。這聽(tīng)起來(lái)多少有點(diǎn)牽強(qiáng),拼音輸入法和導(dǎo)航又有什么關(guān)系呢?其實(shí)可以將漢語(yǔ)輸入看成一個(gè)通信問(wèn)題,而輸入法則是一個(gè)將拼音串變到漢字串的轉(zhuǎn)換器。每一個(gè)拼音可以對(duì)應(yīng)多個(gè)漢字,把一個(gè)拼音串對(duì)應(yīng)的漢字從左到右連起來(lái),就是一張有向圖,它被稱為網(wǎng)格圖或者籬笆圖( Lattice),形式如下。

尋找最大概率的問(wèn)題就變成了尋找最短路徑的問(wèn)題。這樣就可以直接利用動(dòng)態(tài)規(guī)劃算法實(shí)現(xiàn)拼音輸入法中最重要的拼音到漢字的轉(zhuǎn)換問(wèn)題。數(shù)學(xué)的妙處在于它的每一個(gè)工具都具有相當(dāng)?shù)钠毡樾裕诓煌膽?yīng)用中都可以發(fā)揮很大的作用。
從理論上講,只要語(yǔ)言模型足夠大,拼音輸入法的平均擊鍵次數(shù)就可以接近信息論給的極限值。如果把輸入法放在云計(jì)算上,這是完全可以實(shí)現(xiàn)的,而在客戶端上(比如個(gè)人電腦上)這樣做不現(xiàn)實(shí)。好在客戶端有客戶端的優(yōu)勢(shì),比如可以建立個(gè)性化的語(yǔ)言模型。
我們?cè)谧畲箪啬P椭薪榻B過(guò),把各種特征綜合在一起最好的方法是采用最大熵模型。當(dāng)然,這個(gè)模型比較復(fù)雜,訓(xùn)練時(shí)間較長(zhǎng),如果為每一個(gè)人都建立這樣一個(gè)模型,成本較高。因此可以采用一個(gè)簡(jiǎn)化的模型:線性插值的模型。這種線性插值的模型比最大熵模型效果略差,但是能得到大約80%的收益。(如果最大熵模型比原來(lái)的通用模型的改進(jìn)收益是1000%的話。)順便說(shuō)一句, Google拼音輸入法的個(gè)性化語(yǔ)言模型就是這么實(shí)現(xiàn)的。
漢字的輸入過(guò)程本身就是人和計(jì)算機(jī)的通信,好的輸入法自覺(jué)地遵循通信的數(shù)學(xué)模型。當(dāng)然要做出最有效的輸入法,應(yīng)當(dāng)自覺(jué)使用信息論做指導(dǎo)。