中文分詞和搜尋引擎

2021-04-15 14:31:36 字數 3906 閱讀 7763

winter

搜尋引擎,上網的人基本上都不陌生了,cnnic的第17次《 網際網路調查報告

》顯示,使用搜尋引擎服務的網民,僅次於電子郵件。中文分詞,估計了解的人並不多,畢竟太技術,太底層。但中文分詞是中文搜尋引擎系統中的非常重要的模組,這裡之所以強調是中文搜尋引擎,是針對英文搜尋引擎來講,因為對於英文來說,空格代表詞和詞之間的分隔,也就不存在分詞問題。和中文搜尋引擎類似還有日文、韓文、泰文搜尋引擎等,都需要處理分詞問題。

目前的搜尋引擎,大多是基於一種稱為倒排索引的結構[1]。以什麼做為索引的key值,直接影響到整個搜尋引擎的準確度、召回率[2]、速度。我們先看看不使用中文分詞的情況。

如果不使用中文分詞,可以採用單個漢字索引方式。例如,雅虎,先索引 '雅'字,然後再索引'虎'字。同樣,對於一篇文章,先把所有的漢字都單獨索引一次,並記錄他們的位置。搜尋過程中,也是先找'雅'字的所有文件,再找'虎'字的所有文件,然後做交叉'與'運算,即包含這兩個字,而且位置連續的文件才會做為符合要求的結果。這種方式是最基本的索引方式,現在有些小引擎中還在使用。但這裡存在乙個很有挑戰性的問題:總共的常用漢字才3000多個,我們每次查詢過程中,進行'與'操作的計算量會相當大,對於大資料量搜尋引擎來說(超過10億的文件),每天上億次查詢,這樣的索引結構,無疑是對硬體和演算法的極大挑戰。

考慮到速度問題,如果不使用分詞,還有另外一種選擇:n元組合索引方式,2元/3元等。拿2元來說,中國人, 先索引'中國', 再索引'國人'。同樣,對於一篇文章,以2為單位,把所有相鄰的漢字都索引起來,並記錄他們的位置。搜尋過程中,也是先找包含'中國'的所有文件,再找'國人'的所有文件,然後做交叉'與'運算,即包含這兩個單元,而且位置連續的文件才會做為符合要求的結果。這樣以兩個字做為索引單元,可以大大減少在搜尋過程中的計算量。

以上兩種方式,都可以不需要分詞,也能實現搜尋引擎的索引和搜尋。但是這裡存在乙個不可忽視的問題:準確度。乙個很常見的例子:和服, 如果按照上面兩種方式,都會查到包含'主機板和服務器'的文件;北大也會得到'東北大學'。對於大資料量的搜尋引擎來說,每個搜尋次都會有成千上萬個結果,使用者已經很挑選他真正想要的文章,如果這裡還要增加許多錯誤,估計使用者體驗會極差。這時候,我們需要中文分詞。

詞,是中文語言中最小的語意單位。以詞為單位做為搜尋引擎的索引的key值,會大大提高搜尋引擎結果的準確性,同時保證了搜尋過程中計算量小。其實還有乙個優點,以詞為單位的索引,起索引庫會比上兩種方式的索引庫小很多。很明顯:如果以中國人做為乙個詞,那麼搜尋的時候,不需要任何'與'運算,索引的時候記錄也會減少。關於搜尋過程描述參看中文搜尋引擎技術揭密:系統架構

中文分詞技術的研究,已經有幾十年的歷史了,在20世紀80年代,我國就有人開始研究如何用計算機來自動分詞。如何讓機器去識別語言中最小的語意單位,不是一件很容易的事情。

如何進行分詞?對於程式設計師來說,最容易想到的辦法是,用乙個大詞典,把所有的詞都存入詞典中,掃瞄輸入的文字,查詢所有可能的詞,然後看哪個詞可以做為輸出。例如:

輸入文字:  我是學生

詞: 我/是/學生

其實這樣做了以後,可以解決60%的問題。總結起來,分詞的演算法分為:

基於字串匹配的分詞方法

基於理解的分詞方法

基於統計的分詞方法

關於這3種演算法的詳細介紹,可以檢視

中文分詞技術

,我這裡想介紹的是,如何處理新詞。

新詞,術語是"未登入詞",就是那些沒有收入到詞典裡面的詞。新詞主要包括:人名、地名、機構名、熱點新名詞等。例如:2023年之前,沒有人知道"非典"。"非典"剛出現的時候,這就是新詞。還有"超女", "****","芙蓉姐姐"。識別新詞的能力是評估乙個分詞系統的重要指標。在國際上每年進行的分詞大賽中,識別新詞的比賽也單獨提出。2023年sighan

的分詞大賽中,就增添了對於機構名識別的比賽。

如何識別新詞成為最近幾年分詞技術研究的重點。總結起來,無非分成兩種:

基於規則的方法。

基於統計、機器學習。

拿人名識別為例。你不可能把所有的人名都放入詞典中,這決定了人名注定會是新詞。從人名構造來說,很有規律:姓+名。張王劉李陳、天下一半人。也就是說可能有一半的人,是這五個姓。名也有一定規律:建華/建國/志強.....等有許多經常用於名字中的漢字;對於地名識別也可以找出很多規則,省/縣/村/鎮/灣/河等,都是很常用的字尾,如果他們出現,之前出現地名的可能性比較大。如果把這些規律轉化成計算機能識別的演算法,就是基於規則的演算法。這種基於規則的演算法簡單有效,而且發現規則可很方便加入。

規則總會有例外,規則過多以後,如何去權衡這些規則,會是十分頭疼的問題。人們試著告訴計算機目標,讓計算機自己去嘗試各種方法組合這些規則並得到最優引數,這就機器學習。隨著machine learning(機器學習)技術的不斷進步,其應用範圍也越來越廣,中文分詞演算法也從中受益。ann(人工神經網路), 最大熵模型, hmm(隱馬爾可夫模型)等演算法都在新詞識別中有應用。通過機器學習識別新詞的原理並不複雜。一般都是先定義一些特徵,然後利用訓練語料進行學習,建立模型。還是以人名識別為例,可以定義姓名前面的字、姓、名、姓名後面的字做為特徵,通過利用標註好姓名的語料庫進行學習訓練。

機器學習識別新詞的好處在於自動尋找一些識別新詞的特徵,其準確度和召回率都能達到比較高的水平。但機器學習演算法需要有足夠多的訓練語料,人工準備準確的大規模的訓練語料也會十分困難。另外,機器學習演算法一般速度會比較慢,優化速度,使之用於海量資料處理,也是使用機器學習的乙個關鍵點。

中文分詞除了在索引結構上影響搜尋引擎以外,還會如何影響搜尋引擎?

除了搜尋引擎的索引過程需要用到分詞以外,所有的搜尋之前也需要用到分詞。有些人誤認為"短語搜尋"(即兩端加上引號的搜尋方式,搜尋引擎基本都支援這種方式,檢視搜尋引擎幫助

)是直接拿字串去匹配不用分詞,因為結果看上去好像是字串匹配的結果。其實不然,短語搜尋同樣需要用分詞,只不過在結果中需要位置連續等嚴格限制。當位置連續時,在顯示摘要的時候,會讓你感覺只是用字串匹配。

除了在搜尋前端後端都需要用到分詞以外,搜尋引擎還有乙個原則:前端後端分詞結果應該一致。這意思是說,如果你在索引時沒有識別出"文德"的人名,你在搜尋時最好也別識別出來,這樣可以按照兩個單字的方式查詢,或許有正確結果,否則會查不到結果。反之也一樣。由於索引過程中,分詞輸入的一篇文章,有大量的上下文資訊,但在搜尋時,使用者輸入的可能只有幾個字,很多上下文資訊不在存在。如果過多使用統計或機器學習,很容易導致搜尋引擎的前端後端分詞不一致的問題。這也是搜尋引擎使用分詞和其他系統,如機器翻譯,使用分詞不一樣的地方。

中文分詞對於搜尋引擎的影響,還表現在對於使用者輸入詞意圖的識別。識別使用者的輸入詞是否是人名、**名、軟體名還是其他通用詞彙,能夠判斷使用者的意圖,從而提供使用者想要的結果。

yst 是yahoo search technology的縮寫。yahoo收購inktomi公司後,又收購了幾家做搜尋的公司,綜合打造出自己的搜尋引擎技術。最開始,雅虎沒有分詞技術(segmentation), 中文、日文、韓文....等都是使用的第三方的產品。後來,隨著雅虎正式進入中文搜尋市場,雅虎開始加強對中文分詞的研究,現在yst中使用的中文分詞系統已經是雅虎中國和雅虎美國工程師共同開發的版本--yws(yahoo word segmenter),而且現在還在持續不斷的改進。yws 在對於人名、地名、機構名等新詞識別方面有很不錯的準確度,對於query的分析提供了很大幫助。

然而,對於搜尋引擎廠商來說,沒有最好的分詞,只有最合適的分詞。如何改進分詞系統,配合以合適的索引結構,最終不斷提高使用者的滿意度,這是乙個長期的課題。

the anatomy of a large-scale hypertextual web search engine

召回率: recall. 即得到的正確結果佔所有應該得到的正確結果的比例。如:包含'雅虎'的正確的網頁應該有500個,但搜尋得到了600個結果,其中有400個是正確的,還有200個是錯誤的。那麼準確度是:400/600=66.67%, 召回率是:400/500=80%.

中文分詞和搜尋引擎

搜尋引擎,上網的人基本上都不陌生了,cnnic的第17次 網際網路調查報告 顯示,使用搜尋引擎服務的網民,僅次於電子郵件。中文分詞,估計了解的人並不多,畢竟太技術,太底層。但中文分詞是中文搜尋引擎系統中非常重要的模組,這裡之所以強調是中文搜尋引擎,是針對英文搜尋引擎來講,因為對於英文來說,空格代表詞...

中文分詞和搜尋引擎

winter 搜尋引擎,上網的人基本上都不陌生了,cnnic的第17次 網際網路調查報告 顯示,使用搜尋引擎服務的網民,僅次於電子郵件。中文分詞,估計了解的人並不多,畢竟太技術,太底層。但中文分詞是中文搜尋引擎系統中的非常重要的模組,這裡之所以強調是中文搜尋引擎,是針對英文搜尋引擎來講,因為對於英文...

中文分詞和搜尋引擎

搜尋引擎,上網的人基本上都不陌生了,cnnic的第17次 網際網路調查報告 顯示,使用搜尋引擎服務的網民,僅次於電子郵件。中文分詞,估計了解的人並不多,畢竟太技術,太底層。但中文分詞是中文搜尋引擎系統中非常重要的模組,這裡之所以強調是中文搜尋引擎,是針對英文搜尋引擎來講,因為對於英文來說,空格代表詞...