搜索:由流程框架到實現(xiàn)方法
本文希望將“搜索”這一功能點進行拆分,盡可能深入闡釋本人對它的理解。同時,本文宗旨在于交流,若其中有不足或不準確的地方,歡迎讀者批評指正。
搜索流程框架
1. 產(chǎn)品視角
“搜索”功能對于前端用戶僅是點擊+輸入+搜索,三步操作。但如何通過這三步,在海量內(nèi)容中精準定位用戶需求,是“搜索”功能的本質(zhì)。
基于本質(zhì)需求的搜索功能擴展,其實可以很形象得概括為:如何滿足以下幾類用戶的搜索需求。他們對于搜索功能的需求層級是如此完成深入遞進的。
- 用戶1:我知道自己想要什么信息;
- 用戶2:我知道自己大概想要的是什么信息;
- 用戶3:我想要信息,但不確定具體哪方面;
- 用戶4:我現(xiàn)在不想要信息,但可以隨便看看;
- 用戶5:什么都不想要,我也不會點進去的,別打擾我,謝謝。
2. 技術視角
滿足并實現(xiàn)上述需求,光從產(chǎn)品視角拆分完全不夠,更需要從技術角度理解搜索功能。我們可以將上圖的幾步繼續(xù)拆分,具體的拆分流程框架可以參考下圖。
之后篇幅會按照這張搜索流程框架圖的脈絡一步步進行講解。
點擊搜索框
點擊搜索框約等于在產(chǎn)品中找到搜索功能的位置,而搜索功能的位置主要是取決于產(chǎn)品本身對于搜索的依賴程度。由于相關交互的講解,有大量成熟且優(yōu)秀的輸出,這里我就簡單帶一下。
比較常見的搜索入口設計方式有如下幾種:
1. 位于頁面頂部,導航欄中
搜索框為與頁面頂部的導航欄中間,除了搜索框本身外,往往還有搜索ICON+暗文提示詞+拍照或語音ICON。此類設計適合信息量較大,用戶對搜索有強依賴需求的產(chǎn)品。
下圖展示的產(chǎn)品分別為:拉鉤、大眾點評、攜程
2. 位于導航欄中,精簡為放大鏡ICON
精簡過后的搜索入口相較于搜索欄弱化了不少,適用于已推薦為主搜索為輔的產(chǎn)品。此外,精簡后省下的空間,可以放置其他功能模塊入口,頁面布局更加靈活。
下圖展示的產(chǎn)品分別為:支付寶財富、人人都是產(chǎn)品經(jīng)理、脈脈
3. 位于頁面底部單獨的搜索模塊
效果類似于導航欄中的搜索ICON,但較之有更重的業(yè)務側重。將搜索與底部標簽放在一起,強化用戶對于搜索推薦頁獨立存在的認知,同時給到此頁面承載復雜功能的心理預期。
在此頁面內(nèi),往往會將搜索與推薦、篩選、信息流等功能點結合在一起。
下圖展示的產(chǎn)品分別為:拼多多、綠洲、微博
輸入關鍵詞
設計輸入框或搜索頁面時,核心思想就是幫助用戶更快更好完成輸入操作,其次是保留一定的運營能力或業(yè)務引導能力。
現(xiàn)在已有較為成熟的設計方案,可在用戶輸入關鍵詞的過程中,通過微交互來達到目的。
1. 搜索欄內(nèi)的引導暗文
現(xiàn)在采用通知欄搜索框中置設計的產(chǎn)品,往往都會在搜索欄中添加引導暗文。
它的作用主要有兩種:其一,教育新用戶可以搜索哪些關鍵詞,熟悉搜索框的操作;其二,承擔運營推廣職能,將業(yè)務需要的內(nèi)容置于搜索欄內(nèi),可有效提高用戶的觸達率。
下圖展示的產(chǎn)品分別為:拉勾網(wǎng)、今日頭條
2. 搜索歷史
搜索歷史是用戶之前手動輸入并搜索過的關鍵詞的匯總,點擊后可直接跳轉,普遍按照用戶搜索的時間順序進行排序。因為用戶往往會重復搜索同一關鍵詞,搜索歷史功能可幫助用戶更高效地完成操作。
由于在使用了一段時間產(chǎn)品后搜索歷史可能較多,在超過了一定數(shù)目后便會收納展示,或僅展示最近搜索的幾個結果。同時搭配上搜索歷史刪除功能,一般有一鍵全部刪除和逐條刪除兩種交互方式。
下圖展示的產(chǎn)品分別為:天貓、微博、今日頭條
3. 熱門搜索
熱門搜索是一種輔助用戶搜索的方式,當用戶需求并不明確時,可以起到很好的引導效果。
一般熱門中展示的內(nèi)容可分為兩部分:一部分為高頻搜索詞,便于用戶決策;一部分存在一定的運營職能,將活動或是商品關鍵詞作為熱搜,提升曝光機會。
因此在設計時需要考慮到:
- 熱搜是否具備運營能力;
- 運營位與真實熱搜位的個數(shù)或占比;
- 熱搜榜的排序規(guī)則;
- 是否需要增加其他交互元素(TAG、TAB、查看更多)。
下圖展示的產(chǎn)品分別為:華為應用超市、微博、網(wǎng)易云音樂
4. 限定范圍的搜索
由于部分產(chǎn)品的業(yè)務線十分龐大,導致搜索結果內(nèi)容的命中效果不佳。因此有些產(chǎn)品會選擇在搜索動作之前完成篩選,這就是限定范圍的搜索。
下圖展示的產(chǎn)品分別為:馬蜂窩、微信
Query分析
用戶輸入關鍵詞(Query)的過程中,系統(tǒng)會對用戶輸入的關鍵詞進行分析,做出一系列操作,例如:糾錯、改寫、補全、近義詞、模糊或實時搜索等。
這不僅能夠幫助到用戶高效完成搜索內(nèi)容的正確輸入,更對自然語言轉化機器語言及信息索引提供了便利,對搜索結果的覆蓋率和相關性至關重要。
以下介紹幾種常見的Query分析方式。
1. Query糾錯
根據(jù)用戶輸入的關鍵詞(Query),搭配一些其他的可用信息,由算法判斷用戶輸入的內(nèi)容是否為錯誤關鍵詞。
若判斷為輸入錯誤,則通過噪聲信道模型猜測正確的關鍵詞。將用戶輸入的關鍵詞做模型輸入,輸出后得到猜測后的關鍵詞。在前端提示用戶選擇或直接按照正確關鍵詞進行檢索。
糾錯的場景主要可以分為:
- 同音糾錯;
- 形似字糾錯;
- 多字、少字、順序錯誤;
- 模糊音糾錯。
Case1:
用戶輸入<JOJOdeqimiaomaoxian>,在同音糾錯角度發(fā)現(xiàn)可能用戶想搜索的是<JOJO的奇妙冒險>,因為你都是英文字母所以不存在形似字,少字角度可以是<JOJO的奇妙冒險故事>。
這些猜測匯聚為候補集,通過噪聲模型推分數(shù)最高的關鍵詞。
Case2:
用戶輸入<今月頭條>,同音糾錯好像沒什么聯(lián)想空間,形似字糾錯角度可能是<今日頭條>,少字角度猜測可能是<這個月的新聞頭條>。我們都知道用戶想搜的肯定是<今日頭條>。
Case3:
也是一樣的道理,根據(jù)用戶輸入的上一句,對出下一句。
2. Query改寫
關鍵詞(Query)改寫是通過分析原始關鍵詞,生成一系列與原始關鍵詞相關的信息,作為補充,與原始關鍵詞一起參與搜索,從而得到更加準確的搜索結果。
自然語言中存在大量的一詞多義現(xiàn)象,比如<蘋果>,用戶想要的可能是水果也可能是手機等電子產(chǎn)品;比如<西紅柿>和<番茄>,同一物體有不同的表達方式;又比如搜索<酒店>,實際的需求并不是了解酒店信息而是預訂酒店客房。這些場景語義不確定的場景均可以通過關鍵詞改寫的方式來解決。
關鍵詞改寫的常用方法主要有:
- 基于關鍵詞的內(nèi)容;
- 基于關鍵詞的點擊行為;
- 基于語義信息的標簽及標注。
Case1:
用戶輸入<男士襯衫>,算法基于關鍵詞內(nèi)容和平臺自身屬性,猜測用戶的真實需求是購買襯衫。不再在原關鍵詞的框架內(nèi)進行聯(lián)想,而是對關鍵詞進行了擴充改寫,增加了<長袖><商務免燙><長袖條紋>等維度,幫助用戶確定搜索需求。
Case2:
用戶輸入<高達>,但由于用戶的歷史操作中點開過包含<高達模型>的SKU,因此算法對關鍵詞進行了改寫,優(yōu)先推薦和<高達模型>有關的關鍵詞給到用戶。
這里可以看到前十個改寫結果中有7個和高達模型相關,且排序優(yōu)先級很高。
切詞
用戶在選擇好關鍵詞后,后臺開始搜索,需要將關鍵詞與詞庫中的內(nèi)容或商品進行匹配,這一步叫做檢索或索引。
詞庫有限,但關鍵詞無限。如何將無限的關鍵詞索引到有限的詞庫,就需要用到切詞。切詞的本質(zhì)即是將關鍵詞按照字符進行拆分,重組為幾個字符串的集合。
以下介紹處理文本時主要涉及到的幾個問題:
1. 文本詞條化
主要任務是將一段連續(xù)的文本序列拆分成多個子詞條,由于語言本身的差異,處理文本的方式也不盡相同。
由于中文本身含義緊湊且多歧義的特性,一般需要借助NLP對特征進行抽取甚至人工標注,生成對應的詞典后利用分詞器完成分詞。
2. 停用詞過濾
某些情況下,一些常見的詞條對于搜索結果匹配的價值并不太大(例如“的”“了”),這些詞往往屬于超高頻詞匯,在自然語言中經(jīng)常會被用到。但被使用的頻率越高,它本身的價值也就越小。
這類沒有價值的詞條就被稱為停用詞,需要在檢索時自動忽略,可以大大減少索引庫產(chǎn)生的壓力。
現(xiàn)有的停用詞表從200-300詞的大停用詞表到只有幾個詞的小停用詞表應有盡有。但近年來的趨勢是不再使用停用詞,通過利用語言的統(tǒng)計特性來更好的處理常見詞問題。
3. 詞條歸一化
在完成上述兩步后,一段文本被分為了多個有效詞條。但往往檢索時,這些詞條還是不能和索引庫一一對應,此時就需要詞條歸一化。它的實質(zhì)是指將看起來不完全一致的多個詞條歸納成同一個等價類的過程。
在實際場景中,主要包括特殊符號的過濾、大小寫歸一、繁體轉簡體、全角轉半角等操作。
Case:
<Air-conditioner>-<Air-conditionor>
4. 詞干提取
詞干提取是英文語料預處理的一個步驟,中文并不需要。本質(zhì)是去除單詞的前后綴得到詞根的過程。一些常見的前后綴有<第三人稱單數(shù)>、<進行式>、<過去式>等。
Case1:
<Ran>、<Running>、<Run>,詞干均可提取為<Run>
詞干提取在實現(xiàn)方法上,主要利用規(guī)則變化進行詞綴的去除和縮減,將詞轉化為詞干,達到詞的簡化效果。但并不是所有輸出的詞干都是有意義的。
比如<revival>提取詞干后,輸出的是<reviv>,它本身并沒有含義,解決上述問題需要依賴詞形還原。
5. 詞形還原
詞形還原是基于詞典,將單詞的復雜形態(tài)轉變?yōu)樽罨A的形態(tài)。它不像詞干提取,只是簡單地將前后綴去掉,而是會根據(jù)詞典將單詞進行轉換。
Case:
<Happier>、<Happily>、<Happiset>都可以轉換為<Happy>
詞形還原在原理上與詞干提取的縮減不同,而是采取了轉化的方法。需要對詞形進行分析,不僅要進行詞性識別,還要進行詞綴轉化,詞性標注的準確率直接影響到轉化的準確率。
更重要的是,詞形還原后的關鍵詞是具有一定意義、完整的詞匯,解決了詞干提取后詞根無意義的問題。
倒排索引
索引類似于一本書的目錄,倒排索引是索引技術中的一種,基于關鍵詞主題的屬性值進行構建。
現(xiàn)代的搜索引擎絕大多數(shù)都是基于倒排索引來構建,這是因為用戶在搜索時往往只會輸入主題的某一部分關鍵詞。
Case:
下圖展示了正向搜索與倒排索引兩個流程之間的逆推關系。用戶通過搜索<高達模型>,得到了一個具有如下屬性的召回結果。
逆推過來,用戶也可以通過搜索這些屬性,召回<高達模型>。大大加快了檢索速度和而效率,也提高了準確度。
經(jīng)過倒排索引召回的結果即可稱為候補集,再對候補集進行排序操作后,即可輸出結果集。結果集就是用戶在前端親眼見到的內(nèi)容。
排序
結果集的排序直接影響到搜索結果質(zhì)量,越往前的結果就越容易得到用戶的點擊。好的搜索功能不只是召回結果,還要把最有吸引力的內(nèi)容優(yōu)先給到用戶。
搜索排序的基礎邏輯如下:用戶輸入關鍵詞形成多個有效詞條,系統(tǒng)會根據(jù)數(shù)據(jù)庫中內(nèi)容是否包含這些詞條來決定是否展示,同時根據(jù)詞條和內(nèi)容的相關性給要展示的內(nèi)容一個分值,最后根據(jù)分值進行排序。
Case:
上面這個例子,用戶輸入關鍵詞<高達>,顯然優(yōu)先推送<內(nèi)容1>。不僅因為標題中出現(xiàn)了關鍵字,還因為業(yè)務數(shù)據(jù)表現(xiàn)要遠遠好于<內(nèi)容2>。
其實,最終影響到排序的,就是取決于文本和業(yè)務數(shù)據(jù)所賦予的權重。這兩組數(shù)據(jù)影響了最終的排序,而如何安排這兩組權重,即是搜索引擎對業(yè)務的理解。
但實際情況下,排序算法要面對的場景比距離要復雜得多,有更多維度的數(shù)據(jù)需要考慮。
評估結果集效果
對于最終前端展示的內(nèi)容,如何評估最終推薦的效果呢?在與策略相關的產(chǎn)品功能(搜索、排序、推薦)中,往往都涉及到機器學習算法,因此評估推薦效果就轉化為評估機器學習算法模型的好壞。
我們一般使用性能度量來量化模型的性能指標。在引入各種率之前,需要先了解它們的本質(zhì),也就是混肴矩陣。
1. 混肴矩陣
如果我們使用的是一個二分類模型,可以將預測情況與實際情況分別分為“真”“假”兩種情況,兩兩混合即可得到四種情況,由這四種場景組成了混肴矩陣。
為了增強可讀性,更清楚分辨預測結果是否正確,我們對上述混肴矩陣進行一定的變形。P(Positive)代表預測為真;N(Negative)代表預測為假;T(True)代表預測與實際相同,預測正確;F(False)代表預測與實際不同,預測錯誤。
轉化后的混肴矩陣如下圖(注意:列標題由“實際情況”變?yōu)椤邦A測結果”)。
轉化后矩陣的閱讀方式應先看“預測結果”,再看“預測情況”,即可推測出真實情況。
- TP:預測正確,預測情況是P,因此真實情況也是P
- FP:預測鎖霧,預測情況是P,因此實際情況是N
- FN:預測錯誤,預測情況是N,因此實際情況是P
- TN:預測正確,預測情況是N,因此實際情況也是N
2. 召回率、精確率、準確率
(1)召回率(Recall)
召回率又叫查全率,它是針對原樣本而言的,它的本質(zhì)是:在實際為P的樣本中被預測為P的概率,其公式為:召回率=TP/(TP+FN)
- Case1:若樣本集中有100個P,通過模型預測出有40個P,那么召回率為40%;
- Case2:在實際應用場景中可以以網(wǎng)貸違約率為例。我們更關心N類用戶,他們會造成違約導致公司損失嚴重。因此我們需要強調(diào)召回率,召回率越高,代表實際預測出來的N類用戶概率越高,為此不惜犧牲一些P類用戶。
(2)精準率(Precision)
精準率又叫查準率,它是針對預測結果而言的,它的含義是在所有被預測為P的樣本中實際為P的樣本的概率,其公式為:精準率=TP/(TP+FP)
Case:若通過模型預測的結果集中有100個P,而其中實際有60個P,則精準率為60%。
(3)準確率(Accuracy)
準確率是最常見的評估方式,它的本質(zhì)是:預測正確的結果占總樣本的百分比,其公式為:準確率=(TP+TN)/(TP+TN+FP+FN)
雖然準確率可以判斷總的正確率,但若樣本集中P、N樣本極度不平衡,準確率結果回含有很大的水分,基本失去參加價值。
Case:樣本中P占90%,N占10%,我們將模型設置為所有樣本均預測為P的策略,則準確率有90%那么高,但實際上毫無實際意義。
(4)總結
在實際項目中,單方面追求精準率或召回率都是不正確的,理想情況是做到兩者都高。
但魚和熊掌不可兼得,精準率高了召回率就會低,召回率高了精準率就會低。如果是做搜索,應該優(yōu)先保證召回率的前提下提升精準率。
3. F值
通過上面的公式,可以看到召回率和精準率的分子是相同的,但分母不同。因此對于同一策略模型,同一閾值,可以統(tǒng)計出一組確定的精準率和召回率。
遍歷0-1之間的所有閾值,就可以畫出每個閾值下的關系點,從而得到一條曲線,稱之為P-R曲線。
得到了曲線,我們當然希望可以找得到一個精準率和召回率都很高的情況,但實際上很難做到,最好是可以找到二者之間的平衡點。
這時候就需要用到F1分數(shù),為F分數(shù)的特殊情況。F1分數(shù)的本質(zhì)是當召回率與精準率權重相同時,尋找二者能達到的最佳平衡。
F1的公式:F1=2*P*R/(P+R)
F的公式:F=(1+β^2)*P*R)/(β^2*P+R)
圖中的“平衡點”即是通過F1計算得出的。
但往往我們對召回和精準率的權重要求是不同的,因此也往往使用F2或F0.5來評價策略,兩者分別表示更重視召回率和準確率。
4. ROC、AUC
前文介紹了F值,但大家可以發(fā)現(xiàn)它僅能評估單點的效果而無法表示策略的整體效果。這里介紹的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的所有閾值,繪制一條連續(xù)的曲線,這就是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,還有一些其他的評估方式,各有各的優(yōu)點。
Prec@k和MAP:除了考慮召回結果整體準確率之外,還會考慮召回結果的排序
CG/DCG/nDCG:之前的指標都是將目標值分為P和N兩種情況,但用這種算法可以用更多維度的指標來評估。比如可以將目標值分為Good、Fair、Bad三類,也可以按照評分。
#參考資料#
《精準率、召回率、F1值、ROC、AUC各自的優(yōu)缺點是什么》https://www.zhihu.com/question/30643044
《機器學習筆記》https://zhuanlan.zhihu.com/p/46714763
《搜索產(chǎn)品經(jīng)理的日常工作》https://www.douban.com/note/693904092/
《GOOGLE官網(wǎng)》https://www.google.com/intl/zh-CN/search/howsearchworks/algorithms/
《倒排索引》http://m.codemsi.com/pmd/745525.html
《如何設計一個好的搜索功能》http://m.codemsi.com/pd/1607289.html?sf=mobile
《倒排索引》http://m.codemsi.com/pmd/745525.html
《如何改寫Query》https://www.cnblogs.com/a-du/p/9709171.html
本文由 @Willy_G 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉載。
題圖來自Unsplash,基于CC0協(xié)議。
每一個功能實現(xiàn)的背后,都應該充分考慮到它的用戶使用背景以及需求,