搜索:由流程框架到實現方法

1 評論 11157 瀏覽 89 收藏 29 分鐘

本文希望將“搜索”這一功能點進行拆分,盡可能深入闡釋本人對它的理解。同時,本文宗旨在于交流,若其中有不足或不準確的地方,歡迎讀者批評指正。

搜索流程框架

1. 產品視角

“搜索”功能對于前端用戶僅是點擊+輸入+搜索,三步操作。但如何通過這三步,在海量內容中精準定位用戶需求,是“搜索”功能的本質。

基于本質需求的搜索功能擴展,其實可以很形象得概括為:如何滿足以下幾類用戶的搜索需求。他們對于搜索功能的需求層級是如此完成深入遞進的。

  • 用戶1:我知道自己想要什么信息;
  • 用戶2:我知道自己大概想要的是什么信息;
  • 用戶3:我想要信息,但不確定具體哪方面;
  • 用戶4:我現在不想要信息,但可以隨便看看;
  • 用戶5:什么都不想要,我也不會點進去的,別打擾我,謝謝。

2. 技術視角

滿足并實現上述需求,光從產品視角拆分完全不夠,更需要從技術角度理解搜索功能。我們可以將上圖的幾步繼續拆分,具體的拆分流程框架可以參考下圖。

之后篇幅會按照這張搜索流程框架圖的脈絡一步步進行講解。

點擊搜索框

點擊搜索框約等于在產品中找到搜索功能的位置,而搜索功能的位置主要是取決于產品本身對于搜索的依賴程度。由于相關交互的講解,有大量成熟且優秀的輸出,這里我就簡單帶一下。

比較常見的搜索入口設計方式有如下幾種:

1. 位于頁面頂部,導航欄中

搜索框為與頁面頂部的導航欄中間,除了搜索框本身外,往往還有搜索ICON+暗文提示詞+拍照或語音ICON。此類設計適合信息量較大,用戶對搜索有強依賴需求的產品。

下圖展示的產品分別為:拉鉤、大眾點評、攜程

2. 位于導航欄中,精簡為放大鏡ICON

精簡過后的搜索入口相較于搜索欄弱化了不少,適用于已推薦為主搜索為輔的產品。此外,精簡后省下的空間,可以放置其他功能模塊入口,頁面布局更加靈活。

下圖展示的產品分別為:支付寶財富、人人都是產品經理、脈脈

3. 位于頁面底部單獨的搜索模塊

效果類似于導航欄中的搜索ICON,但較之有更重的業務側重。將搜索與底部標簽放在一起,強化用戶對于搜索推薦頁獨立存在的認知,同時給到此頁面承載復雜功能的心理預期。

在此頁面內,往往會將搜索與推薦、篩選、信息流等功能點結合在一起。

下圖展示的產品分別為:拼多多、綠洲、微博

輸入關鍵詞

設計輸入框或搜索頁面時,核心思想就是幫助用戶更快更好完成輸入操作,其次是保留一定的運營能力或業務引導能力。

現在已有較為成熟的設計方案,可在用戶輸入關鍵詞的過程中,通過微交互來達到目的。

1. 搜索欄內的引導暗文

現在采用通知欄搜索框中置設計的產品,往往都會在搜索欄中添加引導暗文。

它的作用主要有兩種:其一,教育新用戶可以搜索哪些關鍵詞,熟悉搜索框的操作;其二,承擔運營推廣職能,將業務需要的內容置于搜索欄內,可有效提高用戶的觸達率。

下圖展示的產品分別為:拉勾網、今日頭條

2. 搜索歷史

搜索歷史是用戶之前手動輸入并搜索過的關鍵詞的匯總,點擊后可直接跳轉,普遍按照用戶搜索的時間順序進行排序。因為用戶往往會重復搜索同一關鍵詞,搜索歷史功能可幫助用戶更高效地完成操作。

由于在使用了一段時間產品后搜索歷史可能較多,在超過了一定數目后便會收納展示,或僅展示最近搜索的幾個結果。同時搭配上搜索歷史刪除功能,一般有一鍵全部刪除和逐條刪除兩種交互方式。

下圖展示的產品分別為:天貓、微博、今日頭條

3. 熱門搜索

熱門搜索是一種輔助用戶搜索的方式,當用戶需求并不明確時,可以起到很好的引導效果。

一般熱門中展示的內容可分為兩部分:一部分為高頻搜索詞,便于用戶決策;一部分存在一定的運營職能,將活動或是商品關鍵詞作為熱搜,提升曝光機會。

因此在設計時需要考慮到:

  1. 熱搜是否具備運營能力;
  2. 運營位與真實熱搜位的個數或占比;
  3. 熱搜榜的排序規則;
  4. 是否需要增加其他交互元素(TAG、TAB、查看更多)。

下圖展示的產品分別為:華為應用超市、微博、網易云音樂

4. 限定范圍的搜索

由于部分產品的業務線十分龐大,導致搜索結果內容的命中效果不佳。因此有些產品會選擇在搜索動作之前完成篩選,這就是限定范圍的搜索。

下圖展示的產品分別為:馬蜂窩、微信

Query分析

用戶輸入關鍵詞(Query)的過程中,系統會對用戶輸入的關鍵詞進行分析,做出一系列操作,例如:糾錯、改寫、補全、近義詞、模糊或實時搜索等。

這不僅能夠幫助到用戶高效完成搜索內容的正確輸入,更對自然語言轉化機器語言及信息索引提供了便利,對搜索結果的覆蓋率和相關性至關重要。

以下介紹幾種常見的Query分析方式。

1. Query糾錯

根據用戶輸入的關鍵詞(Query),搭配一些其他的可用信息,由算法判斷用戶輸入的內容是否為錯誤關鍵詞。

若判斷為輸入錯誤,則通過噪聲信道模型猜測正確的關鍵詞。將用戶輸入的關鍵詞做模型輸入,輸出后得到猜測后的關鍵詞。在前端提示用戶選擇或直接按照正確關鍵詞進行檢索。

糾錯的場景主要可以分為:

  1. 同音糾錯;
  2. 形似字糾錯;
  3. 多字、少字、順序錯誤;
  4. 模糊音糾錯。

Case1:

用戶輸入<JOJOdeqimiaomaoxian>,在同音糾錯角度發現可能用戶想搜索的是<JOJO的奇妙冒險>,因為你都是英文字母所以不存在形似字,少字角度可以是<JOJO的奇妙冒險故事>。

這些猜測匯聚為候補集,通過噪聲模型推分數最高的關鍵詞。

Case2:

用戶輸入<今月頭條>,同音糾錯好像沒什么聯想空間,形似字糾錯角度可能是<今日頭條>,少字角度猜測可能是<這個月的新聞頭條>。我們都知道用戶想搜的肯定是<今日頭條>。

Case3:

也是一樣的道理,根據用戶輸入的上一句,對出下一句。

2. Query改寫

關鍵詞(Query)改寫是通過分析原始關鍵詞,生成一系列與原始關鍵詞相關的信息,作為補充,與原始關鍵詞一起參與搜索,從而得到更加準確的搜索結果。

自然語言中存在大量的一詞多義現象,比如<蘋果>,用戶想要的可能是水果也可能是手機等電子產品;比如<西紅柿>和<番茄>,同一物體有不同的表達方式;又比如搜索<酒店>,實際的需求并不是了解酒店信息而是預訂酒店客房。這些場景語義不確定的場景均可以通過關鍵詞改寫的方式來解決。

關鍵詞改寫的常用方法主要有:

  1. 基于關鍵詞的內容;
  2. 基于關鍵詞的點擊行為;
  3. 基于語義信息的標簽及標注。

Case1:

用戶輸入<男士襯衫>,算法基于關鍵詞內容和平臺自身屬性,猜測用戶的真實需求是購買襯衫。不再在原關鍵詞的框架內進行聯想,而是對關鍵詞進行了擴充改寫,增加了<長袖><商務免燙><長袖條紋>等維度,幫助用戶確定搜索需求。

Case2:

用戶輸入<高達>,但由于用戶的歷史操作中點開過包含<高達模型>的SKU,因此算法對關鍵詞進行了改寫,優先推薦和<高達模型>有關的關鍵詞給到用戶。

這里可以看到前十個改寫結果中有7個和高達模型相關,且排序優先級很高。

切詞

用戶在選擇好關鍵詞后,后臺開始搜索,需要將關鍵詞與詞庫中的內容或商品進行匹配,這一步叫做檢索或索引。

詞庫有限,但關鍵詞無限。如何將無限的關鍵詞索引到有限的詞庫,就需要用到切詞。切詞的本質即是將關鍵詞按照字符進行拆分,重組為幾個字符串的集合。

以下介紹處理文本時主要涉及到的幾個問題:

1. 文本詞條化

主要任務是將一段連續的文本序列拆分成多個子詞條,由于語言本身的差異,處理文本的方式也不盡相同。

由于中文本身含義緊湊且多歧義的特性,一般需要借助NLP對特征進行抽取甚至人工標注,生成對應的詞典后利用分詞器完成分詞。

2. 停用詞過濾

某些情況下,一些常見的詞條對于搜索結果匹配的價值并不太大(例如“的”“了”),這些詞往往屬于超高頻詞匯,在自然語言中經常會被用到。但被使用的頻率越高,它本身的價值也就越小。

這類沒有價值的詞條就被稱為停用詞,需要在檢索時自動忽略,可以大大減少索引庫產生的壓力。

現有的停用詞表從200-300詞的大停用詞表到只有幾個詞的小停用詞表應有盡有。但近年來的趨勢是不再使用停用詞,通過利用語言的統計特性來更好的處理常見詞問題。

3. 詞條歸一化

在完成上述兩步后,一段文本被分為了多個有效詞條。但往往檢索時,這些詞條還是不能和索引庫一一對應,此時就需要詞條歸一化。它的實質是指將看起來不完全一致的多個詞條歸納成同一個等價類的過程。

在實際場景中,主要包括特殊符號的過濾、大小寫歸一、繁體轉簡體、全角轉半角等操作。

Case:

<Air-conditioner>-<Air-conditionor>

4. 詞干提取

詞干提取是英文語料預處理的一個步驟,中文并不需要。本質是去除單詞的前后綴得到詞根的過程。一些常見的前后綴有<第三人稱單數>、<進行式>、<過去式>等。

Case1:

<Ran>、<Running>、<Run>,詞干均可提取為<Run>

詞干提取在實現方法上,主要利用規則變化進行詞綴的去除和縮減,將詞轉化為詞干,達到詞的簡化效果。但并不是所有輸出的詞干都是有意義的。

比如<revival>提取詞干后,輸出的是<reviv>,它本身并沒有含義,解決上述問題需要依賴詞形還原。

5. 詞形還原

詞形還原是基于詞典,將單詞的復雜形態轉變為最基礎的形態。它不像詞干提取,只是簡單地將前后綴去掉,而是會根據詞典將單詞進行轉換。

Case:

<Happier>、<Happily>、<Happiset>都可以轉換為<Happy>

詞形還原在原理上與詞干提取的縮減不同,而是采取了轉化的方法。需要對詞形進行分析,不僅要進行詞性識別,還要進行詞綴轉化,詞性標注的準確率直接影響到轉化的準確率。

更重要的是,詞形還原后的關鍵詞是具有一定意義、完整的詞匯,解決了詞干提取后詞根無意義的問題。

倒排索引

索引類似于一本書的目錄,倒排索引是索引技術中的一種,基于關鍵詞主題的屬性值進行構建。

現代的搜索引擎絕大多數都是基于倒排索引來構建,這是因為用戶在搜索時往往只會輸入主題的某一部分關鍵詞。

Case:

下圖展示了正向搜索與倒排索引兩個流程之間的逆推關系。用戶通過搜索<高達模型>,得到了一個具有如下屬性的召回結果。

逆推過來,用戶也可以通過搜索這些屬性,召回<高達模型>。大大加快了檢索速度和而效率,也提高了準確度。

經過倒排索引召回的結果即可稱為候補集,再對候補集進行排序操作后,即可輸出結果集。結果集就是用戶在前端親眼見到的內容。

排序

結果集的排序直接影響到搜索結果質量,越往前的結果就越容易得到用戶的點擊。好的搜索功能不只是召回結果,還要把最有吸引力的內容優先給到用戶。

搜索排序的基礎邏輯如下:用戶輸入關鍵詞形成多個有效詞條,系統會根據數據庫中內容是否包含這些詞條來決定是否展示,同時根據詞條和內容的相關性給要展示的內容一個分值,最后根據分值進行排序。

Case:

上面這個例子,用戶輸入關鍵詞<高達>,顯然優先推送<內容1>。不僅因為標題中出現了關鍵字,還因為業務數據表現要遠遠好于<內容2>。

其實,最終影響到排序的,就是取決于文本和業務數據所賦予的權重。這兩組數據影響了最終的排序,而如何安排這兩組權重,即是搜索引擎對業務的理解。

但實際情況下,排序算法要面對的場景比距離要復雜得多,有更多維度的數據需要考慮。

評估結果集效果

對于最終前端展示的內容,如何評估最終推薦的效果呢?在與策略相關的產品功能(搜索、排序、推薦)中,往往都涉及到機器學習算法,因此評估推薦效果就轉化為評估機器學習算法模型的好壞。

我們一般使用性能度量來量化模型的性能指標。在引入各種率之前,需要先了解它們的本質,也就是混肴矩陣。

1. 混肴矩陣

如果我們使用的是一個二分類模型,可以將預測情況與實際情況分別分為“真”“假”兩種情況,兩兩混合即可得到四種情況,由這四種場景組成了混肴矩陣。

為了增強可讀性,更清楚分辨預測結果是否正確,我們對上述混肴矩陣進行一定的變形。P(Positive)代表預測為真;N(Negative)代表預測為假;T(True)代表預測與實際相同,預測正確;F(False)代表預測與實際不同,預測錯誤。

轉化后的混肴矩陣如下圖(注意:列標題由“實際情況”變為“預測結果”)。

轉化后矩陣的閱讀方式應先看“預測結果”,再看“預測情況”,即可推測出真實情況。

  • TP:預測正確,預測情況是P,因此真實情況也是P
  • FP:預測鎖霧,預測情況是P,因此實際情況是N
  • FN:預測錯誤,預測情況是N,因此實際情況是P
  • TN:預測正確,預測情況是N,因此實際情況也是N

2. 召回率、精確率、準確率

(1)召回率(Recall)

召回率又叫查全率,它是針對原樣本而言的,它的本質是:在實際為P的樣本中被預測為P的概率,其公式為:召回率=TP/(TP+FN)

  • Case1:若樣本集中有100個P,通過模型預測出有40個P,那么召回率為40%;
  • Case2:在實際應用場景中可以以網貸違約率為例。我們更關心N類用戶,他們會造成違約導致公司損失嚴重。因此我們需要強調召回率,召回率越高,代表實際預測出來的N類用戶概率越高,為此不惜犧牲一些P類用戶。

(2)精準率(Precision)

精準率又叫查準率,它是針對預測結果而言的,它的含義是在所有被預測為P的樣本中實際為P的樣本的概率,其公式為:精準率=TP/(TP+FP)

Case:若通過模型預測的結果集中有100個P,而其中實際有60個P,則精準率為60%。

(3)準確率(Accuracy)

準確率是最常見的評估方式,它的本質是:預測正確的結果占總樣本的百分比,其公式為:準確率=(TP+TN)/(TP+TN+FP+FN)

雖然準確率可以判斷總的正確率,但若樣本集中P、N樣本極度不平衡,準確率結果回含有很大的水分,基本失去參加價值。

Case:樣本中P占90%,N占10%,我們將模型設置為所有樣本均預測為P的策略,則準確率有90%那么高,但實際上毫無實際意義。

(4)總結

在實際項目中,單方面追求精準率或召回率都是不正確的,理想情況是做到兩者都高。

但魚和熊掌不可兼得,精準率高了召回率就會低,召回率高了精準率就會低。如果是做搜索,應該優先保證召回率的前提下提升精準率。

3. F值

通過上面的公式,可以看到召回率和精準率的分子是相同的,但分母不同。因此對于同一策略模型,同一閾值,可以統計出一組確定的精準率和召回率。

遍歷0-1之間的所有閾值,就可以畫出每個閾值下的關系點,從而得到一條曲線,稱之為P-R曲線。

得到了曲線,我們當然希望可以找得到一個精準率和召回率都很高的情況,但實際上很難做到,最好是可以找到二者之間的平衡點。

這時候就需要用到F1分數,為F分數的特殊情況。F1分數的本質是當召回率與精準率權重相同時,尋找二者能達到的最佳平衡。

F1的公式:F1=2*P*R/(P+R)

F的公式:F=(1+β^2)*P*R)/(β^2*P+R)

圖中的“平衡點”即是通過F1計算得出的。

但往往我們對召回和精準率的權重要求是不同的,因此也往往使用F2或F0.5來評價策略,兩者分別表示更重視召回率和準確率。

4. ROC、AUC

前文介紹了F值,但大家可以發現它僅能評估單點的效果而無法表示策略的整體效果。這里介紹的ROC/AUC是一套成熟的整體策略評估方法。

(1)真正率(TPR)/假正率(FPR)

但是在正是介紹ROC(Receiver Operating Characteristic)之前,需要先引入兩個指標,這兩個指標是ROC/AUC可以無視樣本中P、N不平衡的原因。

真正率(TPR)=TP/(TP+FN)

假正率(FPR)=FP/(FP+TN)

大家可以看到這里又需要用到之前介紹過的轉化后混肴矩陣,以防大家忘記我再貼一次圖。

(2)ROC(Receiver Operating Characteristic)

ROC的主要分析方法是一條ROC曲線,曲線中的每個點的橫坐標是FPR、縱坐標是TPR,每個點都描繪了在某一確定閾值下模型中真正的P和錯誤的P之間的關系。

因此我們可以遍歷0-1的所有閾值,繪制一條連續的曲線,這就是ROC曲線。

那么如何通過ROC曲線來判斷一個模型性能的好壞呢?回歸到我們的目的,當然是盡可能得提高模型預測正確的概率,降低預測錯誤的概率。

也就是TPR越高FPR越低,模型性能越就強。對ROC曲線而言,即曲線越陡,越接近坐標左上角,性能越強。

(3)AUC(Area Under Curve)

如果我們想繪制出ROC曲線上的點,就需要遍歷閾值,多次回歸模型,這種做法效率非常低。因此我們可以用另外一種方法來代替ROC,即AUC,計算曲線下面積。

如上圖虛線,若我們將對角線連接,它的面積正好是0.5,代表模型完全隨機判斷,P/N概率均為50%。若ROC曲線越陡,AUC就越接近正方形,面積越接近1。AUC的值一般都介于0.5-1之間。

5. 其他評估方式

除了上述提到的ROC/AUC,還有一些其他的評估方式,各有各的優點。

Prec@k和MAP:除了考慮召回結果整體準確率之外,還會考慮召回結果的排序

CG/DCG/nDCG:之前的指標都是將目標值分為P和N兩種情況,但用這種算法可以用更多維度的指標來評估。比如可以將目標值分為Good、Fair、Bad三類,也可以按照評分。

#參考資料#

《精準率、召回率、F1值、ROC、AUC各自的優缺點是什么》https://www.zhihu.com/question/30643044

《機器學習筆記》https://zhuanlan.zhihu.com/p/46714763

《搜索產品經理的日常工作》https://www.douban.com/note/693904092/

《GOOGLE官網》https://www.google.com/intl/zh-CN/search/howsearchworks/algorithms/

《倒排索引》http://www.aharts.cn/pmd/745525.html

《如何設計一個好的搜索功能》http://www.aharts.cn/pd/1607289.html?sf=mobile

《倒排索引》http://www.aharts.cn/pmd/745525.html

《如何改寫Query》https://www.cnblogs.com/a-du/p/9709171.html

 

本文由 @Willy_G 原創發布于人人都是產品經理,未經作者許可,禁止轉載。

題圖來自Unsplash,基于CC0協議。

更多精彩內容,請關注人人都是產品經理微信公眾號或下載App
評論
評論請登錄
  1. 每一個功能實現的背后,都應該充分考慮到它的用戶使用背景以及需求,

    回復