分词小议
?
全文信息檢索系統中,創建倒排索引時應當使用什么分詞方式一直是眾說紛紜,毫無定論。
具我所知,已有某某 paper “研究指出”采用二元切分的方式構建索引是“最好的”;也看到過園子里的一位兄弟認為單字切分最準確(sorry,忘記具體出處);當然,將某個基于詞典或者共現頻率的中文分詞組件包裝一下加入自己的項目中也是非常流行的做法。
既然存在這么多的看法與做法,難免會讓人生出一較高下或者明辨真偽的決心;
不過作為一個成熟而又理智的熱血青年,偶認為這種決心并無必要,原因在于信息檢索系統的評價標準是多樣化的——召回率、準確率與查詢效率三個指標相互矛盾,只有取舍、不能調和;人們關心的指標不盡相同自然會提出不同的觀點、奉行不同的做法。假設你在做一個Web搜索引擎,首先要保證的一定是查詢效率,因為它所要處理的海量數據與并發請求是一種天然的障礙;其次,在召回率與準確率中你會更傾向于后者,因為最終用戶與Web搜索引擎的關系恰如負心男人與癡情女人的關系——用戶希望盡快得到最滿意的結果,并在下一個瞬間把你拋棄,直到他們再次需要你為止(當然,如果你提供了代號為 Good Morni 的競價排名服務,為了不致客戶投訴,最好還是關心一下召回率。所以說,廣大小白和一小撮VIP之間的利益沖突是深刻、長遠以及不可調和的。。。);同時,對于一個傳統的圖書信息檢索系統,情況會大不相同——書籍與文章有良好的關鍵字索引,包括標題、作者、摘要、正文、收錄時間等定義明確的結構化數據,文檔集合相對穩定并且規模相對較小——這一切都使你的決策更傾向于提高系統的召回率,原因很簡單,你有這么做的可能性或者說是先天優勢。
既然我們已經明確評價信息檢索系統的指標是多元化的,現在讓我們來看看不同的索引分詞策略到底如何影響這些指標。
首先讓我們來比較兩個對立的策略,單字切分 vs 中文分詞:
單字切分的支持者們最強有力的證據大概如下:
“世界杯”是一個詞,用單字切分的話,查“世界”也可以命中這篇文檔,而用中文分詞就查不到了;
而中文分詞的支持者們的反駁大概是:
“參加過世界杯”,用單字切分的話,查“過世”也可以命中這篇文檔,但事實上并沒有人掛掉;
通過以上陳述我們可以觀察得到這樣的結論,采用單字切分會提高系統的召回率,而降低準確率;而中文分詞則恰恰相反,它提高了準確率,并降低的召回率,并且分詞的顆粒越粗糙(平均詞長越長)這種趨勢就越明顯。
這個結論似乎有助于理解為什么 google、百度等等這些理論上更需要高準確率的Web搜索引擎都采用了中文分詞技術。但是如果我們的認識僅停留在這種水平就未免顯得過于膚淺:事實情況是,需要高吞吐量的Web搜索引擎在處理中文內容時必須采用中文分詞技術。
讓我們把倒排索引想象成一張表,其中每一行都有一個TermText以及所有包含該TermText的文檔編號列表。這樣在我們查詢某個關鍵字時,可以一次性獲得所有包含該關鍵字的文檔,而不用在原始文檔集合中逐一查找。而采用不同的分詞策略創建索引,事實上既是將文檔編號集合以不同的程度打散到索引中不同的行。單字切分可以說是打散程度最低的一種方式,行數僅等于漢字數目,而整個倒排索引表會非常的“寬”;相反,顆粒較粗的中文分詞將文檔編號集合分配到更多的不同行,使得倒排索引表的寬度變小。并且隨著分詞粒度的增加寬度會逐漸減小,最極端的情況就是將每一篇文檔看作一個“詞”,此時倒排索引表的寬度處處等于1。
基于以上討論,我們看出以下兩點:
一、在文檔集合數量非常龐大時,系統的吞吐量會受到存儲倒排索引文件的磁盤的性能限制,因此,采用中文分詞,縮短倒排索引表的寬度將有助于提高系統的吞吐量。
二、無論使用布爾查詢或者是基于位置信息的查詢(如 Lucene 中的 PhraseQuery)單字切分的單詞查詢性能不會好于中文分詞。
這樣看來,在Web搜索引擎中使用中文分詞就不是一件難以理解的事情了;同樣,在文檔規模較小時,使用單字切分的策略也不會有什么重大問題。
至于二元切分,在偶看來,這種方法試圖以一種戰場外科手術的粗獷氣質實現中庸之道的思想,單字切分與中文分詞之間形成了一種在某些方面不盡人意的折中(歧義、無意義的二元組等)。在實現上它更接近單字切分,而非中文分詞。按照偶滴設想,如果實現一種對標準意義的中文分詞策略的改進,使其能夠在一定程度上緩解中文分詞降低召回率的問題,也許會成為一種在各方面都更加平衡的解決方案。
?
?
總結
- 上一篇: 条件随机场(CRF)相对于HMM,MEM
- 下一篇: 英、美的教授体制