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