首頁>科技>

從PC時代到移動網際網路時代,搜尋滿足了人們從海量資訊中找到有價值資訊的需求,進一步提高了使用者的資訊消費能力和獲取資訊效率。筆者曾做過一個比較簡單的APP站內搜尋功能最佳化,查閱了許多搜尋功能設計資料。

於是乎便有了這篇搜尋文章,我將從搜尋最主要的三步理解使用者搜尋意圖、召回內容、排序內容來給大家講講搜尋功能設計的那些事。

大綱如下:

一、搜尋是為了解決什麼

二、如何設計站內搜尋

三、理解使用者搜尋意圖

四、召回內容

五、排序內容

六、query分析

七、寫在最後

一、搜尋是為了解決什麼

搜尋引擎在PC時代崛起,谷歌、百度透過輸入框和網頁搜尋結果來滿足網民的資訊消費,幫助網民打破各種資訊不對稱。谷歌、百度的搜尋資訊是相對開放的,使用者能在上面搜到大部分的內容。

隨著移動網際網路的普及,許多APP開始構建自己的內容生態,搭建自身的站內搜尋。谷歌、百度等搜尋引擎時從搜尋到內容,這些站內搜尋是從內容到搜尋,基於自家的內容生態來搭建搜尋功能。

對於使用者來說,使用者搜尋內容可分為幾種場景:

有明確想搜的內容並記得所有關鍵詞有明確想搜的內容但記不清所有關鍵詞無明確想搜的內容

所以對於使用者來說,搜尋是為了解決使用者明確或者不明確的搜尋需求,讓使用者能夠搜到想搜的內容。從更深一層來說,搜尋提高了使用者獲取資訊、內容的效率。

二、如何設計站內搜尋

站內搜尋對於搜尋系統來說,整個流程可以分為三步,分別是:

理解使用者搜尋意圖召回內容排序內容

整個流程裡,第一步理解使用者搜尋意圖會涉及到query預處理、分詞技術等技術,第二步召回相關內容一般用到的是索引倒序的技術,召回有相關性的內容,這裡會涉及到倒排索引和匹配度問題。第三步排序內容目前常見的有排序策略、機器學習。

產品經理需要做的主要是畫搜尋原型圖和制定召回相關性策略和排序策略,其他的主要是靠技術或者第三方去實現。

三、理解使用者搜尋意圖

使用者搜尋是整個搜尋系統的上游,只有理解了使用者的搜尋意圖,搜尋展現的結果才會是使用者想要的。如果對搜尋意圖理解錯了,不論我們的召回率和排序策略多麼牛,對使用者來說這次的搜尋其實是失敗的。

3.1query預處理

3.1.1拼音轉文字

3.1.2繁體轉簡體

對於一些有繁體輸入習慣的使用者,需要對使用者輸入的繁體字進行轉化,可以識別出其簡體。具體方案是透過詞表將繁體query轉化為簡體query,後續系統在將簡體query進行召回。

3.1.3自動糾錯

當用戶在搜尋框中輸入“于軍”,其實使用者想搜的是“俞軍”。系統可以對這個query進行判斷,判斷有沒有在索引庫命中文件,如果沒有,則需要對其進行預處理的自動糾錯。

自動糾錯可以透過維護糾錯表的方式實現。在糾錯表裡透過對映原詞給糾錯後的詞,從而實現query改寫。

目前自動糾錯在客戶端顯示上也有幾種不同的形式

強糾錯:直接改寫query,給使用者的提示一般為“已顯示XXX的搜尋結果”中糾錯:直接改寫query,給使用者的提示一般為“已顯示XXX的搜尋結果,仍然搜尋:X原詞XX”弱糾錯:不改寫query,只是給使用者提示“你是不是要搜尋:XXX”

3.1.4同義詞轉換

同義詞轉換從字面上理解就是能夠對query進行同義詞的理解。比如當用戶輸入“首都機場”,可以理解為“北京機場”,使用者輸入“國寶”,可以理解為“大熊貓”。

同義詞轉換技術對於query意圖理解非常重要,很多時候使用者不能很好地輸出自己想搜尋的內容,如果沒有同義詞轉換技術進一步處理,那麼召回的內容很有可能並不是使用者想要的。

同義詞轉換技術一般是透過獲取使用者的session日誌來分析相關的query。舉個例子,比如一個使用者輸入”國寶“後,查詢出來的結果不是想要的,從而沒有點選行為。該使用者接著輸入“大熊貓”,得到了想要的搜尋結果並點選了內容。那麼“國寶”和”大熊貓“之間就建立了聯絡。

當然,”國寶“也有可能和”國家寶藏”、“國家文物”等建立聯絡,基於統計後,可以計算出“國寶”與別的詞的聯絡權重。在召回相關性內容時,對關鍵詞和同義詞進行召回,並賦予不同的權重,權重分值可以放在相關性分數上。

3.2分詞技術

如果詞典裡沒有“無限的遊戲”這個詞,那麼就無法返回對應的內容,使用者的搜尋就到此結束。

詞典的詞是有限的,輸入的關鍵詞是無限的。為了解決這種情況,目前搜尋系統主要是透過分詞技術來實現。分詞的意思是將關鍵詞切分成多個詞。

比如“無限的遊戲“可以切分為“無限”“的”“遊戲”,採用不同的分詞技術出來的分詞結果也不同。比如有了“無限”“的”“遊戲”後,分詞會對應到詞典裡的詞,有對應的索引內容,召回了“有限與無限的遊戲”這本書。

中文分詞目前有三種分詞方法,分別是:

基於詞典的分詞基於語法的分詞基於統計的分詞

第一種基於詞典的分詞方法用的比較多,我簡單地為大家介紹一下。

基於詞典的分詞指的就是系統有一個詞典庫,當query的分詞與詞典的詞對應上了,就能召回詞典對應的索引文件。

分詞的粒度也是至關重要的,目前有許多這方面的規則和演算法。比較經典的有正向最大匹配、逆向最大匹配的規則、MMSEG演算法。

經過分詞切割後,使用者非標準的query就能被切分成標準的分詞,並能在詞典中匹配到詞,從而能索引回相關的內容。

當然產品經理不需要精通這些技術,瞭解概念和實現的結果即可。產品經理提出來的需求有可能是技術部門不支援的,或者不是該功能的最優方案。所以瞭解這些最基本的技術原理,有助於我們更好地設計搜尋功能和提合理的搜尋需求。

四、召回內容

4.1倒排索引技術

這一節,我們需要先說下搜尋很核心的技術——倒排索引技術。

搜尋系統有詞典和內容索引庫(資料庫),詞典裡的詞關聯匹配內容索引庫。當用戶輸入關鍵詞後,如果詞典裡有這個詞,線上會快速召回內容文件。如果詞典裡沒有這個詞,那這次的搜尋行為就沒有結果。

假設內容索引庫一共只有3個內容文件,分別是:

doc1:站內搜尋從0到1全流程設計doc2:搜尋應該怎麼設計才是對的doc3:產品小白怎麼入門站內搜尋設計

使用者輸入關鍵詞“怎麼設計站內的搜尋”,經過分詞後,詞典裡有這個詞,系統會召回對應的索引文件。索引庫如下圖所示。

在召回內容的時候,會根據新聞的這幾個屬性分別構建倒排索引。當然需要召回的欄位屬性是需要考慮的,並非所有屬性都得進行索引召回。

比如可以只對標題和簡介這兩個屬性進行倒排索引召回。召回的時候,我們認為標題跟關鍵詞匹配度高於簡介跟關鍵詞的匹配度,可以先以標題為維度倒排索引進行召回,接著再從簡介進行召回。

這樣的分級索引庫有利於提高檢索效率,同時能較快將優質和匹配度高的內容檢索出來。

五、排序內容

召回相關的內容後,如何排序呢?排序的策略決定了使用者最終看到怎樣的搜尋結果,所以這部分是相當重要的,同時也是比較複雜的。

我這裡提供兩種排序策略,一種粗排,一種精排(精排、粗排的叫法只是我為了區分兩種排序策略而定義的)。產品經理要根據具體的搜尋業務和需求來制定搜尋排序策略。

5.1粗排策略

粗排主要是透過維度來將召回的內容進行排序。以某新聞app為例,搜尋結果只是新聞(新聞內容包括圖文、純文字、影片)。召回的範圍是新聞標題和摘要。

召回的內容匹配度分兩個等級:

完全匹配

模糊匹配(字首、字尾、分詞等)

排序策略:

優先度:新聞標題>摘要,在優先度下按照下方的策略

I. 完全匹配>模糊匹配

II. 時效性(以天為單位)

III. 閱讀量優先

以上的粗排策略只是為了講解,具體的維度和排序指標不一定是我上面提及的。

5.2精排策略

精排策略是根據doc分數倒序排序。使用者輸入query後,召回了doc(內容),這些doc怎麼排序呈現給使用者呢?答案是根據每個doc的分數倒序呈現給使用者。

doc分數=文字相關性的值*重要度的值

文字相關性的值用dscore表示、重要度的值用Iscore來表示

則doc分數=dscore*Iscore

5.2.1文字相關性

文字相關性的數值怎麼計算呢?目前業界計算相關性的方法主要有三種,分別是tf-idf文字相關性、基於統計詞頻的BM25、空間向量模型。

我在這裡給大家介紹下非常經典的tf-idf文字相關性方法。這個方法不僅簡單,並且能解決80%以上的搜尋結果相關性問題。

5.2.1.1Tf-idf

Tf-idf中的tf全稱為Term Frequence,指的是詞頻,是指該詞在某文字的佔比。Tf越高,說明該詞在文字中越重要。

Idf全稱為Inverse Document Frequence,指的是逆文件頻率。在說idf前先介紹下df,df是文件頻率,是將包含該Term的文件數除以總文件數。比如一個Term在10個文件出現,總共有50個文件,那麼df值為10/50(1/5)。

講完df後,我們再聊回idf,還是上面的例子,那麼idf值為log(50/10)。由公式可以看出,idf越高,說明有該Term的文字越少,那麼該文字越就能代表該Term。

同時用log來表示,還能處理掉一些高頻詞對文字相關性的干擾。比如“的”“了”,這種高頻詞的Tf可能很高,但Idf會很小,接近於0,兩數值相乘後也會很小,能很好的排除這些高頻詞的噪音。

對於較為簡單的文字相關性排序,相關性的分值可以用Tf*idf來表示,分值越高,說明文字相關性越高。

5.2.1.2詞距與詞序

query被切割分詞成多個term後,term之間的距離與順序跟文字相關性有關。

舉個例子,使用者搜尋“產品方法論”,在索引庫裡恰好有兩個文件為“俞軍產品方法論”和“做產品的10個方法”,很明顯召回排序時,“俞軍產品方法論”應該要比“做產品的10個方法”排在更前。

但可能這兩個文件的Tf*idf值是一樣的,因為“產品”和“方法”這兩個term都有。所以我們需要關注term之間的距離和順序,在計算相關性分值時考慮進來,從而保證緊密度更高的term在召回的文件中出現距離更近更相關。

5.2.1.3term位置

不同位置相關性的重要程度會不同,以新聞搜尋來說,標題與關鍵詞的相關性是要重要於簡介與關鍵詞的相關性的。一般這種情況下,可以賦予一個係數到Tf*idf,最終dscore=a*Tf*idf(a是係數,比如標題可以賦予1,簡介賦予0.8)

5.2重要度

重要度指得是doc(內容)的重要程度(優質程度)。相關性得分差不多的內容裡會存在優質內容和劣質內容,一般情況下,我們會將優質內容排在更前面。當然也會有商業、廣告或者別的業務的考慮,這種情況下重要度得分就會更加複雜一些。

重要度得分(Tscore)由於跟query沒有直接關係,是每一個doc的實時屬性,所以這一部分的分數可以離線算好。

這樣有助於冷卻一些優質資料,想要獲得更高分數會越來越困難,使得馬太效應的強度降低一些。

三個指標的值不在同一區間,會嚴重影響最終的重要度得分(Tscore)的真實性。所以需要將三個指標的值歸一化,消除量綱,將資料值按比例縮放。

歸一化有幾種常見的方法,有取分數、min-max標準化、Z-score標準化方法等,透過這些方法將三個指標的取值範圍控制在0~1。(具體歸一化操作大家可自行搜尋,不在此展開)

如何確定a、b、c三個值呢?一般有兩種辦法:

專家、產品自行決定(拍腦袋或者透過多組資料來得出)透過機器學習來訓練,得出a、b、c的值

驗證這些值是不是對的,可以透過A/Btest、搜尋功能上線後的資料來驗證。

六、query分析

搜尋功能搭建好之後,如果搜尋功能對於整體業務來說很重要,那麼我們需要不斷地最佳化搜尋功能。最佳化搜尋功能不單單只是最佳化搜尋策略和演算法,還可以透過query分析來提升使用者搜尋體驗。

query分析指的是對使用者的查詢進行分析,使用者的搜尋軌跡能夠很好的幫助我們瞭解整體使用者的搜尋意圖,也能發現我們目前的搜尋滿足了使用者哪些搜尋需求,哪些搜尋需求還需要完善。

query分析可以分以下幾步來操作:

1、以月份為單位,從query中抽取1000個query樣本

2、針對query意圖進行分類,每個query樣本用兩個需求分類來表徵該query的搜尋需求

3、統計一類需求、二類需求query個數的佔比情況和搜尋次數佔比情況

query個數佔比=分類query個數/query總數

query搜尋次數佔比=分類query搜尋次數/總query搜尋次數

4、統計幾個資料:

query召回率=搜尋結果在準確的數量/應該被搜尋的結果數量

query準確率=搜尋結果在準確的數量/返回的結果數量

query需求滿足程度,可以根據搜尋結果質量得出query需求滿足程度,分為高中低三等級

透過以上四步,我們能獲得相應的資料統計,接下來就是需要對資料結果進行分析,透過分析來決策下一步搜尋需要怎麼最佳化。

舉個例子,比如在query需求滿足度中,分析出需求滿足度低的query需求是哪些,檢視搜尋結果,分析是什麼原因導致。

可能會是資料缺失、搜尋結果相關度低等原因引起,那麼我們後面如果需要提高這類query需求的使用者搜尋體驗的話,那麼就需要去解決資料缺失、搜尋結果相關度低的問題。

如果是資料缺失,那麼可以透過引入外面的內容、加大該類內容供給如果是搜尋結果相關度低,那麼可以改善匹配策略,召回更相關的內容

七、寫在最後

寫到最後才發現寫了這麼多,其實一個完整的站內搜尋不僅僅只是這些,理解使用者搜尋意圖、召回內容、排序內容這三步可以最佳化的地方實在是太多了。

隨著搜尋需求越來越高,傳統的方法無法滿足一些搜尋場景和目的。所以我們早已開始從演算法工程和機器學習切入,這部分我暫時還未涉及,不過最近有在看演算法,看看後面能不能從演算法的角度來跟大家講講如何提高對使用者搜尋意圖分析、如何提高搜尋相關性等。

14
  • 整治雙十一購物亂象,國家再次出手!該跟這些套路說再見了
  • 你做網際網路為什麼賺不到錢?