電商搜索系統精講系列三步曲2
編輯導讀:在電商軟件中搜索一款產品,頁面中會出現很多相關產品的展示。這些頁面是如何展示呢?為什么會這樣展示?本文作者以電商產品為例,對其頁面排序系統進行分析,希望對你有幫助。
01 排序的場景模型
上篇文章我們針對一個電商搜索系統的業務以及召回分析器和模型的分析,比如當用戶在淘寶APP搜索框中輸入搜索關鍵詞“2021年新款花式促銷女士連衣裙”,搜索系統會通過分析器和各種模型來理解用戶的搜索意圖,進而達到召回商品的目的(這塊的原型將在“電商搜索系統精講系列三步曲”的下篇會push給大家);
那么思考一個問題,用戶搜索“2021年新款花式促銷女士連衣裙”之后,頁面怎么展示,為什么會這么展示?依據是什么,如下圖?
這個就是我們今天要去講的內容,往下看:
在分析這塊的內容之前,同樣,我依然舉現實生活中的場景模型:
某公司產品總監A需要招聘具有豐富教育中臺行業經驗的產品經理,在BOSS直聘的崗位描述JD(Job Description)增加了要具備教育中臺行業的經驗的招聘要求,于是有以下求職者去面試:
- 應聘者B:有教育行業經驗,但無中臺產品建設經驗;
- 應聘者C:有教育行業經驗,但工作年限比較短,不夠豐富;
- 應聘者D:有中臺產品建設經驗,但無教育行業經驗;
- 應聘者E:有豐富的教育中臺行業經驗,但是之前做的是解決方案,并非產品經理崗;
那么現在,假設你作為該公司的產品總監,你該怎么選?先不要看下面,先思考;
答案其實也很簡單,你一定是挑選一個適合該崗位要求的吧,那么什么才叫適合,評判的依據是什么?你作為產品總監究竟怎么對這四個求職者進行評估?
現在有些大公司采購了線上招聘系統,人力資源HR和產品總監把對這四位求職者的面試結論以文字的方式直接錄入到這個招聘系統,系統就會給出一個建議分,這個建議分值提供給產品總監和HR人員進行決策評估和參考,當然沒有這個線上招聘系統也沒關系,最土的辦法就是下面這種,用手填寫面試評估表,用手打分,只不過這種方式的打分更多帶有主觀色彩。
所以最后的結論就是對每個求職者進行打分,然后通過打分來對B、C、D、E四名求職者進行排序,排序第一、第二、第三及第四,最后擇優錄用;
好,上面說的是招聘的工作,想一想,我們每年高考錄取是不是也是這種方式來進行擇優錄取,同樣的場景模型,我們嘗試搬遷到線上,應用在召回商品的排序上,接著看:
那么問題來了,同樣的場景模型搬遷到線上,就會涉及到對召回的商品打分怎么打的問題,這個是核心,人類有大腦可以用于主觀判斷,但電腦沒有眼睛沒有感官系統,沒法等同于人類那樣去思考,所以我們需要做的就是給他輸入一系列的打分規則,電腦就能打分,就能對召回的商品進行排序,從而實現我們的目標,接下來我們看排序的策略;
02 排序策略
大家回想之前浙江衛視的中國好聲音節目,那些在電視熒幕上看到的唱歌選手也一定是提前開始海選,然后逐層選拔通過才會參加電視上的唱歌比賽吧,如果沒有海選這個環節呢,每個人只要報名都可以直接在電視上唱那么一曲,那豈不是要把浙江衛視那些工作人員累死,所以選手是通過海選,逐層比賽,一關一關的通過,最后挑選出表現優秀的前100名參與電視上的唱歌比賽;
我們采用同樣的套路,召回的商品(因為這個量級也是非常巨大的)先海選,再去精選,業內很多人稱海選為粗選,所以召回的商品先要進行粗選,通過粗選把可能滿足用戶意圖并且是相對優質的商品(比如有一萬個)全部篩選出來,再去優化(一萬個召回的商品精選排序)這個選擇的結果,最后把選出來的前1000(只是假設)個商品進行排序展示給用戶;
搜索引擎本身對于檢索性能要求比較高,所以需要采用上面說的兩個階段排序過程:粗排和精排。粗排就是上面說的海選,從檢索結果中快速找到優質的商品,取出TOP N個結果再按照精排進行打分,最終返回最優的結果給用戶。所以一般在搜索系統中,粗排對性能影響比較大,精排對最終排序效果影響比較大,因此,粗排要求盡量簡單有效,只提取數據庫表中的關鍵因子(字段)即可,關鍵的問題在于打分怎么打,下面將給大家介紹常見的打分策略:
我們首先引入一個新的概念—-表達式計算法
所謂表達式計算法:通俗的講,就是通過不同的計算公式來運算每個被召回的產品和用戶意圖的相關度,這個相關度某種意義上講就是打的分數,業內普遍稱這個過程為相關算分,一般常見的計算公式比如基本運算(算術運算、關系運算、邏輯運算、位運算、條件運算)、數學函數和排序特征(feature)等。
基本運算:
數學函數:
以上兩個函數比較簡單,高等數學里面都有的內容,這里不再細說,下面來看下上面提到的粗排常用的幾個函數(以下為天貓搜索為例):
關鍵詞相似文本分Text similarity()函數:用于計算用戶輸入的關鍵詞文本與召回的商品相關度,值越大,則相關度越高;
召回商品距離現在的時間GoodsTime()函數:用于計算召回的商品距離現在的時間,一般取值為(0,1)之間,一般值越大,表商品距離現在時間越近,越容易被展示在用戶的界面;
類目預測函數CategoryPredic():用于計算用戶輸入的關鍵詞與商品類目的相關度,關于類目預測這里需要仔細說明下:
所謂類目預測,指的是通過計算機的算法去預測搜索的關鍵詞與商品
類目的相關程度,我們舉個例子,當用戶在淘寶APP搜索框中輸入關鍵詞“蘋果”,則類目預測會計算商品所屬類目與輸入的蘋果這個關鍵詞的相關度,類目與關鍵詞的相關度越高,商品就獲得了越高的排序得分,也就是上文說到的相關算分值就越高,從而這個商品就會排在越前面,借助下面這兩張圖,就更好理解了:
第一張圖:搜索的關鍵字是“蘋果”,既有手機類的商品也有食物類的商品,左圖就是典型的沒有使用類目預測模型來打分,所以把食物類的蘋果也召回并且優先排序在前面,右圖是使用后類目預測模型后的打分排序效果;
用戶輸入“蘋果”,查詢到一批商品,這些商品中有一部分的商品類目是“手機類”,另一部分的商品類目是“食物類”,根據計算機大數據對全量用戶的搜索歷史行為分析得出,搜索“蘋果”的人里面,點擊“手機類”類目商品的人要比點擊“食物類”類目商品的人多得多,則類目預測就會給出這樣的預測結果:“手機類”類目與“蘋果”的相關度要比“食物類”類目與“蘋果”的相關度高,所以在計算每個商品的相關算分時,“手機類”類目商品的算分值就會比“食物類”類目的商品算分值高,因此“手機類”類目的商品會排在更前面,這樣就提高了搜索的業務價值;
所以我們在做產品原型設計的時候也要考慮搜索的關鍵詞與商品類目的相關程度,需要在原型的設計里面增加類目預測的模型的設計;
再來回過頭看,我前面講的,排序首選要進行海選也就是粗排,再針對粗排后的商品結果進行精排,粗排已經講了,精排怎么排?
同樣是要通過函數去計算搜索的關鍵詞與商品的相關度,常見的函數有:
文本相關度函數:
- text_relevance: 關鍵詞在字段上的商品匹配度
- field_match_ratio:獲取某字段上與查詢詞匹配的分詞詞組個數與該字段總詞組個數的比值
- query_match_ratio:獲取查詢詞中(在某個字段上)命中詞組個數與總詞組個數的比值
- fieldterm_proximity: 用來表示關鍵詞分詞詞組在字段上的緊密程度
- field_length:獲取某個字段上的分詞詞組個數
- query_term_count: 返回查詢詞分詞后詞組個數
- query_term_match_count:獲取查詢詞中(在某個字段上)命中文檔的詞組個數
- field_term_match_count:獲取文檔中某個字段與查詢詞匹配的詞組個數
- query_min_slide_window:查詢詞在某個字段上命中的分詞詞組個數與該詞組在字段上最小窗口的比值
地理位置相關性:
- distance: 獲取兩個點之間的球面距離。一般用于LBS的距離計算。
- gauss_decay,使用高斯函數,根據數值和給定的起始點之間的距離,計算其衰減程度
- linear_decay,使用線性函數,根據數值和給定的起始點之間的距離,計算其衰減程度
- exp_decay,使用指數函數,根據數值和給定的起始點之間的距離,計算其衰減程度
時效性:
- timeliness: 時效分,用于衡量商品的新舊程度,單位為秒
- timeliness_ms: 時效分,用于衡量商品的新舊程度,單位為毫秒
算法相關性:
- category_score:類目預測函數,返回參數中指定的類目字段與類目預測query的類目匹配分
- popularity:人氣分,用于衡量物品的受歡迎程度
功能性:
- tag_match: 用于對查詢語句和商品做標簽匹配,使用匹配結果對商品進行算分加權
- first_phase_score:獲取粗排表達式最終計算分值
- kvpairs_value: 獲取查詢串中kvpairs子句中指定字段的值
- normalize:歸一化函數,根據不同的算分將數值歸一化至[0, 1]
- in/notin : 判斷字段值是否(不)在指定列表中
以上函數大家不用去研究細節,看看函數的中文解釋就好,幫助理解和消化,知道精排的算分怎么統計、哪些維度去統計即可,如果依然不理解的,可以跟我一起交流;
說到現在大家一定很好奇,為什么用戶最關心的商品熱度沒有提到,不著急不著急,接下來,我們就要針對搜索熱度比較高的商品一般怎么排序,引入一個新的概念—–人氣模型;
上面說的類目預測模型是要實時去計算,而人氣模型可以在離線的時候進行計算,一般也叫離線計算模型,這種模型也是淘寶和天貓搜索最基礎的排序算法模型。
人氣模型會計算量化出每個商品的靜態質量以及受歡迎的程度的值,這個值稱之為商品人氣分,最開始人氣模型是來自淘寶的搜索業務,但其實這個模型對于其他的搜索場景也有很強的通用性,在非商品搜索場景中通過人氣模型也可以計算出被索引的商品的受歡迎程度,比如某個論壇,可以通過人氣模型排序搜索比較多的帖子,把這些帖子內容優先展示給用戶;
那么對于一個商品而言,這個人氣模型究竟怎么計算,畢竟系統的目標是通過這個模型來計算商品的熱度,進而打分排序,你說對吧;
一般情況下,人氣模型從四個維度去計算分值,具體如下:
第一個維度:實體維度;
比如:商品、品牌、商家、類目等。
第二個維度:時間維度;
比如:1天、3天、7天、14天、30天等。
第三個維度:行為維度;
比如:曝光、點擊、收藏、加購、購買、評論、點贊等。
第四個維度:統計維度;
比如:數量、人數、頻率、點擊率、轉化率等。
每個特征從以上4個維度中各取一到兩個進行組合,再從歷史數據中統計該組合特征最終的特征值:
比如:
- 商品(實體)最近1天(時間)的曝光(行為)量(統計指標);
- 商品所在店鋪(實體)最近30天(時間)的銷量(行為類型+統計維度)等等。
由以上方法產生的結果數量級,等同于去計算4個維度的笛卡爾積,再對笛卡爾積的算分高低進行排序;
好了,說到現在關于召回的商品排序所采用的算法目前我所了解的就這么多,當然能力有限,有些搜索的細節依然需要進一步去摸索;
03 召回與排序總結
我們來對上一篇文章和今天講的內容簡單的做個總結,當用戶在淘寶APP搜索框中輸入“2021年新款花式促銷女士連衣裙”時,搜索引擎系統首先要去理解用戶的意圖,理解的方式就是上篇文章提到的分析器,通過對語義的理解、命名實體識別、拼寫糾錯、停止詞模型等手段去理解用戶的意圖,進而通過這個意圖計算機去到后臺數據庫中檢索符合意圖的所有商品,當商品被檢索出來之后,搜索引擎系統首先要通過各類函數和模型對商品進行粗排,再對粗排的結果進行精排,精排的依據就是上面的函數和模型,當然還有類目預測模型和人氣模型,這個就是大概的流程;
依然沒有結束,首先來看下面這張圖:
想一想,上面左圖中的熱搜底紋和熱搜列表是怎么來的、右圖中的下拉提示又是這么出現的?這個就是原計劃需要在今天跟大家講的引導排序內容;
關于引導排序這塊的內容我們放到下一篇繼續分享,今天就寫到這,再見!
04 預告
本文由 @產品研究站?原創發布于人人都是產品經理。未經許可,禁止轉載
題圖來自Pexels,基于CC0協議
寫的不錯