“搜尋”,對於前臺操作的使用者來說,只是一個極其簡單的動作。但對於後臺來說,則需要拆成“如何才能支撐‘搜尋’這個動作?”以及“我們要展示給使用者哪些元素?”兩個方面來考慮,才能更好地完成這個動作。
對於有確定購買目標的使用者來說:如何能在海量商品中快速找到心儀商品呢?
搜尋是必不可少的渠道,也在電商平臺中佔據著舉足輕重的地位。
前端使用者只是一個簡單的“輸入+搜尋”的操作,後臺就需要拆分出:“哪些邏輯可以用來支撐?”以及,“我們應該給使用者展示哪些元素?”
今天,我們就來聊聊與“搜尋”相關的後臺流程。
一、搜尋結果頁佈局
PC端的搜尋結果頁都包含哪些元素?
參照如下圖:
淘寶PC端搜尋結果頁
搜尋欄:
使用者輸入query進行檢索,是使用者尋找商品的一種快捷入口。從使用者輸入到展示商品列表之間的檢索過程,也是本文重點要講的。
篩選項:
是商品結果集的屬性的聚合,給使用者提供在商品結果集內進一步按照各屬性維度單獨篩選的功能。
分類樹:
query相關的分類,以分類樹的形式展現給使用者。比如:輸入“小米”既屬於“3C數碼”,又屬於“糧油米麵”。
麵包屑:
展現當前商品列表所屬的分類路徑,方便使用者跳轉至各上級分類,同時可在該分類路徑下進一步檢索,擴大或縮小檢索範圍。
商品列表:
query搜尋的結果集,涉及到商品的排序展示,是下文的重點。
商品推薦:
根據使用者當前或者歷史的檢索行為,進行商品推薦。
二、搜尋流程框架
1。 query分析
使用者輸入query,系統需要對query進行預處理,包括:改寫糾錯、近義詞、query補全。
比如:使用者輸入“平鍋電腦”,透過分析判斷,使用者可能想搜尋的是“蘋果電腦”。
比如:搜尋“電褥子”,也可以匹配“電熱毯”。
比如:最近抖音使用者李佳琪以推薦口紅走紅,在TB輸入“李佳”就有對應提示。
好的產品應當是讓使用者自行選擇,而不是強制改寫使用者的輸入。
有搜尋結果則優先展示搜尋結果,同時提示糾錯後的詞語供使用者一鍵搜尋。糾錯和補全可以看作是與query做模糊匹配,從而返回一個相似的單詞集合。
Apache開源的全文檢索引擎工具包——lucence,就提供了該功能點的實現。大致思想是:給定一個包含大量正確單詞的詞典集合,與使用者的query進行匹配,計算出編輯距離,距離越小則越相近。
編輯距離:是兩個單詞之間轉化的最少變化次數。
比如:字串“abcd”變為字串“bcde”,需要刪除a再插入e編輯距離為2。
編輯距離的定義簡單,但是關於“如何降低演算法複雜度?”,這個比較偏技術。產品同學瞭解思想即可,對技術有熱情有興趣的同學也可以研究下Lucence內的實現。
2。 分詞
當用戶的搜尋詞比較長,則需要將query切分成一個個單元。
比如:使用者搜尋“夏季仙女連衣裙”,如果用整個字串做匹配的話,召回率就會很低。所以,需要分為“夏季”+“仙女”+“連衣裙”。
市面上有開源的分詞工具包可以直接使用,比如:IKAnalyzer中文分詞器。
但是,不同的分詞工具運用的分詞演算法不一。以機械分詞演算法為例——一種基於字串匹配的分詞方法,它可將待分析的字串與機器詞典中的詞條進行匹配,假如在詞典中找到某個字串,則匹配成功。
除了通用詞條,跟產品業務相關的詞彙我們也需要儘可能的補充完善進詞典。
這裡我們介紹一下機械演算法中的“正向最大匹配演算法”和“逆向最大匹配演算法”。
正向最大匹配演算法:
從左到右逐個組合掃描詞與詞典中的詞條進行匹配,如果匹配成功,則把這個詞切分出來,繼續匹配剩餘的字串。
那麼如何做到最大匹配呢?
讓我們來看一個例子:
待匹配詞條:string data=“仙女連衣裙夏季”,透過字串擷取函式擷取對應需匹配的詞條。
詞表:array dict=[“仙女”,“仙女連衣裙”、“連衣裙”、“夏季”]。
從data[1]開始掃描,到data[2]的時候,發現:“仙女”在詞表中有,但是還不能將該詞切分出來。因為“仙女”是dict[2]“仙女連衣裙”的字首。
繼續掃描發現:data[5]在詞表中有,但是還不能切分出來。
掃描data[6]發現:在詞表中沒有“仙女連衣裙夏”,這個詞條也不是任何一個詞的字首,則切分出前面最大的詞——“仙女連衣裙”。
以此類推,最後得到的片語為:[“仙女連衣裙”,“夏季”]。
逆向最大匹配演算法:
先定義一個最大分割長度5,從右往左開始分割。
以data[5]表示“連衣裙夏季”,data[4]表示“衣裙夏季”。
從data[5]開始掃描,若不在詞表中,去掉最左邊一個字,得到data[4],直到發現data[2]在詞表中,將詞語拆分出來,此時待匹配詞條變為“仙女連衣裙”。
匹配data[5]時,若發現詞表中有,則切分出來,分割結束,得到的片語為[“仙女連衣裙”,“夏季”]。
3。 索引匹配
索引:可以理解為是一種資料結構,是基於資料表中的某一列建立的,儲存了列值以及和錶行的對應關係。
例子我就不多說了,不清楚的同學可以自行谷歌。如果沒有索引,在查詢時,需要對資料庫表做全表掃描並做文字匹配,這是不現實的。
建立商品後,系統會將商品名稱分詞並且建立索引形成索引庫,必要時也可以將商品類目、品牌引入索引庫中。將使用者query的分詞片語與索引庫進行匹配,得到商品候選集。
4。 商品侯選集
首先,匹配出query相關的類目以及與query文字相關的所有商品,以類目+文字為最高優先順序對商品進行排序,類目和文字相關性一致的則根據權重排序。
影響權重的因子包含:“商品近30天的銷量”、“評論平均分”、“上線日期”、“店鋪得分(文描,評論,物流)”等。
給所有因子影響權重的比例定義一個係數,需要根據實際業務運營策略制定。
比如:運營希望多曝光一些服務優質的店鋪,則店鋪維度的因子權重比例就高。如果運營想多曝光一些爆款商品,則提高商品各項因子的權重比例——擷取商品候選集的topN做綜合排序得到商品結果集。
如下圖:
商品候選集選取流程
5。 綜合排序
從商品列表中提取出三部分 :
同類目人工干預置頂
售罄或差評商品沉底
其他部分待排序。
透過點選率預估模型對待排序商品重排序,並區分同類和其他類目。
影響點選率預估模型的成分有:
店鋪因素(店鋪近期訂單量,評分,物流,PV,UV)
商品因素(銷量、價格,與同類商品價格差)
使用者本身特徵(近期購買,瀏覽,收藏)
實時特徵(當天商品被瀏覽,加購等)
季節因子
對同類目的商品優先提取品牌和商品詞符合的做前置(比如搜尋小米插座 品牌:小米,商品詞:插座)。
最後合併各個分段結果如下圖:
綜合排序流程
以上梳理了搜尋流程中的一些關鍵節點,而如何提高搜尋引擎的使用者體驗呢?
核心和難點在於:理解使用者,進而高效的幫助使用者找到目標商品。
這就離不開運用各種機器學習和自然語言處理技術進行語義分析,不斷嘗試各種搜尋引擎排序演算法幫助使用者找到更優質的商品。
通常大型電商平臺的搜尋團隊都是偏技術配置,業務型的產品雖然不需要深度學習演算法與資料模型相關的知識,但是基本概念和思想最還好是要掌握。
以上是我的分享,歡迎交流。