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