解構電商、O2O:探秘搜索系統的“簡歷”
之前的文章探討過用戶端背后系統的邏輯和結構情況,后續我會考慮逐步解構每個相關系統的情況。今天跟大家聊一聊搜索系統,搜索系統在所有電商系統里面復雜度和難度是可以排的上前列的。關于算法方面介紹的文章很多,這里不做贅述,只解構下搜索系統的基本邏輯和實現。對于產品來說未免溝通時“露怯”,了解搜索系統的基本知識和結構是有必要的。
搜索系統的“基本介紹”
搜索系統,顧名思義提供大數據查找篩選的系統功能。在電商和O2O領域作為一個主要的流量入口起到了至關重要的作用。
“基本介紹”:指標
對于搜索來說,主要的指標為準確率和召回率。我們以下圖為例解釋下什么叫做準確率和召回率。
圖中整體的部分為所有商品數據的全集,其中包括不相關和相關的內容。
- 準確率:搜索結果中相關內容的比例,即圖中A的部分
- 召回率:搜索結果占整體內容的比例,即A+B
由此我們可以看出,最完美的結果是A足夠大且B足夠小,但實際實現中會發現兩個指標是相反的(召回率越高準確率會越低)。需要通過規則來平衡這塊部分。
“基本介紹”:基礎結構
搜索系統主要的組成部分有幾塊:
- 切詞邏輯
- 詞庫
- 基礎信息
- 加權規則
- 排序展示邏輯
整體流程如下
名詞解釋:
- query:是查詢的意思,這里指用戶在搜索框輸入的內容。
- 切詞:又叫分詞,是根據詞庫/詞典將一段文本進行切分以便機器識別的過程。
- 詞庫:指用于切詞的詞庫。
- 加權:將檢索結果集按照一定的維度、規則進行打分就叫做加權。
- 索引:商品信息存儲時需要建立索引,索引作為每個商品的標識方便在大數據量的情況下快速查找篩選。
“基本介紹”:應用場景
搜索的應用一般有兩種:全文檢索和suggest。其中suggest的規則比全文檢索要簡單一些。服務上由于suggest一般支持模糊查詢的情況,所以要考慮服務上是否要獨立還是公用一套。
搜索系統的“工作履歷”:流程解構
切詞/詞庫
切詞,又叫分詞。用于將用戶輸入的無結構化字符變成機器可識別的詞組。市面上有很多成熟的切詞組件。切詞邏輯有很多種,根據字符、概率等,電商和O2O一般使用字符串切詞的方式處理。關于切詞的方法最基礎的有最大正相匹配、最大逆向匹配、雙向匹配等,具體的內容可以百度查詢。切詞工具根據詞庫中的詞典進行切分,一般開源的切詞工具都有默認的詞庫和自定義詞庫兩種情況。用戶可通過添加自定義詞庫來完善補充。
這里面需要強調的是切詞時候的過濾,尤其生鮮類非標品情況下特別需要注意。
- 單字詞、助詞之類的是否要過濾掉。如米、面、油等
- 別名情況的處理,尤其是生鮮類。比如在北京叫油菜,在上海叫上海青,在重慶叫漂兒白
檢索結果集
根據切出的詞語進行匹配,匹配到的商品信息集合為檢索結果集。結果集需要做檢索、過濾、標記三個步驟。
檢索
檢索項包括但不限于:
- 商品名稱
- 商品標題、副標題
- 商品描述
- 商品參數、規格
- 商品品牌(生鮮副食品類尤為重要,比如五得利面粉、鵬程五花肉)
- 商品品類(一級類、二級類)
- 別名關聯商品
- 促銷類型
成熟的電商系統不僅僅實現用戶的基本商品檢索,還會根據query進行意圖分析來進行query轉換。以生鮮電商舉例,當用戶搜索“豬肉”時,用戶希望獲得的不是含有豬肉詞語的商品,而是豬肉的各個部位、豬肉級別等。這時應該轉化為后臀尖、前臀尖、里脊,一級白條等詞語進行檢索,而不是匹配豬肉。意圖分析主要有兩個方面
- 行為模式分析
- 用戶畫像分類
過濾
獲取的結果集需要經過去重、過濾的處理。此部分行為可以在加權打分后進行處理,也可以安排在初選結果后處理。
- 同一個商品被多個詞語命中需要去重
- 現實中的電商搜索可能會根據不同的場景構建所謂的“小搜索”,如按照類目、按照品類、按照定制化場景等。所以針對不同的搜索場景可能會有單獨的過濾去重條件,也可以在構建數據的時候使用不同的庫進行處理。
- O2O場景需要按照一定區域概念(城市、商圈等)進行過濾
- 售罄商品需要過濾
- 下線商品需要過濾
標記
在檢索完成后需要對數據進行標記,以便后續做加權時使用。此步也可以在做加權處理的時候同步進行。
加權
加權的目的是為了根據模型確定結果集各個商品的排序優先級。加權的維度有很多,根據不同的場景考慮也會有所區別。
加權因子主要分為幾個維度:
- 相關度
- 商業化因素
- 個性化因素
- 人為因素
- 數據模型統計
相關度
這里指的是分詞的相關度。包括文本匹配、詞間距、是否是中心詞、品牌詞等。中心詞的概念是是否命中了核心的詞語,中心詞和品牌詞也需要有對應的詞庫進行維護更新。詞間距是計算相關性的一個維度,比如一段文本中包含清華、大學,“清華大學xxxxxxx”和“清華xxxxxxx大學”相比肯定是前者相關性更高一些。
這里面有幾點需要注意:
- query被完整匹配和部分匹配的權重是不同的
- 單詞命中和多詞命中同一商品也需要考慮權重情況
商業化因素
考慮業務場景下需要關注的因素稱之為商業化因素。
- 商品庫存
- 是否新品(考慮新品的特殊性,也可以將此權重獨立打分)
- 商品銷量
- 是否促銷商品
- 銷售額
- 商品分類
- 商品品牌
- CTR(廣告類的商品要考量)
- 所屬平臺(POP、自營)
- 區域(020屬性)
- 終端情況(手機、PC)
個性化因素
按照個人使用的情況進行個性化排序,做到所謂的“千人千面”。包括下單數據分析等。這部分同意圖分析的情況類似。
人為因素
在日常運營過程中,有很多需要做強制人為干預的事情(如人工置頂)。所以在加權的時候需要考慮此類行為。
數據模型統計
可以根據用戶的一些行為數據或者埋點數據分析,提供綜合排名靠前的商品或者分類做單獨加權權重。包括:
- 用戶點擊
- 用戶收藏
- 購買數
排序處理
根據加權的情況和一些特殊的處理,需要對最終輸出的結果做排序調整。
這里提供兩種方法供大家參考
- 可以按照加權打分的分值之和做排序。這樣做比較直接,但在后續調整的過程中驗證規則時容易混淆不清晰。
- 將不同的權重維度單獨計算,生成一個長位數的標識符,每個權重在標識符上有自己的位置。按照優先級的順序從左到右依次排列??紤]到機器計算的易用性上,可以在加權時使用十進制,然后統計時轉換成二進制即可。類似下圖這樣,位數和排序可以根據具體業務場景制定。
最后要說下,在算法中要考慮相同因子下的打散,比如同一個商家店鋪下的商品排序需要按照一定比例分布在不同地方,避免一次性展示過多同類商品。
如果系統能力富足,也可以增加單獨的反作弊模塊來處理一些惡意刷單刷榜的情況。
搜索與“大家”的關聯
搜索系統主要為用戶端提供搜索結果的輸出,輸入方面來自于相關的下游系統。
當搜索場景進一步細分時,要考慮更多數據的對接和分類。
在設計時有幾個需要注意的地方:
- 搜索數據比較龐大,直接使用API調用實時數據對于系統壓力過大,一般可采取搜索自建索引庫,定時(比如15分鐘)從相關系統拉取數據的方式。
- 基于不同的場景可以提供單獨的索引庫來實現,避免邏輯耦合不好分離做個性化。
- 用戶端在調用suggest時考慮到服務壓力,建議延遲幾秒請求數據。
- 分詞詞庫的維護也依賴于定期從相關系統中獲取補充。
結語
搜索系統的核心是算法,從產品層面來說更多是關注業務邏輯規則以及上下游的依賴情況。本文對搜索的一些通用情況做了簡單介紹,更深入的內容還需要大家在日常過程中進一步的深挖。
相關閱讀
作者:高暉,微信號公眾號@雜談暖閣,10余年IT經驗,互聯網老兵。曾就職當當網、到家美食會、美菜網等公司,現就職餓了么。
本文由 @高暉 原創發布于人人都是產品經理。未經許可,禁止轉載。
你好,問一下,類似做搜索,現在市面上是否有很多成熟得API,直接調用即可呢?最好是免費得 ??
你可以參考下ES。是一個開源的程序,支持二次開發
謝謝!
還沒入門產品汪班門弄斧一下,關于一開始的準確率和召回率有點疑問,不知道互聯網運營中的定義和機器學習預測算法是否一致,如果一致應該是以下定義:
相關內容藍色部分 = FP (False Positive)
搜索結果A = TP (True Positive)
搜索結果B = FN (False Negative)
不相關內容灰色部分 = TN (True Negative)
準確率(Precision) = TP /(TP + FP)
召回率(Recall) = TP /(TP + FN)
準確率:搜索結果中相關內容占所有相關內容的比例,即圖中A占所有相關內容的比例
召回率:搜索結果中縣官內容占所有被搜索出來內容的比例,即圖中A占A+B
我要關注你,好好學習一下
準確率(Accuracy)= TP+TN / (TP+FP+TN+FN)
精確率 (Precision)= TP /(TP + FP)
召回率 (Recall)= TP /(TP + FN)
準確率和精確率指標的中文名稱搞錯了,等我探究出來電商常用的這兩個指標再來回復。
不好意思誤導大家,第一次發的對應關系錯了,正好得出相反的結論,我要改正!
戲可真多,再回復我是狗,汪汪汪。。。
相關內容藍色部分 = FN (False Negative)
搜索結果A = TP (True Positive)
搜索結果B = FP (False Positive)
不相關內容灰色部分 = TN (True Negative)
準確率(Accuracy)= TP+TN / (TP+FP+TN+FN)
精確率 (Precision)= TP /(TP + FP)
召回率 (Recall)= TP /(TP + FN)
精確率 = 正確識別的個體總數 / 識別出的個體總數
召回率 = 正確識別的個體總數 / 存在的應識別個體總數
精確率(正確率):搜索結果中相關內容占所有被搜索出來內容的比例,即圖中A占A+B的比例
召回率(查全率):搜索結果中相關內容占所有相關內容的比例,即圖中A占所有相關內容的比例
你回復的這么呆萌,我不知道該咋回復了。。。
那就干杯?? 我自己好好研究研究
不過我有個重要的問題,我有3年市場營銷崗位的經驗,工作后去讀了個數據方面的研究生,去年12月畢業做的還是運營方面的工作。。感覺想做產品經理阻力重重
那你為啥要轉產品呢,這個問題可能需要長談才能說明白。很多方向的判斷要考慮了
666,開始關注你了
請教一個問題,為什么搜索過濾、排序不是作為檢索條件提交搜索引擎,一次性得到結果;而是在檢索結果后做過濾排序。
1. 檢索結果肯定是按分頁查詢,針對當前頁過濾后,極端情況可能沒有商品。
2. 排序為什么是針對當前查詢的產品過濾,而不是針對有所有的產品排序呢?
分步驟有利于負載,而且過于復雜的邏輯耦合在一起提交,很容易在后期優化的時候出問題。
將邏輯分成不同的步驟,逐步完成有利于后期產品邏輯解耦和系統實施。不同模塊也可以單獨處理。
不知道我的回答是否解答了你的問題
高總,這些你用visio畫的?
不是,auxre畫的