輸入法,尤其是拼音輸入法,解決的就是一些序列標註的問題,針對給定的狀態(拼音),獲取其概率最高的隱狀態(中文)。
這個是乙個標準的hmm,針對hmm的解碼過程,是乙個很成熟也很完備的東西。
local的計算和儲存能力都有限,我們選擇一般是二階馬爾科夫,也就是所謂的bigram model。 高階對質量會有幫助,但是涉及到儲存和計算,工程上不可行。
同理,利用me 以及crfmodel都可以解決這一類的標註問題,同樣是工程上的問題,不太可行。
確定了採用bigram model,那麼訓練過程也就很確定:
1.segment and count bigram&unigram
2.smoothing
3.prunning
在seg之前,需要對我們的訓練語料做一下預處理,輸入法重點關注的是中文以及中文的關係,所以需要對其中的英文以及符號等分割做乙個預處理,不然會增加後期剪枝的複雜度。
一版的做法是,針對裡面的英文,可以用乙個統一的english的標記代替,盡量不要去掉,而對於符號,作為句子的分隔符號,將整個句子折斷成乙個乙個純中文的短句,作為訓練語料。
作為完備的model,會包括 開始符號bos 以及結束符eos,則可以保證整個model是封閉的。不過針對輸入法,這個不是必須的,對於輸入過程,使用者的每一次開始輸入,都不一定是句子的開始,強行加上去,不一定有好的效果。
作為訓練過程#1 沒有什麼好說的,直接處理就行。
#2是很關鍵的乙個,hmm的解碼,涉及到大量的轉義概率乘,如果兩個狀態的概率沒看到,那麼轉義概率為0,整個相乘鏈就為0,顯然不合理。所以需要平滑,其實就是通過策略為沒有看到的二元對提供乙個預設的計算方式。
#3 二元對之間的關係很多,一版在1b規模以上,而輸入法智慧型很用很小規模(1kw),那麼就需要對這個進行剪枝,剪枝非常重要,最大限度的保證剪枝後模型的準確率和剪枝前相近,後面詳細介紹。
輸入法技術 模型選擇
影響輸入法體驗的原因有很多,整體來看,我理解有兩個,乙個是候選詞的質量,另乙個是整體的互動設計。候選詞質量高,意味著使用者輸入拼音後,使用者期望的結果可以放在第一位置,提高輸入速度 如果細分一下,有3類情況 1.輸入句子 長 短 比如,今天真是個好天氣 2.輸入詞,比如今天 天氣 我們等 3.其他情...
輸入法控制
unit u ime inte ce implementation uses windows,forms,imm,sysutils,messages varstmpclassname,stmpime string 失去焦點時的控制項名稱和輸入法名稱 msghandle hhook 0 判斷當前類名是...
輸入法鉤子
分為1個dll工程和1個win32空工程。新建乙個dll空工程,字符集使用多位元組字符集。以下是源 shurufa.h ifndef shurufa h define shurufa h include include include include pragma comment lib,imm32...