淺談搜索系統(tǒng)
時間:2023-03-17 05:56:01 | 來源:電子商務(wù)
時間:2023-03-17 05:56:01 來源:電子商務(wù)
摘要 搜索是一種非常普遍而通用的服務(wù)。不同的搜索服務(wù)有著共同基礎(chǔ)技術(shù)(倒排索引,文本相關(guān)性等),但對于特定領(lǐng)域也有著很明顯的差別。電商搜索是搜索服務(wù)的一種,電商搜索面向的對象主要是商品,其目的是讓用戶更快的找到滿意的商品。本文主要介紹搜索引擎原理以及搜索引擎的一些基本架構(gòu)。
關(guān)鍵詞 電商搜索 搜索排序 NLP 搜索篩選 Suggest 爬蟲
一、搜索引擎原理
搜索(Search)系統(tǒng)指從因特網(wǎng)或者數(shù)據(jù)庫中搜集信息,經(jīng)過一定整理以后,提供給用戶進(jìn)行查詢的系統(tǒng)。一個完整的搜索系統(tǒng)包括三部分,分別為信息收集、整理信息、提供查詢。
信息收集:通用搜索引擎(Google、baidu)的信息搜集基本都是自動的。搜索引擎利用稱為爬蟲(網(wǎng)絡(luò)蜘蛛)的自動搜索機(jī)器人程序來連上每一個網(wǎng)頁上的超鏈接。機(jī)器人程序根據(jù)網(wǎng)頁鏈到其中的超鏈接,就像日常生活中所說的“一傳十,十傳百……”一樣,從少數(shù)幾個網(wǎng)頁開始,連到數(shù)據(jù)庫上所有到其他網(wǎng)頁的鏈接。理論上,若網(wǎng)頁上有適當(dāng)?shù)某溄樱瑱C(jī)器人便可以遍歷絕大部分網(wǎng)頁。電商搜索引擎一般不需要用爬蟲收集數(shù)據(jù),定時或者實時讀取產(chǎn)品信息或者配置就可以收集到所有信息。
整理信息:搜索引擎整理信息的過程稱為“創(chuàng)建索引”。搜索引擎不僅要保存搜集起來的信息,還要將它們按照一定的規(guī)則進(jìn)行編排。這樣,搜索引擎根本不用重新翻查它所有保存的信息而迅速找到所要的資料。想象一下,如果信息是不按任何規(guī)則地隨意堆放在搜索引擎的數(shù)據(jù)庫中,那么它每次找資料都得把整個資料庫完全翻查一遍,如此一來再快的計算機(jī)系統(tǒng)也沒有用。這種索引類比于圖書館索引設(shè)計,每個網(wǎng)站或者商品就像圖書館里的一本書,我們不可能在圖書館書架上一本本去找,只能通過索引卡片找到他們的位置,然后直接去書架上取。搜索引擎的索引建立是基于最基本的布爾運算,如1代表相應(yīng)的商品中有這個關(guān)鍵詞,0代表沒有,則可以將搜索關(guān)鍵詞轉(zhuǎn)化成二進(jìn)制數(shù)。
提供查詢:用戶向搜索引擎發(fā)出查詢,搜索引擎接受查詢并向用戶返回資料。搜索引擎每時每刻都要接到來自大量用戶的幾乎是同時發(fā)出的查詢,它按照每個用戶的要求檢查自己的索引,在極短時間內(nèi)找到用戶需要的資料,并返回給用戶。
二、電商搜索特點
- 電商搜索引擎要處理的原始數(shù)據(jù)本身就是結(jié)構(gòu)化的,通常來自于數(shù)據(jù)庫,且有多個數(shù)據(jù)源。相比與傳統(tǒng)的搜索引擎,電商搜索在數(shù)據(jù)采集方面更側(cè)重于各種數(shù)據(jù)源的數(shù)據(jù)更新。
- 就是電商搜索引擎的過濾功能其實比搜索功能要常用。甚至大于搜索本身。電商搜索面對的通常是商品名稱,而商品名稱是一個短文本標(biāo)題,很難從文本相關(guān)性方面得到非常明顯的差異。
- 電商搜索引擎支持各種維度的排序,包括支持好評、銷量、評論、價格等屬性的排序。而且對數(shù)據(jù)的實時性的要求非常高。電商搜索對數(shù)據(jù)的實時性要求主要體現(xiàn)在價格和上下架兩個方面。
- 電商搜索引擎要考慮個性化,根據(jù)不同用戶展示不同的結(jié)果是電商搜索的一個主要目的。從商業(yè)角度來說,個性化搜索結(jié)果可以幫助公司創(chuàng)造更多的營收,從用戶角度來說,個性化搜索更加快速幫助用戶找到相應(yīng)的商品。
三、電商搜索架構(gòu)
電商搜索系統(tǒng)架構(gòu)由八大部分組成,分別為:
- 展示交互模塊
- suggest模塊
- NLP模塊
- AdcanceSearch模塊
- ElsaticSrerch模塊
- Hadoop模塊
- Rerank模塊
- 篩選模塊
只要八個模塊相互連接,才能提供良好的用戶體驗,每個模塊都值得花費精力去優(yōu)化,而且還要長期不斷的優(yōu)化。
電商架構(gòu)圖如下
四、搜索前端交互
前端交互一般包括三個平臺,web、Application(iOS、Android)、移動web,由于不同平臺的展示面積和用戶操作習(xí)慣,所以不同平臺搜索交互形式不一樣。用戶通常會非??斓囊苿友矍騺韺ふ翼撁嬷械乃阉鞴δ埽旧鲜菍ふ乙粋€可以輸入的文本框(搜索框的通用設(shè)計形式已經(jīng)培養(yǎng)了用戶的意識)。
1、在顯著位置突出搜索框
對于電子商務(wù)類網(wǎng)站/應(yīng)用程序來講,搜索是其中的一個基本(主要)功能,其應(yīng)該設(shè)計顯著,能快速被用戶發(fā)現(xiàn)。如若不夠顯著,必將使用戶失望并降低其瀏覽效率。
網(wǎng)站版的搜索入口為:
2、放大鏡圖標(biāo)與搜索框同在
在我們?nèi)粘J褂弥校芤姷缴倭康木哂型ㄓ靡饬x的圖標(biāo)。放大鏡圖標(biāo)就是其中之一。用戶即使在沒有文本標(biāo)簽的情況下也會自然的將該圖標(biāo)視作搜索的意義。
你應(yīng)該使用一個示意型的圖標(biāo),就如下面這種放大鏡圖標(biāo)的最簡單版本,因為這種沒有多少圖形細(xì)節(jié)的設(shè)計能夠加快用戶的識別:
五、Suggest
搜索關(guān)鍵字智能提示是一個搜索應(yīng)用的標(biāo)配,主要作用是避免用戶輸入錯誤的搜索詞,并將用戶引導(dǎo)到相應(yīng)的關(guān)鍵詞上,以提升用戶搜索體驗。
一)suggest的定位:
- 在用戶輸入關(guān)鍵詞的時候,起到提示作用,減小用戶輸入量,提高用戶輸入準(zhǔn)確度。能夠智能的預(yù)測用戶心中的期望;
- 備挖掘基礎(chǔ)數(shù)據(jù)對于suggest是很重要的,一般要來源于用戶實際的輸入,讓程序能夠借助歷史數(shù)據(jù)預(yù)測用戶意圖;
- 要關(guān)注被挖掘數(shù)據(jù)的來源、數(shù)據(jù)量、多樣性、更新頻率等
- suggest是交互性很強的產(chǎn)品。
- suggest盡量采用用戶輸入的query記錄,基于歷史的推薦比較靠譜的。
- “冷啟動”問題,使用線上搜索引擎收集的歷史紀(jì)錄分析。
二)suggest的一些質(zhì)量評測點:
- 垃圾詞過濾。比如帶無意義符號的查詢串要進(jìn)行處理
- 意義重復(fù)的query,比如“天上人間照片”和“天上人間的照片”屬于同意
- 在去重復(fù)基礎(chǔ)上考慮多樣性
- 匹配模式,前綴匹配、后綴匹配
- 中英文(拼音)混合串的質(zhì)量
- 錯別字智能糾錯
- 政治、黃詞、零結(jié)果等的過濾
- 如果有類似阿拉丁的直達(dá)區(qū),考慮直達(dá)區(qū)策略以及展示樣式
- 數(shù)據(jù)方面主要看CTR。但是要注意,用戶只要輸入query,就會調(diào)用suggestion,多一個查詢詞,suggest就又檢索一次,如果以單純的檢索量做分母是不合適的。應(yīng)該以一次完整的檢索行為作為分母,以點擊提示詞的次數(shù)為分子。
三)需求分析
- 支持前綴匹配原則
- 在搜索框中輸入“固特”,搜索框下面會以固特為前綴,展示“固特異”、“固特異輪胎”、“固特異飛足”等等搜索詞;輸入“三角”,會提示“三角輪胎”、“三角架”、等搜索詞。
- 同時支持漢字、拼音輸入
- 由于中文的特點,如果搜索自動提示可以支持拼音的話會給用戶帶來更大的方便,免得切換輸入法。比如,輸入“gute”提示的關(guān)鍵字和輸入“固特”提示的一樣,輸入“sanjiao”與輸入“三角”提示的關(guān)鍵字一樣。
- 支持多音字輸入提示
- 比如輸入“sanjiao”或者“sanjue”都能提示出“三角輪胎”、“三腳架”。
- 支持拼音縮寫輸入
- 對于較長關(guān)鍵字,為了提高輸入效率,有必要提供拼音縮寫輸入。比如輸入“gt”應(yīng)該能提示出“gute”相似的關(guān)鍵字,輸入“sj”也一樣能提示出“三角”關(guān)鍵字。
- 基于用戶的歷史搜索行為,按照關(guān)鍵字熱度進(jìn)行排序
- 為了提供suggest關(guān)鍵字的準(zhǔn)確度,最終查詢結(jié)果,根據(jù)用戶查詢關(guān)鍵字的頻率進(jìn)行排序,如輸入[固特,gute,qt,] —> [“固特異”(f1),“固特異輪胎”(f2),“固特異飛足”(f3),…],查詢頻率f1 > f2 > f3。
四)解決方案
冷啟動問題:商品庫的title根據(jù)空格進(jìn)行分割+歷史搜索記錄數(shù)據(jù)分析挖掘
1、索引與前綴查詢
1)Trie樹 + TopK算法(處理漢字suggest時不是很優(yōu)雅,且需要維護(hù)兩棵Trie樹,實施起來比較復(fù)雜)
2)Solr自帶Suggest智能提示(Solr自帶的suggest智能提示組件存在問題是使用freq排序算法,返回的結(jié)果完全基于索引中字符的出現(xiàn)次數(shù),沒有兼顧用戶搜索詞語的頻率,因此無法將一些熱門詞排在更靠前的位置。)
3)專門為關(guān)鍵字建立一個索引collection,利用solr前綴查詢實現(xiàn)。solr中的copyField能很好解決我們同時索引多個字段(漢字、pinyin, abbre)的需求,且field的multiValued屬性設(shè)置為true時能解決同一個關(guān)鍵字的多音字組合問題。
2、關(guān)鍵字收集
當(dāng)用戶輸入一個前綴時,碰到提示的候選詞很多的時候,如何取舍,哪些展示在前面,哪些展示在后面?用戶在使用搜索引擎查找商品時,會輸入大量的關(guān)鍵字,每一次輸入就是對關(guān)鍵字的一次投票,那么關(guān)鍵字被輸入的次數(shù)越多,它對應(yīng)的查詢就比較熱門,所以需要把查詢的關(guān)鍵字記錄下來,并且統(tǒng)計出每個關(guān)鍵字的頻率,方便提示結(jié)果按照頻率排序。搜索引擎會通過日志文件把用戶每次檢索使用的所有檢索串都記錄下來,每個查詢串的長度為1-255字節(jié)。
3、漢字轉(zhuǎn)拼音
用戶輸入的關(guān)鍵字可能是漢字、數(shù)字,英文,拼音,特殊字符等等,由于需要實現(xiàn)拼音提示,我們需要把漢字轉(zhuǎn)換成拼音。
4、拼音縮寫提取
考慮到需要支持拼音縮寫,漢字轉(zhuǎn)換拼音的過程中,順便提取出拼音縮寫,如“sanjiao”,"sanjue"—>"sj",”sju”。
六、NLP(分詞、個性化詞庫)
分詞器的詞庫一般是由基礎(chǔ)詞匯和各領(lǐng)域常用詞匯來組成,可以應(yīng)用于大多數(shù)基本的分詞場景。當(dāng)分詞器專門應(yīng)用于某個領(lǐng)域時,一份領(lǐng)域相關(guān)的詞典是必不可少的。例如,有很多出問題的case是由于無法識別這個詞造成的,像”雨刮”、”車充”、”充氣泵”這樣的詞,只能切分成單字,隨之而來的就是一些不相關(guān)的商品被召回。目前的解決方案是從產(chǎn)品庫和人工整理一批專用詞語當(dāng)做基礎(chǔ)電商詞語,盡量減少詞語的無法識別率。
處理方法:
將電商專用的詞語加入拓展詞庫,進(jìn)行最大顆粒度分詞,如果用戶搜索的一個關(guān)鍵詞key,如果完全匹配商品標(biāo)題(或者廣告語)中的部分連續(xù)名稱時,搜索時應(yīng)該使用最大粒度分詞,以減少不相關(guān)的搜索結(jié)果;如果不完全匹配,那么需要使用最小粒度分詞,用以匹配所有可能的結(jié)果。
七、搜索排序
電商搜索排序的目的是幫助用戶快速的找到需要的商品。從技術(shù)上來說,就是在用戶輸入關(guān)鍵詞匹配到的商品中,把最符合用戶需求的商品排到第一位,其它的依次排在后續(xù)相應(yīng)的位置。為了更好的實現(xiàn)這個目標(biāo),算法排序系統(tǒng)必須考慮各個排序因子
一)商業(yè)搜索引擎在排序過程中需要考慮2個因素:
相關(guān)性是指返回結(jié)果和輸入query是否相關(guān), 這是搜索引擎基本問題之一, 目前ElasticSearch用的文本相關(guān)性計算算法是TF/IDF, 得分用Dscore表示。
重要性是指商品被信賴的程度, 我們應(yīng)該把最被用戶信賴的商品返回給用戶, 而不是讓用戶自己鑒別。必須賦予商品合理的重要性分?jǐn)?shù), 才能保證搜索結(jié)果的優(yōu)質(zhì)。 重要性分, 又叫做靜態(tài)分, 使用Tscore表示.
搜索引擎最終的排序依據(jù)是:
Score = Dscore * Tscore
即綜合考慮靜態(tài)分和動態(tài)分, 給用戶相關(guān)且重要的商品。
二)商品靜態(tài)分計算
商品的靜態(tài)分計算因子(以商品PID為計算單位),舉例用下面四個因子表示:
- 下單數(shù)
- 好評率
- 推薦值
- 商品類目
靜態(tài)分我們使用Tsocre表示,Tscore可以寫成如下公式形式:
Tscore= a * A(下單數(shù)) + b * B(好評率) + c * C(推薦值)+d*D(商品類目)
a,b,c,d是權(quán)重參數(shù), 用于平衡各個指標(biāo)的影響程度. A,B,C,D是代表函數(shù),用于把原始的指標(biāo)轉(zhuǎn)化成合理的度量。
由于各個度量范圍不一樣,必須歸一化排序因子,如下單數(shù)的取值是0~100000,而好評率的取值為0~1。這種情況會影響到數(shù)據(jù)分析的結(jié)果和方便性,為了消除指標(biāo)之間的量綱的影響,需要進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化處理,以解決數(shù)據(jù)指標(biāo)之間的可比性。
三)數(shù)據(jù)標(biāo)準(zhǔn)化處理
- 首先對各個指標(biāo)取log。log的導(dǎo)數(shù)是一個減函數(shù),表示為了獲得更好的分?jǐn)?shù)需要花費越來越多的代價。
- 標(biāo)準(zhǔn)化(歸一化)。標(biāo)準(zhǔn)化的目的讓各個度量可以在同一區(qū)間內(nèi)進(jìn)行比較。最常用的標(biāo)準(zhǔn)化方法是z-score標(biāo)準(zhǔn)化方法。我們先采取log歸一化處理,log緩解數(shù)據(jù)增長速度,在log的基礎(chǔ)上進(jìn)行z-score歸一化, z-score讓數(shù)據(jù)變得非常平滑。
八、未完待續(xù)
目前搜索引擎已經(jīng)有非常成熟的開源解決方案, 最出名的ElasticSearch和Solr都是基于lucence的。很多中小型互聯(lián)網(wǎng)公司搜索引擎都是基于這兩個開源系統(tǒng)搭建的, 但是即便如此, 一個搜索引擎團(tuán)隊想把搜索引擎質(zhì)量做到商用標(biāo)準(zhǔn), 從系統(tǒng)熟悉, 服務(wù)搭建, 功能定制, 通常需要花費較長時間。我在這里只是大概介紹了搜索系統(tǒng)的一點知識,后面關(guān)于搜索系統(tǒng),我應(yīng)該還會更新幾篇文章,謝謝大家觀看!