探索百度搜索引擎算法技巧分析系列之二 |
發(fā)布時間: 2012/9/5 11:41:28 |
接著我們上回的話題,百度搜索引擎算法技巧分析,接下來我們要講的是中文分詞技術,大家都知道百度是全球唯一最大的中文搜索引擎。下文針對百度對用戶查詢關鍵詞分詞做了一個實踐分析,希望對更多的seoer有幫助。百度這個搜索引擎對關鍵詞如何切分呢? 中文分詞 首先,講講百度的分詞時機或者條件問題,是否是個中文字符串百度就拿來切一下呢?非也,要想被百度的分詞程序榮幸的切割一下也是要講條件的,哪能是個字符串就切割啊?你當百度是賣鋸條的么? 那么什么樣的字符串才滿足被切割的條件呢?簡單說來,如果字符串只包含小于等于3個中文字符的話,那就保留不動,當字符串長度大于4個中文字符的時候,百度的分詞程序才出馬大干快上,把這個字符串肢解掉。 怎么證明呢?我們向百度提交“電影下載”,看看返回結果中標為紅字的地方,不難看出來,查詢已經被切割成<電影,下載>兩個單詞了,說明分詞程序已經開工了,如果是比4個中文字符更長的字符串,那分詞程序就更不客氣了,一定大卸八塊而后快。我們來看看三個字符的情況,提交查詢“當然擇”,看起來這個查詢不倫不類,那是因為我希望看到這個字符串被切分為<當然,擇>,返回結果看多少篇相關頁面,翻到最后一頁,發(fā)現(xiàn)標紅的關鍵字都是” 當然擇”連續(xù)出現(xiàn)的情況,好像沒有切分,但是還不確定,那么再提交人工分好的查詢“當然擇”看看,返回結果又會顯示多少篇,基本上可以確定沒有進行分詞了,當然另外一種解釋是:對于三個字符先切分,然后將切分后的結果當作一個短語查詢,這樣看到的效果和沒有切分是相似的。 但是我傾向于判斷百度對于少于3個字符的串沒有切分,奧卡姆不是說了么“如無必要,勿增實體”,干嗎做無用功呢。那么如果沒有切分,會有一個隨之而來的問題,怎么從索引庫里面提取未切分的字符串呢?這牽扯到索引的問題,我覺得百度應該采取了兩套索引機制,一種是按照單詞索引,一種是按照N-GRAM索引, 至于索引的具體問題,以后在詳細論述。 下面我們看看百度是采取的何種分詞算法,現(xiàn)在分詞算法已經算是比較成熟了,有簡單的有復雜的,比如正向最大匹配,反向最大匹配,雙向最大匹配,語言模型方法,最短路徑算法等等,有興趣的可以用GOOGLE去搜索一下以增加理解。這里就不展開說了。但是要記住一點的是:判斷一個分詞系統(tǒng)好不好,關鍵看兩點, 一個是消除歧義能力;一個是詞典未登錄詞的識別比如人名,地名,機構名等。 那么百度用的是什么方法?我的判斷是用雙向最大匹配算法。至于怎么推理得出的,讓我們一步步來看。當然,這里首先有個假設,百度不會采取比較復雜的算法,因為考慮到速度問題。 我們提交一個查詢“毛澤東北京華煙云”,又一個不知所云的查詢,盡管不知所云但是自有它的道理,我想看看百度的分詞是如何消歧以及是否有詞典未登錄詞的識別的功能,如果是正向最大匹配算法的話, 繼續(xù)測驗,提交查詢“古巴比倫理”,如果是正向最大匹配,那么結果應該是<古巴比倫,理>,如果是反向最大匹配,那么結果應該是 <古巴,比,倫理>,事實上百度的分詞結果是<古巴比倫,理>,從這個例子看,好像用了正向最大匹配算法; 當然還可以繼續(xù)追問:如果切分后單字也一樣多,那怎么辦?最后看一個例子,查詢“王強大小”,百度將其切分為“王/強大/小”,是正向切分的結果,如果是反向的會被切分為“王/強/大小”,這說明有歧義而且單字也相同則選擇正向切分結果。 OK,看到這里可能頭已經有些暈了,最后總結一下百度的分詞算法,當然里面還是有猜測的成分,算法如下: 首先查詢專用詞典(人名,部分地名等),將專有名稱切出,剩下的部分采取雙向分詞策略,如果兩者切分結果相同,說明沒有歧義,直接輸出分詞結果。如果不一致,則輸出最短路徑的那個結果,如果長度相同,則選擇單字詞少的那一組切分結果。如果單字也相同,則選擇正向分詞結果。 百度一直宣傳自己在中文處理方面的優(yōu)勢,從上面看,分詞算法并無特殊之處,消歧效果并不理想,即使百度采取比上述分詞算法復雜些的算法也難以說成是優(yōu)勢,如果說百度有優(yōu)勢的話,唯一的優(yōu)勢就是那個很大的專用詞典,這個專用詞典登錄了人名(比如大長今),稱謂(比如老太太),部分地名(比如阿聯(lián)酋等),估計百度采用學術界公布的比較新的命名實體識別算法從語料庫里面不斷識別出詞典未登錄詞,逐漸擴充這個專門詞典。如果這就是優(yōu)勢的話,那么這個優(yōu)勢能夠保持多久就是個很明顯的問題。 到此,我們講述了百度搜索引擎算法的查詢處理及中文分詞技術,技巧很多,希望seoer能夠認真揣摩,在搜索引擎道路上越走越順暢。 本文出自:億恩科技【1tcdy.com】 |