眾所周知,搜狗輸入法在詞庫方面具有鮮明的特色,其詞庫不僅超大全面(大概有35萬左右),而且詞條質量也很高。隨著搜狗輸入法的不斷普及,越來越多的用戶體驗到了搜狗輸入法的超級流暢性,但是這樣的流暢性是以一個優秀的詞庫為基礎的。作為一個輸入法的核心部分,搜狗的超強詞庫是怎樣來的呢?下面和廣大關心搜狗輸入法的朋友們分享一下詞庫製作中的艱辛和快樂。
搜狗的詞條來源
詞彙是一切中文應用的基礎,但是世界上並沒有任何一個詞典包含了輸入法所需要的所有詞彙。比如中國漢語大辭典雖然包含了很多詞條,但是仍然缺乏很多比較新、比較具體的詞,網絡的新詞又層出不窮,所以搜狗輸入法必須自己想辦法構造一個適合他自己的詞庫。
由於搜狗是一家搜尋引擎公司,自然會有一批自己做文本分析的詞庫,它包含了常用的基本詞彙和部分專業詞彙,但是在數量上還是遠遠不能覆蓋用戶對詞彙的需求空間。經過分析可知,這部分缺少的詞中有相當一部分是人名、地名、歌曲、小說、財經、旅遊、遊戲、體育等。幸運的是,搜狐矩陣蘊含著許多搜狗需要的這些資源,比如地名資源可以從go2map拿到,歌曲資源可以從搜狗的音樂搜索拿到,小說資源可以從搜狐網拿到,遊戲詞彙可以從17173遊戲網拿到……這些資源雖然是內部資源,但是當初也是編輯經過長時間大量的整理維護工作的結晶,並且這涉及到大量部門間的合作,每一個流程下來都會花許多精力。
除了搜狐內部資源的整合,我們還為某些事件、場合特別整理了大量的詞表。比如在世界盃期間,我們的編輯整理了幾乎所有與世界盃相關的詞彙,使得球迷們可以更為流暢地交流。對於詩詞,我們特別匯總了幾乎所有從最早的詩經到毛澤東的所有古詩詞(包括宋詞),這都成為搜狗詞庫來源的一部分。
在融合搜狗自己的詞庫和各個兄弟部門提供的資源後,搜狗輸入法詞庫有了較大的完善,但是仍然缺少很多各種各樣的詞,比如「挖人」、「電荒」等。這些詞無法通過尋找資源的方式全部找到,所以不得不自己想辦法。幸運的是,網際網路網頁是個大寶庫,裡面蘊含著幾乎所有我們需要的知識,所以我們的工程師們設計了一套機器學習的算法從這些網頁中訓練新詞,訓練的結果是得到了大批的新詞彙,但是也引入了大量的噪聲,即垃圾詞。比如在最初的搜狗輸入法版本裡,「謝霆鋒」這個詞的錯法就有「謝霆峰」、「謝廷鋒」等數種,這對用戶的體驗和輸入法的智能性都造成了損害。
搜狗的詞頻統計
輸入法離不開詞頻,詞頻直接影響著智能組詞。搜狗輸入法的詞頻統計是在一個極其大的網際網路網頁上統計出來的。為了得到一個最優的詞頻,或者得到某類風格的詞頻(比如口語化風格),我們不斷更換語料庫,從網頁類型的選取、文章長度的限制、某些特殊的預處理等都做了大量的嘗試。每一次嘗試都需要重新統計詞頻,動輒需要幾天時間才能完成一輪詞庫的製作與驗證,佔用的機器、人力、資源之多不是某些小手工作坊式的輸入法小組能夠完成的。
詞庫過濾系統的搭建
經過前面的資源整理,我們得到了一個非常非常大的詞庫(約合幾百萬),這個詞庫中的詞良莠不齊,需要堅決的過濾才能滿足輸入法的需要。試想,從幾百萬個詞條的集合過濾得到35萬左右的詞條集合,這註定是一個龐大而又精細的工作。
事實上詞條出現的頻率是詞條質量的最重要維度,頻率越高則詞條是好詞的概率越高,並且不同來源的詞彙有著不同的可信度。為此我們搭建了一個詞庫過濾系統,這個系統好比是一個漏鬥,可以靈活地對源頭的詞彙進行過濾,同時輸出中間每一步的過濾過程以方便開發人員調整算法。就這樣,在不斷的過濾、驗證、修改參數的循環中,這個系統逐漸趨於穩定,為整個詞庫的質量做出了重要的保證。這個系統雖然只有幾千行代碼,但是開發人員對它閾值等參數的調整可謂不計其數。經過這一輪的處理,詞條的總體質量有了飛躍般的提升。