從函數模型推導到搜索排名
——從搜索排名需求中,公式完善過程,理解程序開發中的數學建模。
這裏以內容質量評分與搜索排名爲例,從最基礎的線性函數出發,按照提出問題;解決問題的基本方式,逐步完善評分函數。從而爲大家關於數學在我們項目研發實踐中的應用提供借鑑,也期待大家能由此提高大家對數學的敏感度,將數學思維應用於項目研發的各個階段,從而提高產品研發質量和用戶體驗。
文中基本方法靈感來自《推薦系統原理與實踐》一書。有興趣的同學可以自行了解。爲了避免泄密嫌疑,這裏暫不透露是什麼內容的質量評分和搜索排名。大家就當作是某種垂搜應用就好了。
需求描述
現在存在兩個來源的內容:1. 由M提供的內容,數量在千萬級;2. 由L提供的內容,數量在萬級。現在,由於直觀感受,L的總體數據質量較高,因此,希望令L來源的數據在搜索結果中靠前。
解決思路
大致解決思路有兩個辦法,各有優缺點:
- 關於搜索結果,直接將搜索結果中,L數據置頂。
- 引入質量評分,基於質量評分與搜索匹配度評分的函數,調整各個數據記錄的優先級。
進一步分析需求描述,可以關注到,需求本質是希望將質量高的數據提前,而非L的數據提前;
此外,考慮到目前L數據和M數據質量都是參差不齊的,且難以完全處理好所有數據內容問題,引入質量評分,將確定質量高的數據在任意搜索結果中提前是未來必然要實現的;
同時,採用第一種方法會降低代碼靈活性,
而採用第二種方法,在未來需要調整質量評分方式或排名方式時,僅需重新調整質量評分以及搜索排名關於質量評分與匹配度評分的函數即可,與業務代碼耦合度低,有利於未來迭代。
綜上所述,最終決定選擇第二種辦法實現。
質量評分與搜索排名
基本思路如下所述。
- 添加質量評分字段,用於存儲分值。
- 設計總評分關於質量評分和匹配度評分的函數,最終搜索結果按照總評分排序。
思路很簡單,實現也很簡單,關鍵點僅在於如何設計總評分關於質量評分和匹配度評分的函數。這個過程與數學建模的思維方式、推薦系統的設計思路以及機器學習的建模中部分過程十分相似,因此,這裏以該需求爲例,從最基礎的線性函數出發,按照提出問題;分解問題;解決問題的基本方式,逐步完善評分函數。從而爲大家關於數學在我們項目研發實踐中的應用提供借鑑,也期待大家能由此提高大家對數學的敏感度,將數學思維應用於項目研發的各個階段,從而提高產品研發質量和用戶體驗。
數學模型推導與搜索排名實現
假設,最終用於對搜索結果排序的字段是總評分 (Score),我們主動對數據質量作出的評分是質量評分 (Quality Score),用戶按照篩選項或不同關鍵字模糊搜索時,由搜索引擎基於某種算法計算的篩選結果關於篩選項產生的評分是匹配度評分 (Match Score)。這時,一種比較簡單的提高某個數據搜索排名的方法是關於和求和,如 公式 1 所示。然後,我們逐步推薦問題,再解決,以此完善這一模型。
Q: 實際應用中 與 對於總評分的影響權值不一定是相等的
一種很簡單的思路,引入效用函數。如 公式 2 所示。其中的權值、可以是經驗估計值,也可以是基於某種統計方法或其它算法求得的值。
Q: 可能某一數據與搜索項匹配度不高(較低),但由於QS較高,導致該數據在搜索結果中過度靠前
一種思路是優化 模型;限制 的取值範圍。另一種思路是修改函數,令 越高的函數, 對 的影響越大; 越低,則 對 的影響越小。在實踐中,我們兩種思路結合思考顯然是更合理的,但這裏暫且僅基於第二種思路作描述。
一種簡單的方法是簡單將 與 求積。
進行到這一步,其實就差不多了,搜索排名也僅進行到此爲止。但在實際應用中,尤其是對於精度敏感、計算數值大的應用,還會存在其他問題,這時需要進一步完善模型,即後文所述部分。後文提及的兩個問題,只是希望能爲大家在遇到相似問題時,提供更多的解決思路。
Q: MS是實數,存在小數部分,而計算機中的求積運算通常可能存在浮點數精度丟失和誤差累積問題,如何減少?
首先,我們認識到,浮點數精度丟失問題往往發生在乘除運算中,由運算中小數有效位丟失導致,而誤差累積在積分或累加過程中產生的。
對於這一問題的解決方式,可以參考目前中文分詞中常用的概率計算方法——將區間 的乘除運算,轉化爲其對數的加減運算。整數運算是不存在類似浮點數的精度丟失問題,如果函數邊界合適,也能避免溢出問題。這時,函數如公式 4 所示(這裏我省去了底數,底數我們可以根據期望的函數圖像調整)。
此時,爲了便於計算,可以進一步轉化、。
使得
這一點在這裏用其實有一些多餘,因爲搜索排名的權值,小數位的精度丟失其實對整個大的排名結果影響不大——我們搜索一半關心的是最匹配的前N個而精度丟失常常隻影響最不匹配的N個。在這裏提出這一點只是爲了引出這一通過對數運算解決精度丟失的計算方法。這點在NLP或其它精度敏感的運算中十分重要。
Q: 是無界函數,實際使用中可能因爲數值過大而導致意外情況。
這一點有點胡扯,實際上,我只是在這裏引出一種防止溢出的解決方案,在搜索排名中並不存在這一問題,也未進行至這一步。
這個問題其實是 無界的導致的。結合前文所述,我們重新設計函數S,S滿足一下三個條件。
- S在區間 ; 中,
- S在區間 中是連續函數
- S在區間 中是單調函數
符合這幾點要求的函數模型有很多,可以用已有的,也可以自行設定。這裏我採用高斯概率密度函數之比作爲最終結果。高斯概率密度函數之比,符合柯西分佈——函數有界且單調連續。基於柯西分佈,我們十分易於確定總數據集中符合我們需求的結果集並以此排序。
其中, 由搜索引擎提供,匹配結果集中匹配度最高的分值。在數據中,質量評分,因此 爲100。
如此,我們不但解決了最終評分無界的問題,同時,也基於Gaussion求得比較符合實際情況的評分模型。同時,爲了進一步解決浮點運算精度丟失問題、權重問題。再次基於前文所述方法進行變換即可,這裏不作進一步描述。
難以理解的同學請自行了解高斯分佈的物理意義,因爲我也難以解釋清楚。在此之後,我們要確認高斯分佈的一個重要性質:$X \sim N(0, 1), Y \sim N(0, 1) \rightarrow X/Y \in C(1, 0) $。