站內(nèi)搜索系列:如何通過產(chǎn)品策略優(yōu)化搜索排序結(jié)果?(內(nèi)附站內(nèi)搜索搭建指南)
編輯導(dǎo)讀:搜索是最常見的功能之一,用戶通過站內(nèi)搜索幫助自己快速找到想要的內(nèi)容來改善用戶體驗(yàn),促進(jìn)轉(zhuǎn)化率。如何搭建一個(gè)高質(zhì)量的站內(nèi)搜索引擎呢?本文將從五個(gè)方面進(jìn)行分析,希望對(duì)你有幫助。
一、站內(nèi)搜索的意義
對(duì)于媒體內(nèi)容站、電商、SaaS服務(wù)等B端企業(yè)來說,增加「站內(nèi)搜索」功能來幫助自己的用戶快速找到心中所想的內(nèi)容是改善用戶體驗(yàn),降低跳出率,促進(jìn)用戶轉(zhuǎn)化率的最好方法。
另一方面來說,站內(nèi)搜索也是幫助B端企業(yè)快速收集用戶真實(shí)想法的好工具,用戶每一次搜索和點(diǎn)擊,都是對(duì)自己網(wǎng)站內(nèi)容的反饋,特別是無結(jié)果的搜索詞,更是幫助我們改善網(wǎng)站的至關(guān)重要的一手資料。
那么如何快速搭建起一個(gè)高質(zhì)量站內(nèi)搜索引擎呢? 接下來我會(huì)寫一系列文章來詳細(xì)講解站內(nèi)搜索的方方面面,歡迎大家持續(xù)關(guān)注。
今天,我們先從產(chǎn)品層面談?wù)勅绾蝺?yōu)化搜索排序結(jié)果。
二、從初代搜索算法談起
要想深入理解搜索,要從搜索引擎的起源說起。任何一個(gè)復(fù)雜系統(tǒng)都是首先從一個(gè)簡(jiǎn)單系統(tǒng)開始,逐漸演化而來的。而一上來就設(shè)計(jì)一個(gè)復(fù)雜系統(tǒng),很難讓它良好的運(yùn)轉(zhuǎn)起來。所以我們必須追根溯源,從源頭談理解搜索。
90年代,TREC(全球文本檢索大會(huì))組織了一系列年度研討會(huì)。這次研討會(huì)主要想找到「非結(jié)構(gòu)化長(zhǎng)文檔」組成的數(shù)據(jù)集的最優(yōu)搜索算法。TREC對(duì)搜索引擎算法做了非常多的優(yōu)化,其中TF-IDF算法應(yīng)該是當(dāng)時(shí)最棒的排序算法的主要組成部分。
TF-IDF算法如它的名字一樣,含兩個(gè)關(guān)鍵要素,「詞頻TF」與「逆文檔頻率IDF」。用這兩個(gè)要素統(tǒng)計(jì)加權(quán)后獲得搜索排序。
- 詞頻(TF,即Term Frequency)。詞頻TF是指「搜索詞」在一篇文檔中出現(xiàn)的頻次。
- 逆文檔頻率(IDF,即Inverse Document Frequency)。逆文檔頻率IDF是指「搜索詞」在整個(gè)語料庫(kù)中的頻次。
當(dāng)用戶鍵入一個(gè)「搜索詞」后,首先比對(duì)整個(gè)文檔庫(kù)中哪些文檔中包含的「搜索詞」最多。包含的越多,這篇文檔排名就越高。
這個(gè)簡(jiǎn)單的規(guī)則有一個(gè)致命的問題,我們的語言中有非常多的連詞,代詞,助詞等只是用于輔助句子表達(dá)的詞。比如「嗎」、「也」、「這個(gè)」、「可是」這樣的詞,這些詞并非文檔的核心內(nèi)容,應(yīng)該降低權(quán)重處理。
此時(shí),我們引入第二個(gè)關(guān)鍵要素——逆文檔頻率IDF。它的作用是降低語料庫(kù)中出現(xiàn)頻次多的詞的權(quán)重。一個(gè)詞在語料庫(kù)中重復(fù)出現(xiàn)的次數(shù)越多,包含這個(gè)「搜索詞」的文檔的排名就越低。
TF-IDF的設(shè)計(jì)是不是簡(jiǎn)單又巧妙,TF-IDF排序算法以及類似的比如BM25算法基本上就是古早搜索引擎的查詢和排序核心算法。這類算法主要針對(duì)非結(jié)構(gòu)性長(zhǎng)文本而設(shè)計(jì),比如大型企業(yè)文檔,歷年判案文書,全球論文檢索庫(kù)等設(shè)計(jì)。
這類算法是搜索引擎的基石,很好的理解它們的原理,有助于我們?cè)O(shè)計(jì)自己的站內(nèi)搜索。接下來,我們談?wù)勧槍?duì)獨(dú)立站、小程序、APP應(yīng)用內(nèi)搜索搜索問題應(yīng)該怎么設(shè)計(jì)和處理。
三、如何通過數(shù)據(jù)屬性來優(yōu)化排序結(jié)果
今天咱們不談搜索技術(shù)問題,只談?wù)緝?nèi)搜索的產(chǎn)品設(shè)計(jì)問題。
站內(nèi)搜索技術(shù)的問題其實(shí)已經(jīng)被解決的很好了,開源免費(fèi)的有ElasticSearch,國(guó)內(nèi)SaaS形式的站內(nèi)搜索解決方案也有很多,比如卡拉搜索 KalaSearch.com ,一行代碼即可部署站內(nèi)搜索,非常方便。 在搜索技術(shù)不是大問題的前提下,剩下比拼的就是產(chǎn)品策略和產(chǎn)品設(shè)計(jì)。接下來,我們從產(chǎn)品設(shè)計(jì)層面談?wù)勅绾蝺?yōu)化搜索排序。
這種算法的問題是它只能針對(duì)極少數(shù)場(chǎng)景設(shè)計(jì),并不適合當(dāng)下互聯(lián)網(wǎng)中網(wǎng)站、小程序、app里的信息搜索。這種搜索會(huì)把所有文檔不分類型的混排在一起,而我們現(xiàn)在的數(shù)據(jù)信息包含非常多的緯度,甚至有些用戶行為投票的社交指標(biāo)包含在其中,比如(瀏覽量、點(diǎn)贊數(shù)、轉(zhuǎn)發(fā)數(shù)等)。
如何利用多維度數(shù)據(jù)提升搜索準(zhǔn)確度是我們要思考的問題。
前文我們提到TF-IDF類搜索算法的原理,那么接下來應(yīng)該添加些什么元素使搜索引擎排序準(zhǔn)確性上更進(jìn)一步呢?我們網(wǎng)站/小程序/APP中的文檔信息其實(shí)并不是混排在一起的,而是包含非常多緯度的信息,甚至有一些緯度是用戶行為產(chǎn)生的對(duì)文檔質(zhì)量的投票,比如瀏覽量,點(diǎn)贊數(shù),轉(zhuǎn)發(fā)數(shù),收藏?cái)?shù)等。如何利用這么多豐富的多維度信息來幫助我們優(yōu)化搜索呢?
一般我們可以把站內(nèi)文檔信息分成這么幾個(gè)緯度。
- 搜索屬性:標(biāo)題、正文、標(biāo)簽、文章描述、圖片描述、評(píng)論內(nèi)容等。這些屬性可以作為搜索的基礎(chǔ)屬性放入我們的站內(nèi)搜索中。
- 人氣指標(biāo):點(diǎn)贊,轉(zhuǎn)發(fā),評(píng)論,評(píng)論的點(diǎn)贊,收藏,關(guān)注等通過用戶的行為產(chǎn)生的人氣指標(biāo)。這些指標(biāo)可以輔助我們判斷一篇文檔的內(nèi)容優(yōu)質(zhì)程度。
- 站長(zhǎng)策略:作為管理員,有時(shí)候會(huì)有根據(jù)自己站的情況,手動(dòng)調(diào)整的一些內(nèi)容??梢哉{(diào)整這些內(nèi)容的在搜索結(jié)果中的排序權(quán)重。
我們來舉個(gè)例子。假設(shè)用戶最近看了威爾·史密斯的經(jīng)典電影《當(dāng)幸福來敲門》,很喜歡。第二天打算去豆瓣上看看影評(píng),但昨天看的是“幸?!笔裁磥碇??用戶只記得電影名里有個(gè)幸福,于是在豆瓣電影的搜索框輸入“幸福”。
請(qǐng)思考一下這時(shí)候用戶的心理狀態(tài)。他肯定不關(guān)心到底有多少含有“幸福”這個(gè)詞的電影名(TF詞頻),肯定也不關(guān)心“幸福”這個(gè)詞到底是不是電影名的常見詞(逆文檔頻率IDF)。
這位用戶更關(guān)心的是怎么快速準(zhǔn)確找到昨天看的那部叫什么“幸福”的電影,趕緊看影評(píng)。
這時(shí)候,我們的搜索引擎應(yīng)該把什么排在聯(lián)想詞列表的第一位呢?
雖然《當(dāng)幸福來敲門》中的「幸?!惯@個(gè)詞并非在屬性的第一個(gè),但因?yàn)檫@個(gè)電影名本身權(quán)重高,所以被排在第一名。
在這個(gè)場(chǎng)景的搜索中,「幸?!惯@個(gè)詞,有很多屬性可供我們的搜索引擎用來做排序判斷。
- 「幸?!惯@個(gè)詞在“演員姓名”屬性中,還是在“片名”中?
- 「幸?!沟钠磳懯欠裾_?有錯(cuò)別字,同音字、相似形狀的字或者南方無法分清前后鼻音的用戶輸入的詞,比如「新?!梗?/li>
- 「幸?!惯@個(gè)詞在屬性中是第一個(gè)詞嗎?還是當(dāng)中的一個(gè)詞。
- 含「幸?!沟膶傩灾杏卸嗌儆脩粜袨橥镀睌?shù)?比如:看過/想看/影評(píng)/以及簡(jiǎn)評(píng)等。
- 含「幸?!沟膶傩园谕獠堪駟沃袉??比如奧斯卡獎(jiǎng),金球獎(jiǎng)等。
- 含「幸?!沟膶傩允遣皇窃诙拱觌娪白约旱恼鹃L(zhǎng)策略中?豆瓣250電影榜等。
以上這些屬性在數(shù)值加權(quán)后,把「當(dāng)幸福來敲門」排在搜索結(jié)果最前面的可能性,肯定比使用TF-IDF排序算法找到「當(dāng)幸福來敲門」的可能性大得多。
所以,我們應(yīng)該要把網(wǎng)站業(yè)務(wù)的各種屬性考慮到排序結(jié)果之中,并根據(jù)不同屬性的重要程度來設(shè)計(jì)權(quán)重。我們可以從以下幾個(gè)方面來考慮排序問題。
- 詞語匹配:如果用戶輸入多個(gè)詞,那么與用戶輸入的搜索詞匹配度最高的結(jié)果,肯定是排在最前面的。
- 相近度:詞與詞彼此靠近,排序更靠前( 搜「海底撈」,那么「海底撈自熱火鍋」應(yīng)該比「海底的撈網(wǎng)」排名靠前 )。
- 業(yè)務(wù)屬性權(quán)重:比如剛剛豆瓣電影的例子,在這里搜索的用戶首先想找的一定是電影,其次才是電影人。比如搜「史密斯」排在第一的大概率是「史密斯夫婦」(電影名),而不應(yīng)該是「威爾·史密斯」(電影人)。
- 搜索詞所屬位置:處于重要屬性中的詞,排名會(huì)更高。比如標(biāo)題或描述里包含了搜索詞的文檔,排名肯定高于只有正文才有搜索詞的文檔。
- 精確性:完全匹配的精準(zhǔn)詞,沒有任何前綴和后綴的,會(huì)排在最前面。
- 錯(cuò)別字:有錯(cuò)別字的文檔被認(rèn)為是文檔質(zhì)量低的表現(xiàn)之一,它不應(yīng)該比沒有錯(cuò)別字的文檔排的更高。
豆瓣電影輸入「史密斯」前面三位是電影,后三位是電影人,這是根據(jù)產(chǎn)品業(yè)務(wù)權(quán)重的搜索排序策略。
站內(nèi)搜索加上這些排序策略后,比經(jīng)典的搜索算法排序在搜索準(zhǔn)確度上有了非常大的飛躍。那么,我們要怎么繼續(xù)提升排序質(zhì)量呢?
接下來我們來聊聊如何靈活運(yùn)用這些搜索策略來進(jìn)一步改善搜索排序結(jié)果。
四、如何通過調(diào)整數(shù)據(jù)屬性的排序來優(yōu)化搜索結(jié)果
現(xiàn)在的各種站內(nèi)搜索解決方案,之所以搜索結(jié)果準(zhǔn)確度低,問題并非出在搜索算法上。因?yàn)榫W(wǎng)站/APP再大、情況再?gòu)?fù)雜,規(guī)則也是可以窮盡的。這和全網(wǎng)搜索的難度相比,難度上低了無數(shù)個(gè)數(shù)量級(jí)。
那么問題出在什么地方呢?問題出在沒有或很難靈活運(yùn)用搜索策略上。
如果我們用ElasticSearch搭站內(nèi)搜索,那么從“搭建”到“能用”其實(shí)很簡(jiǎn)單,但從“能用”到“好用”就得好幾個(gè)工程師+無數(shù)時(shí)間積累才行。這不是一般中小公司能夠承受的成本開支,大多數(shù)中小公司會(huì)停留在湊合能用的狀態(tài)上。
特別基本搜索算法選擇使用一個(gè)大的浮點(diǎn)分?jǐn)?shù),把所有東西混在一起。給每一份文檔根據(jù)所有規(guī)則加權(quán)獲得一個(gè)分?jǐn)?shù)。然后根據(jù)這個(gè)規(guī)則來排序。這種方法有個(gè)有一個(gè)致命的問題,就是把完全不是一碼事的屬性混在一起談排序。
舉個(gè)例子。假設(shè)排序方案包含TF-IDF及點(diǎn)贊數(shù)這兩個(gè)緯度。那么問題來了,我們的搜索引擎會(huì)怎么排序?
如果某個(gè)文檔的點(diǎn)贊數(shù)非常高,會(huì)怎么排序?這個(gè)文檔會(huì)排在非??壳?,即便文檔與搜索詞的相關(guān)度非常之低也會(huì)被排在很靠前。
那么如果某個(gè)文檔與搜索詞相關(guān)度非常高,但點(diǎn)贊數(shù)為0,又會(huì)怎么排序呢? 這篇點(diǎn)贊為0的文章很可能都不會(huì)出現(xiàn)在排序結(jié)果中。
這種混合搜索排序方法的另一個(gè)問題是它的復(fù)雜性。當(dāng)多個(gè)緯度的屬性被混在一個(gè)公式里,我們發(fā)現(xiàn)搜索結(jié)果很糟糕時(shí),也不知道應(yīng)該怎么調(diào)整。
那么,面對(duì)這種多個(gè)緯度的搜索問題,我們應(yīng)該如何設(shè)計(jì)搜索排序呢?
聰明的辦法是把所有屬性拆開來看,針對(duì)自己的業(yè)務(wù)調(diào)整他們的順序即可。不把所有屬性混在一起計(jì)算大分?jǐn)?shù),而是計(jì)算N個(gè)分?jǐn)?shù),并進(jìn)行N次連續(xù)排序。
接下來我來講講它的工作原理。
所有匹配結(jié)果按照第一條標(biāo)準(zhǔn)進(jìn)行排序,如果有結(jié)果得分并列,則繼續(xù)根據(jù)第二條標(biāo)準(zhǔn)計(jì)算得分并排序。如果仍有并列,那么就繼續(xù)執(zhí)行第三條標(biāo)準(zhǔn),直到搜索結(jié)果中每一條都有自己的位置。
那么流程中先用哪條標(biāo)準(zhǔn)來進(jìn)行判斷,成為這個(gè)排序方案的關(guān)鍵。
來個(gè)案例,你就明白了。
[
{
“title”: “為什么《黑肯帝國(guó)3》在IDBM才不到7分?”,
“featured”: true,
“number_of_likes”: 2647
},
{
“title”: “《黑客帝國(guó)》里面,為什么最后是尼歐贏了?”,
“featured”: false,
“number_of_likes”: 3077
},
{
“title”: “還好當(dāng)年沒讓小李子演《黑客帝國(guó)》”,
“featured”: false,
“number_of_likes”: 531
},
{
“title”: “多年以后,才真正看懂黑各帝國(guó)”,
“featured”: false,
“number_of_likes”: 797
},
{
“title”: “如何理解《黑客帝國(guó)》?”,
“featured”: true,
“number_of_likes”: 611
}
]
為了簡(jiǎn)化例子,我們把規(guī)則簡(jiǎn)化成三點(diǎn),錯(cuò)別字,加精,點(diǎn)贊數(shù)這三個(gè)指標(biāo)上。
用戶輸入「黑客帝國(guó)」這個(gè)關(guān)鍵詞進(jìn)行查詢,他會(huì)得到如下結(jié)果。
- 如何理解《黑客帝國(guó)》? (無錯(cuò)別字; 已加精; 點(diǎn)贊數(shù):611)
- 《黑客帝國(guó)》里面,為什么最后是尼歐贏了? (無錯(cuò)別字; 未加精; 點(diǎn)贊數(shù):3077)
- 為什么《黑肯帝國(guó)3》在IDBM才不到7分?(2個(gè)錯(cuò)別字; 已加精; 點(diǎn)贊數(shù):2647 )
- 還好當(dāng)年沒讓小李子演《黑客帝國(guó)》(無錯(cuò)別字; 未加精; 點(diǎn)贊數(shù):531)
- 多年以后,才真正看懂黑各帝國(guó)(1個(gè)錯(cuò)別字; 未加精;點(diǎn)贊數(shù):797)
給予精華更高權(quán)重。精華一般是網(wǎng)站管理員手動(dòng)添加的,是管理員根據(jù)當(dāng)下情況判別的。這種精華標(biāo)記,通常情況下應(yīng)該大于用戶投票行為的指標(biāo)(比如點(diǎn)贊數(shù))。
錯(cuò)別字是判斷文檔重要程度的一個(gè)緯度,如果文檔中有錯(cuò)別字,有一定概率說明文檔的質(zhì)量有些問題,在排序上應(yīng)該降低權(quán)重。
我們將用戶投票行為放在關(guān)鍵詞相關(guān)性之后(有時(shí)候點(diǎn)贊數(shù)甚至是不可信的,針對(duì)搜索引擎作弊行為最先想到的就是刷點(diǎn)贊數(shù)。所以搜索引擎能自定義更多緯度的判別屬性,是他是否在細(xì)節(jié)上能足夠精準(zhǔn)的關(guān)鍵,這個(gè)問題有機(jī)會(huì)單開一篇講)。
以上是這個(gè)案例的策略,如果我們對(duì)這個(gè)例子的排序結(jié)果不滿意怎么辦?只需要調(diào)整屬性權(quán)重(順序)即可。比如我們覺得錯(cuò)別字沒什么問題,不應(yīng)該降權(quán)太多,那只需要把「錯(cuò)別字」這個(gè)屬性放到后面即可。
國(guó)內(nèi)站內(nèi)搜索解決方案「卡拉搜索」策略設(shè)置后臺(tái),只需要用鼠標(biāo)拖動(dòng)就可以改變屬性權(quán)重。
五、站內(nèi)搜索優(yōu)化總結(jié)
對(duì)于媒體內(nèi)容站、電商、SaaS服務(wù)等B端企業(yè)來說,增加「站內(nèi)搜索」功能來幫助自己的用戶快速找到心中所想的內(nèi)容是改善用戶體驗(yàn),降低跳出率,促進(jìn)用戶轉(zhuǎn)化率的最好方法。
另一方面來說,站內(nèi)搜索也是幫助B端企業(yè)快速收集用戶真實(shí)想法的好工具,用戶每一次搜索和點(diǎn)擊,都是對(duì)自己網(wǎng)站內(nèi)容的反饋,特別是無結(jié)果的搜索詞,更是幫助我們改善網(wǎng)站的至關(guān)重要的一手資料。
- 對(duì)于媒體內(nèi)容站、電商、SaaS服務(wù)等B端企業(yè)來說,增加「站內(nèi)搜索」是降低跳出率,促進(jìn)轉(zhuǎn)化率的最好方法。
- 「站內(nèi)搜索」是幫助站長(zhǎng)理解自己用戶心中所想最好的工具,特別是收集無搜索結(jié)果的搜索詞,有助于更好的改進(jìn)網(wǎng)站內(nèi)容。
- 「站內(nèi)搜索」不需要使用系數(shù)或任何形式的加權(quán)平均值方式來判別排序權(quán)重。使用復(fù)雜的公式不如使用產(chǎn)品策略來調(diào)整搜索結(jié)果。
- 添加更多緯度的數(shù)據(jù)給搜索引擎,讓他能更好的識(shí)別并根據(jù)這些指標(biāo)來排序。
搭建「站內(nèi)搜索」其實(shí)很簡(jiǎn)單,國(guó)內(nèi)比較好的站內(nèi)搜索SaaS只需要一行代碼即可部署,我將在下一篇文章中講解如何快速部署站內(nèi)搜索。歡迎留言提問,下一篇一并解答。
作者:蔣川,公眾號(hào):靈感實(shí)踐
本文由 @蔣川 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自Unsplash,基于CC0協(xié)議。
很有幫助 謝謝作者
產(chǎn)品
對(duì)小白幫助很大??
廢話連篇
期待下一篇~
雖然我不會(huì)搭建,但還是看完了,搶沙發(fā),嘻嘻嘻!
接下來我會(huì)寫從0到1手把手搭建站內(nèi)搜索引擎。歡迎關(guān)注。
也歡迎關(guān)注「卡拉搜索」KalaSearch.com 一行代碼即可快速部署站內(nèi)搜索/app搜索。
好的