3
本文作者: 硬創(chuàng)觀察 | 2015-11-09 10:58 |
昨天,搜狗、知乎公布了兩家最近的戰(zhàn)略合作,其中最主要的內(nèi)容便是搜狗技術(shù)支持知乎,大大提升了后者的搜索體驗。那么在這以前,知乎的搜索為什么這么爛呢?來聽聽專業(yè)做搜索的搜狗搜索工程師怎么說。
本文作者許靜芳,系搜狗搜索技術(shù)總監(jiān)。原文刊載于知乎,雷鋒網(wǎng)已獲得作者授權(quán)。
圖為知乎吉祥物"劉看山"。
搜索是技術(shù)方向輻射相當(dāng)廣的一個復(fù)雜系統(tǒng),其技術(shù)門檻之高,在眾多的互聯(lián)網(wǎng)產(chǎn)品中能與搜索比肩的是少之又少。要想玩轉(zhuǎn)這套系統(tǒng),擁有一批最優(yōu)秀且懂搜索的工程師和研究員是必不可少的。我看到之前 @熊辰炎同學(xué)也提到說想解決的話,知乎可能需要5個熟練工干大半年。在我看來,這種團隊配置作為站內(nèi)搜索差不多能解決大部分基礎(chǔ)問題,即達(dá)到不被“到處”抱怨。但如果要求再高一點點,能稍”智能”地處理用戶查詢,那么這種團隊配置恐怕還是望塵莫及。
當(dāng)然搜索也絕不僅僅是一個人力問題,支撐搜索的人工智能技術(shù)正在”經(jīng)驗主義”(以統(tǒng)計學(xué)為代表)的道路上享受著大數(shù)據(jù)(特別是用戶行為數(shù)據(jù))的紅利。從一個特定站點出發(fā),即使是一個格調(diào)高、深受用戶喜愛的站點,其能夠接觸到的數(shù)據(jù)無論是用戶群體行為數(shù)據(jù)還是全網(wǎng)的信息資源都是十分有限的。用戶對于全網(wǎng)通用搜索和站內(nèi)搜索的期望差別僅在于搜索范圍從全網(wǎng)變?yōu)檫@個特定站點,但搜索用戶天生的”懶惰”、表達(dá)含糊以及對搜索結(jié)果智能的期待從未改變過。而且由于用戶對他所喜愛的站點的了解、熟悉程度遠(yuǎn)遠(yuǎn)超出其對全網(wǎng)的了解,所以用戶對搜索服務(wù)所存在的各種問題更為敏感,從而也有更高的要求。正是這種數(shù)據(jù)局限所帶來的技術(shù)水平局限與用戶需求之間的矛盾,使得原生站內(nèi)搜索注定就是一件不太可能成功的路。
扯遠(yuǎn)了,回到作為一個技術(shù)人員解釋為什么知乎站內(nèi)搜索沒有通用搜索(例如百度、搜狗)的site查詢好用吧。
@張前川 關(guān)于搜索效果的評測解釋得已經(jīng)比較完善了,下面我就以這幾個case為例解釋一下通用搜索是如何解決背后的技術(shù)問題吧。主要分為NLP/相關(guān)性計算/排序這幾個方面。
1.1 分詞(Word Segmentation)
搜索中的分詞是指將文本切成多個獨立的語義單元以作為檢索的最小單元,然后分詞后的詞串建立倒排索引以加快檢索服務(wù)的速度。這是信息檢索最基本最重要的架構(gòu),這里不詳細(xì)展開。
先看看張前川提到的“避谷”這個case,正如張前川所說,避谷應(yīng)該切成一個獨立的詞。為了解釋后面的算法,我把case改成“避谷方法”,更容易說明問題,它的正確切詞方法是【避谷】【方法】。如果把避谷分成【避】【谷】兩個單字,就容易出現(xiàn)知乎站內(nèi)搜索這種【避】【谷】兩字分開出現(xiàn)的結(jié)果,也是我們常說的結(jié)果發(fā)生語義漂移。那么如何知道【避谷】應(yīng)該是個獨立的詞呢?
最經(jīng)典的分詞方法有基于詞典的前向/后向最大匹配或基于語言模型的分詞等等,其中如何構(gòu)建準(zhǔn)確而全的詞典,用什么語料統(tǒng)計適用的語言模型都是算法成功的關(guān)鍵所在。
問:通用搜索如何解決這個問題呢?
答:挖掘網(wǎng)絡(luò)語料或用戶行為數(shù)據(jù)!
a. 對于基于詞典的方法,由于“避谷”是個道家的一個術(shù)語,有可能分詞詞典里不包含這個詞。那么通用搜索通??梢酝ㄟ^挖掘網(wǎng)絡(luò)語料(例如百科詞條)來補充詞典。
b. 對于語言模型或其他統(tǒng)計方法,用戶群體歷史的行為數(shù)據(jù)就是一種非常有價值的數(shù)據(jù)。這里僅提一個思路。歷史上搜索“避谷方法”的用戶,所點擊結(jié)果的標(biāo)題中“避”與“谷”很大概率彼此緊鄰,“方“法”很大概率緊鄰,而“谷“與”方法”很小概率緊鄰。由此可以推斷【避谷】【方法】應(yīng)該相互連接組成一個詞,而“避谷”與”方法”之間切分開來更合適。利用用戶歷史行為數(shù)據(jù)的方法還有很多,大家也可以打開思路。
1.2 查詢糾錯(Query Correction)
再看“什么名字haoting“這個case,非常直觀,大家都能看出來是用戶把查詢詞的一部分敲成拼音了,需要系統(tǒng)自動糾錯。當(dāng)然這是個簡單的糾錯,只要找到haoting對應(yīng)的上下文語言模型概率最大的漢字“好聽”即可糾正過來。
有些需要糾錯的case就不那么容易了。例如“哦泡手機”,原意是找“oppo手機?!比四X能夠非??焖贉?zhǔn)確的完成這一個糾錯過程,但對于不具備智慧的機器,這個轉(zhuǎn)換過程并不那么容易。
針對這個case算法糾錯的過程大致應(yīng)該是這樣:首先把”哦泡”轉(zhuǎn)換成拼音“opao“,然后計算“opao”和“oppo”之間的編輯距離(一種度量文本串之間相似程度的方法),然后通過多種數(shù)據(jù)和模型計算出來“哦泡”糾錯成“oppo”的概率,特別是在上下文為“手機”的條件下“哦泡”糾錯成“oppo”的概率。這里面的每個步驟都同時需要算法與數(shù)據(jù)的支撐,通用搜索面對更多的數(shù)據(jù)和更更多的用戶,顯然有非常大的優(yōu)勢。
1.3 查詢理解(Query Understanding)
查詢理解這個概念比較廣,廣義上前面提到的分詞、查詢糾錯也可以納入查詢理解的范疇,這里我們主要用查詢理解來概括查詢改寫、詞間緊密度、詞賦權(quán)等一系列的對查詢的理解以幫助獲得更好的搜索結(jié)果。前川前面給出的“101大廈”就是一個比較綜合的例子,但是這個case我有些不同看法。
首先“101大廈”合在一起表示一個完整語義的實體,所以相關(guān)的結(jié)果中101和大廈應(yīng)該緊鄰在一起。前川說應(yīng)該分成一個詞,但出于搜索查全率的考慮,即盡可能找到更多的相關(guān)結(jié)果,它們還是分開比較好,因為“101大廈”還有很多種其他的叫法,例如“臺北101””101大樓”等等。挖掘出101大廈的這些等價(或同義)說法對于搜索效果至關(guān)重要。這種等價或同義的算法用在搜索中就是查詢改寫一種最常見的形式。
但是“101”和“大樓”之間又存在非常緊密的關(guān)系,兩者如果在文檔中相距太遠(yuǎn),結(jié)果通常是不相關(guān)的。這里涉及的是另一個概念——緊密度,即既需要切成兩個獨立的詞,但又要求結(jié)果中這兩個詞之間的距離足夠近,某些情況要求一定緊鄰。
查詢改寫、緊密度同樣依賴于網(wǎng)絡(luò)資源的挖掘以及歷史用戶行為的挖掘,例如用戶在同一個session內(nèi)的主動改寫、用戶查詢后的點擊、具有相似點擊結(jié)果的多個query等等…每種數(shù)據(jù)的合理應(yīng)用,都能讓搜索效果有所提升。通用搜索正是利用其數(shù)千億網(wǎng)頁索引庫以及每日數(shù)億次的用戶查詢及后續(xù)行為,在大數(shù)據(jù)上逐漸積累對查詢理解的智慧。這些恐怕任何一個站點都無法觸及的。
前面提到的都是NLP相關(guān)內(nèi)容,我們再來看看搜索里另一個核心技術(shù)—相關(guān)性計算。相關(guān)性計算通常指給定一個查詢和一篇文檔,計算兩者是否語義相關(guān)。語義相關(guān)是個非常大的挑戰(zhàn),從技術(shù)的發(fā)展歷程來看,從早期的統(tǒng)計詞出現(xiàn)的頻率,例如tf.idf、BM25、到language model、proximity等等都試圖從查詢詞在文檔中出現(xiàn)的次數(shù)、位置、詞的權(quán)重、文檔的長度等等多個角度去估計查詢與文檔之間的相關(guān)度。近來在深度學(xué)習(xí)的影響下,基于深層神經(jīng)網(wǎng)絡(luò)的詞嵌入、語義表示、語義匹配等新興技術(shù)的涌現(xiàn),正在帶領(lǐng)相關(guān)性計算由匹配統(tǒng)計邁入“語義計算”的大門。搜狗、百度已經(jīng)在這這方面取得了階段性的成功,同時這個方向還有很多問題待解決,讓我們拭目以待吧。
就前川提到的“為什么要來北京”這個case,可以從多個角度解決。例如通過查詢理解,我們可以知道“北京”在這個查詢中是個非常重要的詞,而標(biāo)題包含重要的詞的文檔相比于僅正文包含重要詞的文檔中有更大概率與查詢詞先關(guān)。前川提到的第二條結(jié)果不相關(guān),”北京”即僅僅出現(xiàn)正文里。解決這個問題的思路還有很多,要想做個搜索,需要從多個維度去闡述查詢與文檔之間的關(guān)系,這是一項需要相當(dāng)深積累的工作。
排序,望文生義即將搜索結(jié)果按照滿足用戶需求的程度從高到低排序,以便最滿足用戶需求的結(jié)果能夠排在搜索結(jié)果列表的最前面,讓用戶能夠最先瀏覽到。排序主要涉及兩大問題:用于排序的多維特征以及多維特征的融合以決定最終的順序。
相關(guān)性無疑是搜索排序的一類非常重要的緯度,我們前面也提到相關(guān)性自身也需要從多個更細(xì)緯度去剖析。正如很多用戶提到的,知乎是問答社區(qū),有人提問、有人回答、還有人點贊、關(guān)注,為什么知乎返回的結(jié)果很多都零回答、零關(guān)注。其實問題的回答數(shù)、關(guān)注數(shù)、點贊數(shù)都是衡量一個文檔質(zhì)量非??陀^的指標(biāo),這些對于衡量問題是否能夠滿足用戶需求都是非常有價值的,也就是說這些都應(yīng)該成為排序所考慮的特征。
那么這么多特征相互如何融合來決定最終的順序呢?有很多基于規(guī)則或線性融合的方法,近年來排序?qū)W習(xí)(Learning to Rank)的方法已經(jīng)無數(shù)次在各種競賽、學(xué)術(shù)論文、工業(yè)界產(chǎn)品中將排序多特征的融合的結(jié)果帶入或逼近局部最優(yōu)解或全局最優(yōu)解。
無論是排序特征的準(zhǔn)確與豐富還是排序融合,都是搜索工程師們孜孜不倦地不斷優(yōu)化的方向,經(jīng)驗與積累也是非常重要的。
大部分用戶會認(rèn)為搜索效果和搜索性能沒有什么關(guān)系,但實際上兩者是緊密聯(lián)系在一起的。由于服務(wù)負(fù)載的壓力、用戶響應(yīng)時間的限制,分給每次用戶查詢的計算資源和時間是非常有限的。底層的檢索的性能越好,所能查找的候選文檔越多,所留給排序優(yōu)化的時間越多,越能使用更豐富的特征和更復(fù)雜的算法,達(dá)到更好的排序效果。簡而言之,性能越高,效果提升空間越大。
除了最基本的倒排索引,架構(gòu)上還有很多可以優(yōu)化的點。例如對歷史數(shù)據(jù)的批量倒排和針對新數(shù)據(jù)或更新數(shù)據(jù)的實時倒排的設(shè)計,其次針對標(biāo)題、正文等重要度不同字段的處理、倒排的壓縮,快速交并算法、靈活的多機分環(huán)架構(gòu)等等這些都是一個好的搜索架構(gòu)需要考慮的問題。而好的架構(gòu)的設(shè)計也是來源于對于搜索這個任務(wù)足夠深刻的理解,如果沒有對搜索多年的打磨,一名再優(yōu)秀的架構(gòu)師也是不可能設(shè)計出一套完美的搜索架構(gòu)的。
啰嗦很多,總結(jié)一下,知乎搜索體驗不理想,存在多種問題,但這些問題絕不是知乎僅有的問題,也不僅僅是人力投入的問題。搜索一個異常復(fù)雜的系統(tǒng),好的搜索體驗需要技術(shù)的沉淀與積累,需要海量數(shù)據(jù)特別是海量用戶行為數(shù)據(jù)的支撐。站內(nèi)搜索就于其在搜索方向的積累、其能接觸到的數(shù)據(jù),像知乎這樣面對高標(biāo)準(zhǔn)嚴(yán)要求的用戶,注定不易做到用戶滿意。
當(dāng)然凡是問題,是都能夠被解決的。
(編者注:從昨天的發(fā)布會看,知乎的搜索問題看起來已經(jīng)解決了大半。搜狗的『知乎搜索』目前也已經(jīng)上線。)
作者:許靜芳
鏈接:http://www.zhihu.com/question/26617244/answer/70802668
來源:知乎
商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。