淺談電商類目預測

總結一下過去一年時間內做的電商類目預測。

電商類目體系

在電商場景下,商品會掛在不同的類別下,每個商品一般僅對應一個類別,例如商品“秋季新款韓版小清新短款亮片衛衣女高腰個性寬鬆百搭連帽長袖上衣”會掛在類目“衛衣”下。同時電商的類目體系是一個樹結構,包含父節點和子節點等;
在這裏插入圖片描述
蘑菇街類目體系:
在這裏插入圖片描述
結構體系類似,都是多級類目,葉子類目是商品所屬的最小類目。

query類目預測

用戶搜索時,需要根據用戶的輸入文本,預測用戶意圖。對應於電商搜索,用戶輸入文本後,首先要預測的就是文本與商品類目的關係,預測的結果將作用在後續多個模塊,對整個用戶的搜索結果影響較大。
要識別用戶的輸入意圖,可以從多個方面切入;一方面是歷史用戶搜索點擊行爲,另一方面是文本本身的相關性。
電商搜索場景下,每個用戶在發起一次搜索後,將經歷多個階段。首先是QR階段(query rewrite),可以理解爲對query進行分析,分別有文本分詞、文本糾錯、丟詞、品牌識別、同義詞擴展、類目預測、同義query擴展等,將分析的結果轉化爲搜索引擎可以識別的語言——布爾語言(AND|OR|NOT);第二步,因爲電商平臺商品非常多,百萬、千萬、上億的商品,如何保證召回的商品與輸入文本最相近呢?輸入文本與商品標題全匹配+類目預測進行粗排+商品靜態分,文本全匹配和類目預測保證基本的商品與輸入文本相關性,商品靜態分保證商品質量,通過簡單排序模型取topn個比較相關的商品;第三步,此時商品依然較多,僅能保證商品與文本基本相關,卻無法保證商品是用戶感興趣的。所以,用戶個性化排序,也稱精排做最後排序,使商品排序效率最大化。在第三步中,爲了防止個性化排序突破搜索意圖相關性,一般可以將類目預測得分較低的商品排在後面,保證頭部商品的排序相關性。
類目預測query相關性,保證商品召回的相關性,提升用戶的搜索體驗。但針對搜索query的類目預測存在較多的問題:

  1. query長度較短,包含信息太少。
  2. 一個query往往不一定只與一個類目相關,其可能與多個類目相關
  3. 長尾搜索query較多,較難統計歸類
  4. 類目上流量馬太效應嚴重,存在較多類目流量較少。
  5. 類目一般分爲多級,越靠近葉子節點,預測難度越大。
  6. 類目間存在重疊情況,本身區分難度較大。例如毛衣和針織衫

類目預測模型選擇

人工方式

第一種方式,也是最粗暴的方式,直接採用人工對query進行配置。通過從電商app或pc搜索中拉取日誌信息,分析得到top 熱門搜索query,對這些query進行人工相關類目配置,保證下次用戶搜索時類目正確;也可以通過query下用戶的類目點擊,統計分析得到query最相關的類目,人工審覈後確定一一對應關係。
畢竟2000塊可以解決的問題,沒必要花2W塊,初期可以採用這種方式,保證大多數用戶的搜索。

統計文本類目相關性

這個方法的出發點爲:每個詞與類目的相關性不同,或者說每個詞相關的類目有限且權重不一。
基於這個假設,可以計算出每個詞與類目的相關性得分,值域一般控制在[0,1],0代表不相關,1代表非常相關。
這部分的工作相當於特徵選擇,特徵即爲詞,選擇重要的詞。詞的重要性由詞在類目中的聚集性決定,即詞若只在少數幾個類目中出現,則詞的辨別性越強,重要性越高。
選擇方法

  1. 點互信息PMI:pmi(x,y)=logp(x,y)p(x)p(y)pmi(x,y)=log\frac{p(x,y)}{p(x)p(y)}x,y分別代表詞和類目,p(x,y)p(x,y)表示兩者共同出現的概率,p(x)p(x)代表詞屬性的概率,p(y)p(y)代表類目y出現的概率。
  2. 卡方分佈x2x^2檢驗,詳細信息可參考:特徵選擇-卡方檢測
  3. tf-dc:這個是瀏覽博客時偶然發現的方法[^1]
    dc(t)=1H(t)C=1+i=1Cf(t,ci)f(t)logf(t,ci)f(t)logCdc(t)=1-\frac{H(t)}{|C|}=1+\frac{\sum_{i=1}^{|C|}\frac{f(t,c_i)}{f(t)}log\frac{f(t,c_i)}{f(t)}}{log|C|}
    其中dc(t)dc(t)表示詞的重要性,C|C|表示類目數量,f(t,ci)f(t,c_i)表示詞與類目出現次數,f(t)f(t)表示詞出現次數,採用信息熵的概率計算詞的重要性。
    其中
    f(t,ci)f(t)logf(t,ci)f(t)\frac{f(t,c_i)}{f(t)}log\frac{f(t,c_i)}{f(t)}
    可表示爲詞與類目cic_i的相關性,爲信息熵。
    當然還有較多的方法,此處不一一列舉。
    最終可形成如圖所示格式,即每個詞與類目的關係及權重
    在這裏插入圖片描述
    計算上述詞和類目的重要性,最終得到的是每個商品詞與類目的關聯性和關聯度;線上用戶搜類目預測時,可對商品query進行分詞,將分詞後每個term分別召回相關的類目,多個term的召回結果按類目維度求和,得到當前query的相關類目和相關得分。

簡單deep模型

隨着深度學習的火熱,deep model具有更好的泛化效果,在類目預測上同樣可以嘗試。首先抽象一下類目預測的任務,將其抽象爲一個分類任務,輸入文本爲query,預測可能相關的類目。
在這裏插入圖片描述
問題抽象完畢,下面就是構建模型的思路:
1.樣本構建
2.模型選擇
3.線上落地
4.模型異常處理

  1. 樣本構建
    在實踐過程中,樣本並非直接取商品搜索中query點擊的類目作爲訓練樣本,而是採用商品title和對應的類目作爲分類訓練樣本。之所以這麼做出於以下幾點考慮:
    線上query點擊類目數據噪聲太多,小類目下的點擊數據較少
    title中天然存在文本-cid的pair對,方便
    title中存在關鍵詞與類目的關聯關係
    線上數據如果不能很好的清洗,模型將切向與熱門類目和query,泛化性能較差
    基於以上幾點考慮,暫時採用商品title數據。此處其實爲後續的優化留出了較大空間,後續的模型也確實將線上query數據清洗後作爲訓練數據,後面會講到。
  2. 模型選擇
    此處因爲業務迭代的原因,模型並未考慮較爲複雜的結構,直接採用簡單cnn或lstm進行訓練。
  3. 線上落地
    線上類目預測要求實時性較高,考慮到每天70%以上的query可以從日誌信息中獲取,故將類目預測分爲線下和線上部分。
    線下:將熱門query通過模型直接預測生成相關類目,導入到線上,query可直接查表獲取類目結果
    線上:針對長尾query,對query進行類目預測,返回預測結果
  4. 模型異常處理
    沒有一個模型可以應對所以的情況,所以模型必然存在預測錯的情況,需要增加一個干預機制,我們希望干預越來越少。
    對線下預測結果,可以做更多的管控,例如query可召回商品類目分佈情況,類目下商品數量多的大概率是相關類目;熱門query在線上的點擊情況。
    最後,針對線上情況,我們開發了一套干預平臺,方便對query結果直接調整。

語義相關性匹配模型

先不說語義相關性匹配模型是什麼,先來回溯一下類目搜索想要達成的目標、電商類目預測的特點。
爲什麼要做類目預測?因爲要預測用戶當前搜索的商品意圖;那麼用戶的商品意圖是什麼樣的?理想情況下用戶搜索商品時,明確表達想要找的是什麼商品。但這是理想情況下,真實的用戶搜索是非明確的,特別是女士(無性別歧視)更傾向於輸入關鍵詞,開始逛,男士可能目的性更強一些,所以用戶的商品意圖是非明確的。用戶可能會搜索”外套“,但是他並沒有想好是牛仔外套,還是毛呢外套,又或是件風衣,所以更多搜索的類目意圖是多面的(很重要,很重要,很重要)。
確立用戶的意圖是多面這個前提,就要確定哪些類目經常是相互關聯的。這裏爲什麼要人爲去做確定,而不是讓模型自己去學,這是因爲線上的數據樣本馬太效應非常嚴重,致使較多的類目曝光量較低,所以人爲構建反而是一種打破當前馬太的好方法。
基於以上兩點來看上述方法,弊端就較爲明顯:1.無法很好的確定用戶意圖的多方面性;2. query搜索的泛化效果不好;由此,我們提出基於語義相關性匹配的類目預測模型。
模型抽象
模型輸入一個文本,預測結果爲多個,這個是一個多標籤分類任務。借鑑相關性匹配模型,我們構建模型結構如下
抽象模型結構

相關性論文中的模型結構 [3][4]:
相關性論文模型結構
線上使用的模型
在這裏插入圖片描述
模型結構輸入爲query和類目信息,兩者分別經過embedding層、雙向lstm層、attention層、MLP層,最後輸出爲兩者相關的概率得分。
query輸入:線上用戶搜索query,經過分詞後映射爲wordid
category info:類目全路徑的文本信息+類目id,文本信息經過分詞後映射爲wordid。
attention結構:圖中類目側經過bilstm輸出每步的向量,而query側只輸出最後step的向量,將query向量與類目矩陣進行attention相關性計算,計算得到類目詞的attention score,進而得到類目的向量表達。
VqcV_{qc}:query 向量和類目向量concat。

樣本構建

  1. 結合電商搜索場景下,用戶搜索query後,引擎通過索引召回商品,召回的商品類目是一個相對較小的範圍,而線上用戶點擊較多的類目爲正樣本,其他類目爲負樣本,生成query-類目全路徑文本pair對,label爲0/1。
  2. 行爲較少的類目樣本構造;線上點擊和搜索馬太效應嚴重,故可取得數據的類目有限。少行爲的類目,我們對其title進行隨機採樣,生成qeury,title本身所在類目全路徑文本,構成正樣本;負樣本類目隨機採樣。
  3. 爲了提高非明確語義的搜索泛化性;將點擊類目的兄弟類目不作爲負樣本進行訓練,這是因爲很多query,如“外套”,“衣服”,“上裝”無法明確到某個類目,預測結果較泛。
  4. 構建虛擬類目樹;將同含義類目,因爲一些規則區分開的,重新歸爲一類,預測是其不作爲負樣本。例如“毛衣”和“針織衫”,“連衣裙”和“大碼連衣裙”

線上預測
模型上線具有較多的問題:

  1. 模型因採用attention結構,線上預測rt較大
  2. query的待預測類目集合無法確定;因爲query與多個類目相關,但又不能與所有類目都計算一遍,取相關的
    經過探索,將模型結構設計爲雙塔方式,其中類目矩陣生成部分可以離線生成,無需線上實時預測,線上預測部分只有query和attention部分。針對待預測類目過多的問題,採用上文提到的方法二,統計文本與類目的相關性,粗排相關類目,選擇topK進行預測。兩者結合下,既可以有效降低rt,也對query待預測類目集合的損失降低了。這裏爲什麼說是有損的呢?因爲通過詞召回,並不能等同與引擎召回,兩者之間是有損的。最後,線上預測流程如下:
    在這裏插入圖片描述

思考

  1. 模型和樣本是否可以繼續優化?
    這是肯定的。樣本方面可以增加詞的權重信息,將不重要的詞在預處理階段或讓模型學到;類目側的特徵目前僅用到文本信息,例如價格、季節偏好等都可嘗試;模型方面,隨着各類語言模型的誕生,transformer,bert等可以嘗試。
  2. 個性化
    類目預測是否可以做個性化?我認爲是可以的,只是空間不是很大,且需要後續排序邏輯配合。空間不大是因爲待透出的類目往往數量不多,3~5已經算多的了。需要排序配合是因爲一旦透出的商品中出現其他類目或者類目得分變化,排序邏輯是否可以更好的推薦,還是出現badcase,這是需要統一配合的。那個性化的空間在哪裏?假設用戶最近在爲父親買羽絨服,一直在搜索中老年羽絨服,那麼是否當他搜索“羽絨服”時,可以適當的多透出一些“中老年羽絨服”。

參考

  1. https://zedom1.top/2018/06/01/16%20VSM/
  2. https://yq.aliyun.com/articles/420506
  3. Deeply Supervised Semantic Model for Click-Through Rate Prediction in Sponsored Search
  4. Learning Deep Structured Semantic Models for Web Search using Clickthrough Data
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章