中文搜尋引擎技術揭密:中文分詞
(2004.04.19) 來自:csdn
什麼是中文分詞
眾所周知,英文是以詞為單位的,詞和詞之間是靠空格隔開,而中文是以字為單位,句子中所有的字連起來才能描述乙個意思。例如,英文句子i am a student,用中文則為:「我是乙個學生」。計算機可以很簡單通過空格知道student是乙個單詞,但是不能很容易明白「學」、「生」兩個字合起來才表示乙個詞。把中文的漢字序列切分成有意義的詞,就是中文分詞,有些人也稱為切詞。我是乙個學生,分詞的結果是:我 是 乙個 學生。
中文分詞和搜尋引擎
在google上輸入「和服」搜尋所有中文簡體網頁,總共結果507,000條,前20條結果中有14條與和服一點關係都沒有。在第一頁就有以下錯誤:
「通訊資訊報:瑞星以技術和服務開拓網路安全市場」
「使用純html的通用資料管理和服務- 開發者- zd*** ...」
「陳慧琳《心口不一》化妝和服裝自己包辦」
「::***:中國境外領事保護和服務指南(2023年版) ...」
「產品和服務」
等等。第一頁只有三篇是真正在講「和服」的結果。
「福建省晉江市恆和服裝****系獨資企業」
「關於商品和服務實行明碼標價的規定」
「青島東和服裝裝置」
在中搜上輸入「和服」搜尋網頁,總共結果為26,917條,前20條結果都是與和服相關的網頁。
中文分詞技術
中文分詞技術屬於自然語言處理技術範疇,對於一句話,人可以通過自己的知識來明白哪些是詞,哪些不是詞,但如何讓計算機也能理解?其處理過程就是分詞演算法。
現有的分詞演算法可分為三大類:基於字串匹配的分詞方法、基於理解的分詞方法和基於統計的分詞方法。
1、基於字串匹配的分詞方法
這種方法又叫做機械分詞方法,它是按照一定的策略將待分析的漢字串與乙個「充分大的」機器詞典中的詞條進行配,若在詞典中找到某個字串,則匹配成功(識別出乙個詞)。按照掃瞄方向的不同,串匹配分詞方法可以分為正向匹配和逆向匹配;按照不同長度優先匹配的情況,可以分為最大(最長)匹配和最小(最短)匹配;按照是否與詞性標註過程相結合,又可以分為單純分詞方法和分詞與標註相結合的一體化方法。常用的幾種機械分詞方法如下:
1)正向最大匹配法(由左到右的方向);
2)逆向最大匹配法(由右到左的方向);
3)最少切分(使每一句中切出的詞數最小)。
還可以將上述各種方法相互組合,例如,可以將正向最大匹配方法和逆向最大匹配方法結合起來構成雙向匹配法。由於漢語單字成詞的特點,正向最小匹配和逆向最小匹配一般很少使用。一般說來,逆向匹配的切分精度略高於正向匹配,遇到的歧義現象也較少。統計結果表明,單純使用正向最大匹配的錯誤率為1/169,單純使用逆向最大匹配的錯誤率為1/245。但這種精度還遠遠不能滿足實際的需要。實際使用的分詞系統,都是把機械分詞作為一種初分手段,還需通過利用各種其它的語言資訊來進一步提高切分的準確率。
對於機械分詞方法,可以建立乙個一般的模型,在這方面有專業的學術**,這裡不做詳細論述。
2、基於理解的分詞方法
這種分詞方法是通過讓計算機模擬人對句子的理解,達到識別詞的效果。其基本思想就是在分詞的同時進行句法、語義分析,利用句法資訊和語義資訊來處理歧義現象。它通常包括三個部分:分詞子系統、句法語義子系統、總控部分。在總控部分的協調下,分詞子系統可以獲得有關詞、句子等的句法和語義資訊來對分詞歧義進行判斷,即它模擬了人對句子的理解過程。這種分詞方法需要使用大量的語言知識和資訊。由於漢語語言知識的籠統、複雜性,難以將各種語言資訊組織成機器可直接讀取的形式,因此目前基於理解的分詞系統還處在試驗階段。
3、基於統計的分詞方法
從形式上看,詞是穩定的字的組合,因此在上下文中,相鄰的字同時出現的次數越多,就越有可能構成乙個詞。因此字與字相鄰共現的頻率或概率能夠較好的反映成詞的可信度。可以對語料中相鄰共現的各個字的組合的頻度進行統計,計算它們的互現資訊。定義兩個字的互現資訊,計算兩個漢字x、y的相鄰共現概率。互現資訊體現了漢字之間結合關係的緊密程度。當緊密程度高於某乙個閾值時,便可認為此字組可能構成了乙個詞。這種方法只需對語料中的字組頻度進行統計,不需要切分詞典,因而又叫做無詞典分詞法或統計取詞方法。但這種方法也有一定的侷限性,會經常抽出一些共現頻度高、但並不是詞的常用字組,例如「這一」、「之一」、「有的」、「我的」、「許多的」等,並且對常用詞的識別精度差,時空開銷大。實際應用的統計分詞系統都要使用一部基本的分詞詞典(常用詞詞典)進行串匹配分詞,同時使用統計方法識別一些新的詞,即將串頻統計和串匹配結合起來,既發揮匹配分詞切分速度快、效率高的特點,又利用了無詞典分詞結合上下文識別生詞、自動消除歧義的優點。
到底哪種分詞演算法的準確度更高,目前並無定論。對於任何乙個成熟的分詞系統來說,不可能單獨依靠某一種演算法來實現,都需要綜合不同的演算法。筆者了解,海量科技的分詞演算法就採用「複方分詞法」,所謂複方,相當於用中藥中的複方概念,即用不同的藥才綜合起來去醫治疾病,同樣,對於中文詞的識別,需要多種演算法來處理不同的問題。
分詞中的難題
有了成熟的分詞演算法,是否就能容易的解決中文分詞的問題呢?事實遠非如此。中文是一種十分複雜的語言,讓計算機理解中文語言更是困難。在中文分詞過程中,有兩大難題一直沒有完全突破。
1、歧義識別
歧義是指同樣的一句話,可能有兩種或者更多的切分方法。例如:表面的,因為「表面」和「面的」都是詞,那麼這個短語就可以分成「表面 的」和「表 面的」。這種稱為交叉歧義。像這種交叉歧義十分常見,前面舉的「和服」的例子,其實就是因為交叉歧義引起的錯誤。「化妝和服裝」可以分成「化妝 和 服裝」或者「化妝 和服 裝」。由於沒有人的知識去理解,計算機很難知道到底哪個方案正確。
交叉歧義相對組合歧義來說是還算比較容易處理,組合歧義就必需根據整個句子來判斷了。例如,在句子「這個門把手壞了」中,「把手」是個詞,但在句子「請把手拿開」中,「把手」就不是乙個詞;在句子「將軍任命了一名中將」中,「中將」是個詞,但在句子「產量三年中將增長兩倍」中,「中將」就不再是詞。這些詞計算機又如何去識別?
如果交叉歧義和組合歧義計算機都能解決的話,在歧義中還有乙個難題,是真歧義。真歧義意思是給出一句話,由人去判斷也不知道哪個應該是詞,哪個應該不是詞。例如:「桌球拍賣完了」,可以切分成「桌球 球拍 賣 完 了」、也可切分成「桌球 拍賣 完 了」,如果沒有上下文其他的句子,恐怕誰也不知道「拍賣」在這裡算不算乙個詞。
2、新詞識別
新詞,專業術語稱為未登入詞。也就是那些在字典中都沒有收錄過,但又確實能稱為詞的那些詞。最典型的是人名,人可以很容易理解句子「王軍虎去廣州了」中,「王軍虎」是個詞,因為是乙個人的名字,但要是讓計算機去識別就困難了。如果把「王軍虎」做為乙個詞收錄到字典中去,全世界有那麼多名字,而且每時每刻都有新增的人名,收錄這些人名本身就是一項巨大的工程。即使這項工作可以完成,還是會存在問題,例如:在句子「王軍虎頭虎腦的」中,「王軍虎」還能不能算詞?
新詞中除了人名以外,還有機構名、地名、產品名、商標名、簡稱、省略語等都是很難處理的問題,而且這些又正好是人們經常使用的詞,因此對於搜尋引擎來說,分詞系統中的新詞識別十分重要。目前新詞識別準確率已經成為評價乙個分詞系統好壞的重要標誌之一。
中文分詞的應用
目前在自然語言處理技術中,中文處理技術比西文處理技術要落後很大一段距離,許多西文的處理方法中文不能直接採用,就是因為中文必需有分詞這道工序。中文分詞是其他中文資訊處理的基礎,搜尋引擎只是中文分詞的乙個應用。其他的比如機器翻譯(mt)、語音合成、自動分類、自動摘要、自動校對等等,都需要用到分詞。因為中文需要分詞,可能會影響一些研究,但同時也為一些企業帶來機會,因為國外的計算機處理技術要想進入中國市場,首先也是要解決中文分詞問題。在中文研究方面,相比外國人來說,中國人有十分明顯的優勢。
中文搜尋引擎技術揭密 中文分詞
中搜 http www.zhongsou.com 等。目前在中文搜尋引擎領域,國內的搜尋引擎已經和國外的搜尋引擎效果上相差不遠。之所以能形成這樣的局面,有乙個重要的原因就在於中文和英文兩種語言自身的書寫方式不同,這其中對於計算機涉及的技術就是中文分詞。什麼是中文分詞 眾所周知,英文是以詞為單位的,詞...
中文搜尋引擎技術揭密 中文分詞
什麼是中文分詞 眾所周知,英文是以詞為單位的,詞和詞之間是靠空格隔開,而中文是以字為單位,句子中所有的字連起來才能描述乙個意思。例如,英文句子i am a student,用中文則為 我是乙個學生 計算機可以很簡單通過空格知道student是乙個單詞,但是不能很容易明白 學 生 兩個字合起來才表示乙...
中文搜尋引擎技術揭密 中文分詞
眾所周知,英文是以詞為單位的,詞和詞之間是靠空格隔開,而中文是以字為單位,句子中所有的字連起來才能描述乙個意思。例如,英文句子i am a student,用中文則為 我是乙個學生 計算機可以很簡單通過空格知道student是乙個單詞,但是不能很容易明白 學 生 兩個字合起來才表示乙個詞。把中文的漢...