上一篇文章點選率預估與冷啟動(一)我們們說到了鍵值儲存網路,今天我們接著往下說。
鍵值儲存網路實現了字典特徵到向量的轉換,而我們希望得到的是連續值特徵到向量的轉換。我們其實只需要再實現連續值到字典特徵的轉化就大功告成了。雖然連續值特徵到向量很難,但是連續值特徵到字典特徵的實現方式卻有很多。
假定有了連續值特徵到字典特徵的轉化,那麼總體架構和鍵值記憶網路基本一致,如下圖所示:
連續值特徵到字典特徵的轉化即圖中的Key-Value Memory,如何實現這部分應當結合具體業務場景的資料分佈。這裡先介紹下郭佬的做法吧:
(1).將連續值特徵縮放至區間[0,1]
(2).在[0,1]區間找n等分點,比如n=6時,就是(0, 0.2, 0.4, 0.6, 0.8, 1)
(3).依次計算連續值特徵x與n等分點的距離,比如x=0.3,n=6,就是(0.3, 0.1, 0.1, 0.3, 0.5, 0.7),之後構造字典特徵{0:0.3, 1:0.1, 2:0.1, 3:0.3, 4:0.5, 5:0.7}
(4).對字典特徵的value部分取倒數後接softmax,具體相似度公式如下:
公式當中分母上加10-15是為了防止當q正好等於某個等分點時分母為0的情況。郭佬的方法將字典特徵的key定義為[0,1]區間的等分點,之後對浮點數與各等分點的距離做取倒數和softmax變換。取倒數是為了保證浮點數越接近等分點,權重越大。softmax變換是為了保證所有權重之和為1。
實踐中發現,當q與某個等分點較接近時,value中除了該等分點對應的值外,其它值都非常接近0。這主要是因為softmax函式會指數級加大距離間的差異。為了緩解這種情況,我們對上述公式做了改進:
該公式取距離平方反比為權值,之後將權值縮放至總和為1。用該公式得到的權值比較“分散”,可以讓模型更好的學習那些冷門分位數的embedding表示。
截至目前,我們已經講了點選率特徵的貝葉斯平滑,以及如何在不損失精度的情況下把浮點數特徵(比如點選率特徵)輸入神經網路。
如果把點選率看成一個普通浮點數,問題已經解決。但是點選率並不普通,點選率可以被認為是使用者是否點選廣告這個隨機變數的期望值。
使用者是否點選廣告實際上是一個隨機變數,點選率就是用這個隨機變數的期望值作為特徵,去描述它。這樣做實際上是用一個值去代表一個複雜的分佈,必然會帶來資訊損失。舉個例子,A使用者瀏覽20次,點選10次。B使用者瀏覽100次,點選50次。A和B的點選率都是50%,但是他們是否點選廣告的概率分佈卻大不一樣,雖然AB兩使用者點選率都是50%,但是B使用者點選次數更多,所以B使用者的點選率置信度更高,B使用者的概率分佈也更集中。這就體現出點選率特徵的弊端,它只能描述概率分佈的期望,而無法完整描述概率分佈。
我們希望完整描述概率分佈給到模型,我們希望精確區分出點選率很相似但總瀏覽數差異很大的那群人。這個問題可以被定義為如何向模型描述一個概率分佈。使用者是否點選廣告的概率分佈是連續的,可以用概率密度函式表示。我們對概率密度函式進行分段近似,分別統計它在[0,0.1),[0.1,0.2),[0.2,0.3),[0.3,0.4)...區間的平均值,用這些平均值來表示這個分佈。形式如下:
{[0,0.1):0.1,[0.1,0.2):0.2,[0.2,0.3):0.4,[0.3,0.4):0.4,...}
該形式其實也是字典特徵,它的key表示的是一個區間,value是點選率這個隨機變數落在各區間的概率。如此一來,可以直接將這個字典特徵輸入鍵值儲存網路。這種方式利用隨機變數的概率分佈,跳過了連續值特徵轉到字典特徵這一步,直接做隨機變數值到字典特徵,避免了上文中的人工設計的相似度公式所帶來的資訊損失。如果構造的特徵可以被看做是隨機變數,那麼就可以利用數學工具得到它的概率分佈,概率分佈分段近似得到字典特徵,最後將字典特徵輸入鍵值儲存網路。
到此為止,我們講完了點選率預估與冷啟動,具體方法概括如下:首先利用貝葉斯平滑對點選率這種連續值特徵進行修正,使其更接近使用者真實點選的概率,接著將修正後的特徵值轉換成字典特徵,最構建整個鍵值儲存網路。
下一篇我們們講講oCPC中的成本控制。
歡迎關注微信公眾號:計算廣告那些事兒