百度搜索引擎詳解


今天無意中讀到的,網上轉載很多了,不過還是忍不住在轉載一番,不過原文就找不到了,讀得有點累,但是多少有點啓發了,推薦一下。

查詢處理以及分詞技術

隨 着搜索經濟的崛起,人們開始越加關注全球各大搜索引擎的性能、技術和日流量。作爲企業,會根據搜索引擎的知名度以及日流量來選擇是否要投放廣告等;作爲 普通網民,會根據搜索引擎的性能和技術來選擇自己喜歡的引擎查找資料;作爲技術人員,會把有代表性的搜索引擎作爲研究對象。搜索引擎經濟的崛起,又一次向 人們證明了網絡所蘊藏的巨大商機。網絡離開了搜索將只剩下空洞雜亂的數據,以及大量等待去費力挖掘的金礦。

但是,如何設計一個高效的搜 索引擎?我們可以以百度所採取的技術手段來探討如何設計一個實用的搜索引擎。搜索引擎涉及到許多技術點,比如查詢處理,排序算法,頁面抓取算 法,CACHE機制,ANTI-SPAM等等。這些技術細節,作爲商業公司的搜索引擎服務提供商比如百度,GOOGLE等是不會公之於衆的。我們可以將現 有的搜索引擎看作一個黑盒,通過向黑盒提交輸入,判斷黑盒返回的輸出大致判斷黑盒裏面不爲人知的技術細節。

查詢處理與分詞是一箇中文搜索引擎必不可少的工作,而百度作爲一個典型的中文搜索引擎一直強調其“中文處理”方面具有其它搜索引擎所不具有的關鍵技術和優勢。那麼我們就來看看百度到底採用了哪些所謂的核心技術。

我們分兩個部分來講述:查詢處理/中文分詞。

一、查詢處理

用戶向搜索引擎提交查詢,搜索引擎一般在接受到用戶查詢後要做一些處理,然後在索引數據庫裏面提取相關的信息。那麼百度在接受到用戶查詢後做了些什麼工作呢?

1、假設用戶提交了不只一個查詢串,比如“信息檢索 理論 工具”。那麼搜索引擎首先做的是根據分隔符比如空格,標點符號,將查詢串分割成若干子查詢串,比如上面的查詢就會被解析爲:<信息檢索,理論,工具>三個子字符串;這個道理簡單,我們接着往下看。

2、 假設提交的查詢有重複的內容,搜索引擎怎麼處理呢?比如查詢“理論 工具理論”,百度是將重複的字符串當作只出現過一次,也就是處理成等價的“理論工具”,而GOOGLE顯然是沒有進行歸併,而是將重複查詢子串的權重增大 進行處理。那麼是如何得出這個結論的呢?我們可以將“理論工具”提交給百度,返回341,000篇文檔,大致看看第一頁的返回內容。

OK。 繼續,我們提交查詢“理論 工具理論”,在看看返回結果,仍然是那麼多返回文檔,當然這個不能說明太多問題,那看看第一頁返回結果的排序,看出來了嗎?順序完全沒有變化,而 GOOGLE 則排序有些變動,這說明百度是將重複的查詢歸併成一個處理的,而且字符串之間的先後出現順序基本不予考慮(GOOGLE是考慮了這個順序關係的)。

3、 假設提交的中文查詢包含英文單詞,搜索引擎是怎麼處理的?比如查詢”電影BT下載”,百度的方法是將中文字符串中的英文當作一個整體保留,並以此爲斷點將 中文切分開,這樣上述的查詢就切爲<電影,BT,下載>,不論中間的英文是否一個字典裏能查到的單詞也好,還是隨機的字符也好,都會當作一個 整體來對待。至於爲什麼,你用查詢“電影dfdfdf下載”看看結果就知道了。當然如果查詢中包含數字,也是如此辦理。

到目前爲止,一切很簡單,也很清楚,百度怎麼處理用戶查詢的呢?歸納如下:首先根據分割符號將查詢分開,然後看看是否有重複的字符串,如果有,就拋棄多餘的,只保留一個,接着判斷是否有英文或者數字,如果有的話,把英文或者數字當作一個整體保留並把前後的中文切開。

接着該幹什麼呢?該考慮分詞的問題了。

二、中文分詞

首先,講講百度的分詞時機或者條件問題,是否是個中文字符串百度就拿來切一下呢?非也,要想被百度的分詞程序榮幸的切割一下也是要講條件的,哪能是個字符串就切割啊?你當百度是賣鋸條的麼?

那麼什麼樣的字符串才滿足被切割的條件呢?簡單說來,如果字符串只包含小於等於3箇中文字符的話,那就保留不動,當字符串長度大於4箇中文字符的時候,百度的分詞程序纔出馬大幹快上,把這個字符串肢解掉。

怎 麼證明呢?我們向百度提交“電影下載”,看看返回結果中標爲紅字的地方,不難看出來,查詢已經被切割成<電影,下載>兩個單詞了,說明分詞程 序已經開工了,如果是比4箇中文字符更長的字符串,那分詞程序就更不客氣了,一定大卸八塊而後快。我們來看看三個字符的情況,提交查詢“當然擇”,看起來 這個查詢不倫不類,那是因爲我希望看到這個字符串被切分爲<當然,擇>,返回結果365篇相關頁面,翻到最後一頁,發現標紅的關鍵字都是” 當然擇”連續出現的情況,好像沒有切分,但是還不確定,那麼再提交人工分好的查詢“當然擇”看看,返回結果1,090,000篇,基本上可以確定沒有進行 分詞了,當然另外一種解釋是:對於三個字符先切分,然後將切分後的結果當作一個短語查詢,這樣看到的效果和沒有切分是相似的。

但是我傾向於 判斷百度對於少於3個字符的串沒有切分,奧卡姆不是說了麼“如無必要,勿增實體”,幹嗎做無用功呢。那麼如果沒有切分,會有一個隨之而來的問題,怎麼從索 引庫裏面提取未切分的字符串呢?這牽扯到索引的問題,我覺得百度應該採取了兩套索引機制,一種是按照單詞索引,一種是按照N-GRAM索引,至於索引的具 體問題,以後在詳細論述。

下面我們看看百度是採取的何種分詞算法,現在分詞算法已經算是比較成熟了,有簡單的有複雜的,比如正向最大匹 配,反向最大匹配,雙向最大匹配,語言模型方法,最短路徑算法等等,有興趣的可以用GOOGLE去搜索一下以增加理解。這裏就不展開說了。但是要記住一點 的是:判斷一個分詞系統好不好,關鍵看兩點,一個是消除歧義能力;一個是詞典未登錄詞的識別比如人名,地名,機構名等。

那麼百度用的是什麼方法?我的判斷是用雙向最大匹配算法。至於怎麼推理得出的,讓我們一步步來看。當然,這裏首先有個假設,百度不會採取比較複雜的算法,因爲考慮到速度問題。

我 們提交一個查詢“毛澤東北京華煙雲”,又一個不知所云的查詢,儘管不知所云但是自有它的道理,我想看看百度的分詞是如何消歧以及是否有詞典未登錄詞的識別 的功能,如果是正向最大匹配算法的話,那麼輸出應該是:”毛澤東/北京/華/煙雲”,如果是反向最大匹配算法的話,那麼輸出應該是:”毛/澤/東北/京華 煙雲”,我們看看百度的分詞結果:”毛澤東/北/京華煙雲”,一個很奇怪的輸出,跟我們的期望相差較多,但是從中我們可以獲得如下信息:百度分詞可以識別 人名,也可以識別”京華煙雲”,這說明有詞典未登錄詞的識別的功能,我們可以假設分詞過程分爲兩個階段:第一階段,先查找一個特殊詞典,這個詞典包含一些 人名,部分地名以及一些普通詞典沒有的新詞,這樣首先將”毛澤東”解析出來,剩下了字符串”北京華煙雲”,而”北/京華煙雲”,可以看作是反向最大匹配的 分詞結果。這樣基本說得通。爲了證明這一點,我們提交查詢”發毛澤東北”,我們期望兩種分詞結果,一個是正向最大匹配<發毛,澤,東北>,一 個是上述假設的結果<發,毛澤東,北>,事實上百度輸出是第二種情況,這樣基本能確定百度分詞采取了至少兩個詞典,一個是普通詞典,一個是專 用詞典(人名等)。而且是專用詞典先切分,然後將剩餘的片斷交由普通詞典來切分。

繼續測驗,提交查詢“古巴比倫理”,如果是正向最大匹 配,那麼結果應該是<古巴比倫,理>,如果是反向最大匹配,那麼結果應該是 <古巴,比,倫理>,事實上百度的分詞結果是<古巴比倫,理>,從這個例子看,好像用了正向最大匹配算法;此外還有一些例子表明 好像是使用正向最大匹配的;但是且慢,我們看這個查詢“北京華煙雲”,正向最大匹配期望的結果是<北京,華,煙雲>,而反向最大匹配期望的結 果是 <北,京華煙雲>,事實上百度輸出的是後者,這說明可能採用的反向最大匹配;從這點我們可以猜測百度採用的是雙向最大匹配分詞算法,如果正向 和反向匹配分詞結果一致當然好辦,直接輸出即可;但是如果兩者不一致,正向匹配一種結果,反向匹配一種結果,此時該如何是好呢?

從上面兩個 例子看,在這種情況下,百度採取最短路徑方法,也就是切分的片斷越少越好,比如<古巴,比,倫理>和<古巴比倫,理>相比選擇後 者,<北京,華,煙雲>和<北,京華煙雲>相比選擇後者。還有類似的一些例子,這樣基本可以解釋這些輸出結果。

但是仍然遺留的問題是:如果正向反向分詞不一致,而且最短路徑也相同,那怎麼辦?輸出正向的還是反向的結果?
我 們再來看一個例子。提交查詢“遙遠古古巴比倫”,這個查詢被百度切分爲<遙遠,古古,巴比倫>,說明詞典裏面有”巴比倫”,但是是否有”古巴 比倫”這個詞彙不確定,此時看不出是正向切分還是反向切分得出的結果,換查詢爲“遙遠古巴比倫”,此時被切分爲“遙遠/古巴比倫”,這說明詞典裏面有”古 巴比倫”這個詞彙,這說明了“遙遠古古巴比倫”是正向最大匹配的結果。那爲什麼“遙遠古古巴比倫”不會被反向切分爲”遙/遠古/古巴比倫”呢,百度的可能 選擇是這種情況下選擇單字少的那組切分結果。

當然還可以繼續追問:如果切分後單字也一樣多,那怎麼辦?最後看一個例子,查詢“王強大小:”,百度將其切分爲“王/強大/小”,是正向切分的結果,如果是反向的會被切分爲“王/強/大小”,這說明有歧義而且單字也相同則選擇正向切分結果。

OK,看到這裏可能頭已經有些暈了,最後總結一下百度的分詞算法,當然裏面還是有猜測的成分,算法如下:

首 先查詢專用詞典(人名,部分地名等),將專有名稱切出,剩下的部分採取雙向分詞策略,如果兩者切分結果相同,說明沒有歧義,直接輸出分詞結果。如果不一 致,則輸出最短路徑的那個結果,如果長度相同,則選擇單字詞少的那一組切分結果。如果單字也相同,則選擇正向分詞結果。

百度一直宣傳自 己在中文處理方面的優勢,從上面看,分詞算法並無特殊之處,消歧效果並不理想,即使百度採取比上述分詞算法複雜些的算法也難以說成是優勢,如果說百度有優 勢的話,唯一的優勢就是那個很大的專用詞典,這個專用詞典登錄了人名(比如大長今),稱謂(比如老太太),部分地名(比如阿聯酋等),估計百度採用學術界 公佈的比較新的命名實體識別算法從語料庫裏面不斷識別出詞典未登錄詞,逐漸擴充這個專門詞典。如果這就是優勢的話,那麼這個優勢能夠保持多久就是個很明顯 的問題。

Spelling Checker拼寫檢查錯誤提示(以及拼音提示功能)

拼寫檢查錯誤提示是搜索引擎都具備的一個功能,也就是說用戶提交查詢 給搜索引擎,搜索引擎檢查看是否用戶輸入的拼寫有錯誤,對於中文用戶來說一般造成的錯誤是輸入法造成的錯誤.那麼我們就來分析看看百度是 怎麼實現這一功能的.

我們分析拼寫檢查系統關注以下幾個問題:

(1)系統如何判斷用戶的輸入是有可能發生錯誤的查詢呢?
(2)如果判斷是可能錯誤的查詢輸入,如何提示正確的詞彙呢?

那 麼百度是如何做的呢?百度判斷用戶輸入是否錯誤的標準,我覺得應該是查字典,如果發現字典裏面不包含這個詞彙,那麼很有可能是個錯誤的輸入,此時啓動錯誤 提示功能,這個很好判斷,因爲如果是一個正常詞彙的話,百度一般不會有錯誤提示,而你故意輸入一個詞典不可能包含的所謂詞彙,此時百度一般會提示你正確的 檢索詞彙.

那麼百度是怎麼提示正確詞彙的呢?很明顯是通過拼音的方式,比如我輸入查詢” 制才”,百度提供的提示詞彙爲: “:制裁 質材紙材”,都是同 音字.所以百度必然維持着一個同音詞詞典,裏面保留着同音詞信息,比如可能包含着下面這條詞條: “ zhi cai à制裁,質材,紙材”,另外還有一 個標註拼音程序,現在能夠看到的基本流程是: 用戶輸入” 制才”,查詞典,發現沒有這個詞彙,OK,啓動標註拼音程序,將” 制才”標註爲拼音”zhi cai”,然後查找同音詞詞典,發現同音詞” 制裁,質材,紙材”,那麼提示用戶可能的正確拼寫.

整體流程看起來很簡單,但是還有一些遺留的小問題,比如是否將詞表裏面所有同音詞都 作爲用戶的提示信息呢?比如某個拼音有10個同音詞,是否都輸出呢?百度並沒有將所有同音詞都輸出而是選擇一定篩選標準,選擇其中幾個輸出.怎麼證明這一 點?我們看看拼音”liu li”的同音詞,紫光輸入法提示同音詞匯有” 流麗 流離 琉璃流利”4個,我們看看百度返回幾個,輸入”流厲”作爲查詢,這裏是故意輸入一個詞典不包含的詞彙,這樣百度的拼寫檢查纔開始工作,百度提示: ” 琉璃劉麗 劉莉 “,這說明什麼?說明不是所有同音詞都輸出,而是選擇輸出,那麼選擇的標準是什麼?

我能夠猜測到的方法是對於用戶查詢LOG進行統計,提取用戶查詢次數多的那些同音詞輸出,如果是這樣的話,上面的例子說明用戶搜索”琉璃”次數比其它的都要高些,次之是” 劉麗”,再次是” 劉莉”,看來大家都喜歡查詢自己或者認識的人的名字.

另外一個小問題:同音詞詞典包含2字詞,3字詞,那麼是否包含4字詞以及更長的詞條?是否包含一字詞? 這裏一字詞好回答,不用測試也能知道肯定不包含,因爲你輸入一個字,誰知道是否是錯誤的呢?

反正只要是漢字就能在詞表裏面找到,所以沒有判斷依據.二字詞是包含的,上面有例子,三字詞也包含,比如查詢 “中城藥”百度錯誤提示:”中成藥”,修改查詢爲”重城藥”,還是提示”中成藥” ,再次修改查詢 “重城要”,百度依然提示”中成藥”. 那麼4字詞彙呢?

百度還是會給你提示的,下面是個例子:
輸入:靜華煙雲 提示 京華煙雲
輸入:靜話煙雲 提示 京華煙雲
輸入:靜話閻暈 提示 京華煙雲

那 麼更長的詞彙是否提 示呢?也提示,比如我輸入: “落花世界有風軍”,這個查詢是什麼意思,估計讀過古詩的都知道,看看百度的提示”落花時節又逢君”,這說明什麼?說明同音詞詞典包含不同長度的同音詞信 息,另外也說明了百度的核心中文處理技術,也就是那個詞典,還真挺大的.

但是,如果用戶輸入的 查詢由兩個或者兩個以上子字符串構成,那麼百度的錯誤提示功能就罷工了,比如輸入查詢”哀體”,百度提示”艾提 挨踢”,但是.輸入爲 “我 哀體 “,則沒有任何錯誤提示.

還 有一個比較重要的問題:如果漢字是多音字那麼怎麼處理?百度呢比較偷懶,它根本就沒有對多音字做處理.我們來看看百度的一個標註拼音的錯誤,在看這個錯誤 前先看看對於多音字百度是怎麼提示錯誤的,我們輸入查詢”俱長”,百度提示”劇場 局長”, “俱長”的拼音有兩個:”ju zhang /ju chang” ,可見如果是多音字則幾種情況都提示..現在我們來看看錯誤的情況, 我們輸入查詢”劇常”,百度 提示”:劇場局長”,提示爲”劇場”當然好解釋,因爲是同音字,但是爲什麼 “局長”也會被提示呢?這說明百度的同音字詞典有錯誤,說明在”ju chang”這個詞條裏面包含”局長”這個錯誤的同音詞.讓我們順藤摸瓜,這個錯誤又說明什麼問題呢?

說明百度的同音詞典是自動生成的,而且沒有人工校對.還說明在自動生成同音詞典的過程中,百度不是根據對一篇文章標註拼音然後在抽取詞彙和對應的拼音信息獲得的,而是完全按照某個詞典的詞條來標註音節的,

所 以對於多音字造成的錯誤無法識別出來,如果是對篇章進行拼音標註,可能就不會出現這種很容易發現的錯誤標註. 當然還有另外一種解釋,就是”局長”是故意被百度提示出來可能的正確提示詞彙,因爲考慮到南方人”zh”和 “ch”等前後鼻音分不清麼,那麼是這樣的麼?我們繼續測試到底是何種情況.是百度有錯誤還是這是百度的先進的算法?

我們考慮詞彙”長 大 “,故意錯誤輸入爲”贓大”,如果百度考慮到了前後鼻音的問題,那麼應該會提示”長大”,但是百度提示是”藏大”.這說明什麼?說明百度並沒有考慮前後鼻 音問題,根本就是系統錯 誤. 我們輸入查詢”懸賞”,故意將之錯誤輸入爲”懸桑”,沒有錯誤提示,說明確實沒有考慮這種情況.前鼻音沒有考慮,那麼後鼻音考慮了麼,我們輸入”:經 常”,故意改爲後鼻音 “經纏”,百度提示爲”經產 經懺”,還是沒有考慮後鼻音.這基本可以確定是百度系統的錯誤導致.

根據以上推 導, 我們可以得出如下結論:百度是將分詞詞典裏面每個詞條利用拼音標註程序標註成拼音,然後形成同音詞詞典,所以兩個詞典是同樣大的 ,而且這個詞典也隨着分詞詞典的增長而在不斷增長. 至於標註過程中多音字百度沒有考慮,如果是多音字就標註成多個發音組合,通過這種方式形成同音詞詞典.這樣的同音詞詞典顯然包含着很多錯誤.

最後一個問題:百度對於英文進行拼寫檢查麼?讓我們試試看,輸入查詢”china”,不錯,搜到不少結果,專注中文搜索的百度還能搜索到英文,真是意外的驚喜.變換一下查詢”chine”,會更加意外驚喜的給我們提示”china”嗎?

百 度提示的是: 吃呢持呢,原來是不小心觸發了百度的拼音搜索功能了.那麼拼音搜索和中文檢查錯誤是否採用同一套同音詞詞典呢,讓我們來實驗一下,搜索”rongji”, 百度提示” 榕基 溶劑 容積”,OK,換個中文查詢”容機”,百度提示” 榕基溶劑容積”,看來使用的是同一套同音詞詞典.也就是說百度的中文糾錯和拼音檢索使用的機制相同,中文糾錯多了一道拼音注音的過程而已.難道這就是傳說 中那個百度的”事實上是一個無比強大的拼音輸入法”的拼音提示功能麼?

最後讓我們總結歸納一下百度的拼寫檢查系統:
後臺作業:
(1) 前面的文章我們說過,百度分詞使用的詞典至少包含兩個詞典一個是普通詞典,另外一個是專用詞典(專名等),百度利用拼音標註程序依次掃描所有詞典中的每個 詞條,然後標註拼音,如果是多音字則把多個音都標上,比如”長大”,會被標註爲”zhang da/chang da”兩個詞條.
(2)通過標註完的 詞條,建立同音詞詞典,比如上面的”長大”,會有兩個詞條: zhang daà長大” , chang daà長大.
(3)利用用戶查詢LOG頻率信息給予每個 中文詞條一個權重;
(4)OK,同音詞詞典建立完成了,當然隨着分詞詞典的逐步擴大,同音詞詞典也跟着同步擴大;

拼寫 檢查:
(1)用戶輸入查詢,如果是多個子字符串,不作拼寫檢查;
(2)對於用戶查詢,先查分詞詞典,如果發現有這個單詞詞條,OK, 不作拼寫檢查;
(3)如果發現詞典裏面不包含用戶查詢,啓動拼寫檢查系統;首先利用拼音標註程序對用戶輸入進行拼音標註;
(4)對於標註好的拼音在同音詞詞典裏面掃描,如果沒有發現則不作任何提示;
(5)如果發現有詞條,則按照順序輸出權重比較大的幾個提 示結果;

拼音提示:
(1)對於用戶輸入的拼音在同音詞詞典裏面掃描,如果沒有發現則不作任何提示;
(2)如果 發現有詞條,則按照順序輸出權重比較大的幾個提示結果;

上面說過,經過分析得出百度的分詞系統採用雙向最大匹配分詞,但是後來發現推理過程中存在一個漏洞,而且推導出來的百度分詞算法步驟還是過於繁瑣,所以進一步進行分析,看看是否前面的推導有錯誤.

那麼以前的分析有什麼漏洞呢?
我 們推導百度分詞有反向最大匹配的依據是百度將”北京華煙雲”分詞爲<北,京華煙雲>,從這裏看好像採用了反向最大匹配,因爲正向最大匹配的結 果應該是<北京,華,煙雲>,但是由此就推論說百度採用了雙向最大匹配還是太倉促了,前面文章我們也講過,百度有兩個詞典,一個普通詞典,一 個專有詞典,而且是專有詞典的詞彙先切分,然後將剩餘片斷交給普通詞典去切分.所以上面的”北京華煙雲”之所以被切分成<北,京華煙雲>,另 外一個可能是:京華煙雲這個詞彙是在專有詞典裏面存儲的,所以先分析,這樣得出”京華煙雲”,剩下”北”,沒什麼好切分的,所以輸出<北,京華煙 雲>.

這裏只是假設,那麼是否確實”京華煙雲”在專有詞典呢?我們再看一個例子”山東北京華煙雲”,百度切分的結果是<山 東,北,京華煙雲 >,如果”京華煙雲”在普通詞典,如果是反向切分,那麼結果應該是<山,東北,京華煙雲>,如果是正向切分應該是<山東,北京, 華,煙雲>,無論如何都分不出<山東,北,京華煙雲>.這說明什麼?
說明”京華煙雲”是在那個專有詞典,所以先切分出”京華煙 雲”,然後剩下的”山東北”交由普通詞典切分,明顯是正向最大匹配的結果輸出<山東,北>.當然按照我們在第一篇文章的算法推導”山東北”的 切分也會得出<山東,北>的結論,但是明顯比正向最大匹配多幾個判斷步驟,既然效果一樣,另外一個更加簡潔的方法也能說得通,那當然選擇簡便 的方法了.所以初步判斷百度採取的是正向最大匹配.

我們繼續測試採用何種分詞算法,爲了減少專有詞典首先分詞造成的影響,那麼查詢裏面 不能出現相對特殊的詞彙,構築查詢”天才能量級”,這裏應該沒有專有詞典出現過的詞彙,百度切分爲<天才,能量,級>,看來是正向最大匹配的 結果.另外,如果所有查詢詞彙都出現在專有詞典,那麼採取的是何種方法?這樣首先就得保證詞彙都出現在專有詞典,這麼保證這一點呢?

我們構 造查詢”鋪陳曉東方”,百度切分爲<鋪,陳曉東,方>,可以看出 “陳曉東”是在專有詞典的所以先切分出來.另外一個例子 “山東京城”,百度切分爲<山東,京城>,說明”東京”是在普通詞典的.OK,構造查詢”陳曉東京華煙雲”,通過前面分析可以看出兩個詞彙都 在專有詞典裏面,百度切分爲<陳曉東,京華煙雲>,說明對於專有詞典詞彙也是採取正向最大匹配或者雙向最大匹配.那麼使用反向最大匹配了嗎? 構造查詢例子”陳曉東方不敗”,首先我們肯定”陳曉東”和”東方不敗”都是在專有詞典出現的,如果是正向切分,那麼應該是<陳曉東,方,不敗 >或者<陳曉東,方,不,敗>如果是反向切分則是<陳,曉,東方不敗>,可以看出百度的切分是<陳曉東,方,不敗 >或者<陳曉東,方,不,敗>,說明採用的是正向最大匹配.通過分析,百度的詞典不包含”不敗”這個單詞,所以實際上百度的切分結果是 <陳曉東,方,不,敗>,很明顯這和我們以前推導的算法是有矛盾的,所以以前的分析算法確實有問題,所以結論是百度採取的是正向最大匹配算 法.

重新歸納一下百度的分詞算法系統:首先用專有詞典採用最大正向匹配分詞,切分出部分結果,剩餘沒有切分交給普通詞典,同樣採取正向最大匹配分詞,最後輸出結果.

另外,GOOGLE也是採用正向最大匹配分詞算法,不過好像沒有那個專用詞典,所以很多專名都被切碎了.

從這點講,GOOGLE在中文詞典構建上比百度差些,還需要加把子力氣才行,不過這也不是什麼多難的事.

發佈了27 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章