Tuesday, March 25, 2008

中文搜尋日久見人性?

相信大家都有在電腦上使用搜尋功能的經驗,不管是 Google、Yahoo、或是應用軟體內裡的搜尋功能。一般最簡單搜尋方式的不外乎是輸入一個詞,然後如果網路上或文件裡出現一模一樣的詞,就會被找到。不過有些搜尋功能不止是這樣,而是會對搜尋條件與結果做多一點的干預。Mac OS X 10.5 Leopard 的中文搜尋就是這樣。

Leopard 有一個新的「tokenization」機制,可以把一向連在一起的中文字做某種的分隔。在蘋果網站的 Leopard 新功能介紹中就說到,10.5 裡增加了新的中文「tokenizer」,它會根據中文字之間的關係與意義,聰明地這些字分割開來,以呈現關聯性最高的搜尋結果。

Tokenization 就是把一連串的字元切開,變成一個個有作用的單位,例如在處理中文時,語言中的「詞」(word) 就是一個很好用的單位,只是在電腦的處理上,這些 token 不一定會跟真實語言中的單位完全吻合,而通常會是對程式的目的有用或有幫助的單位。例如「美國總統候選人」只是一串連續的字元,對程式來說由於沒有其他資訊,可能只能做最基本的搜尋,但經過 tokenization 後可能會分成「美國 總統 候選人」之類的,電腦認得這些單位後,就有機會可以呈現更好的搜尋結果。假如使用者用「共和黨候選人」當關鍵字,而這幾個字元也被切成「共和黨 候選人」的話,則「美國總統候選人」這句話就可以被找出來而呈現在搜尋結果裡,因為兩者都有「候選人」,當然由於「共和黨」一詞未出現,所以其關聯性可以被定得低一點。 假設現在有「什麼時候選人類學教科書?」這句話,它雖然表面上有「候選人」三個字,但如果被切成「什麼 時候 選 人類學 教科書 ?」,那麼在搜尋時就可能與「美國總統候選人」產生不了很大的關聯。

現在用 Mac OS X 10.5 底下的 Mail.app 來做搜尋會發現,用「垃圾郵件」、「垃圾」、「郵件」當作搜尋關鍵字,都可以找到內含「垃圾郵件」的信件,但是如果輸入「圾郵」來搜尋,照很多人的習慣會以為也可以搜尋到「垃圾郵件」,但事實上可能會搜尋不到東西。用 Spotlight 來搜尋也會有這樣的結果。此外,Google 也有類似的效果,例如搜尋「統計報表」,會發現有些只出現「統計」的、只出現「報表」的、或是「統計」與「報表」兩者都出現但分開出現在不同位置的網頁,也被搜尋出來。

這種做法會使搜尋有機會更貼近使用者的需求,不過對於有些已經習慣傳統搜尋的電腦玩家來說,可能會覺得有點囉嗦。在使用 Google 做搜尋時, 若使用者不要搜尋引擎這麼雞婆,可以用雙引號加在關鍵字上,例如打入 "共和黨候選人" ,就只有那些包含這六個字而且這六個字照關鍵字的方式一起出現的網頁才會被搜尋出來了。

但 Leopard 的搜尋有點奇怪, 若一篇文件只出現「報表」而沒出現「統計」,那麼用「統計報表」當關鍵字還是搜尋不到該文件的,不知道是不是搜尋條件本身不會被切開的關係。另外用「圾郵」一律找不出「垃圾郵件」四字,這對某些人來說會有點困惑,如果這時還是可以把「垃圾郵件」找出來,只是關聯度較低的話,也許會比較好用。像我自己在 Mail.app 中用「報表」兩字進行搜尋,竟會找不到標題為「垃圾郵件日報表」的信件,並不符合我的預期。顯然, 搜尋結果是否能讓使用者感到滿意,和 tokenization 的做法有很大的關係。

Leopard 的中文搜尋算是有新意,Google 甚至在搜尋的過程中不斷學習,似乎都是想更接近人性,但搜尋機制改變了,人似乎也要改變自己搜尋方式才能得到最好的結果,Leopard 大概就是一個例子吧。

本文同步刊登於符號工作站