Hash特征编码在推荐系统的应用
本文來之不易,學習hash的起源是我在客戶交流現場被問到hash沖突。其實這個是我的知識短板,但是因為我隱約記得有個murmurhash的東西,然后蒙混過去了。然后今天抓緊找各位大牛學習了hash在推薦系統中的作用,總結了這篇筆記。感覺自己還是太文盲了,另外也感謝客戶老師以及公司內的大牛老師的指導。
01 推薦系統中數據如何轉成稀疏數據
?
先來一句話概括下,Hash解決的是一個空間匹配的效率問題。理解這一句話首先要了解稠密數據和稀疏數據的區別,大家可以看看臺灣某大學開源的libsvm數據格式,這個格式是目前稀疏數據的行業規范,稀疏數據的好處就是可以減少計算過程中的非0元的計算量。
ok,接下來用一個例子說明為什么在推薦領域要用Hash做特征編碼。假設我們有一份推薦場景稠密數據,第一列是ID列,第二、三列是Feature列,最后一列是Label列。
這份數據轉成稀疏格式(libsvm)后會是這樣:
F1和F2這兩個特征列變成了K:V結構,以樣本A為例,它的F1這個特征是7,在F1這三個特征中(7,5,2)排名第3,所以K值為2。它的F2這個特征是6,在F2三個特征中(6,9,2)排名第2,所以K為1。
?
02 Hash的作用
?
如果按照以上思路去把稠密數據轉稀疏數據需要例如如下的這樣的代碼:
for(i=0; i<len(feature),i++ )
{
#找到特征的排位確定k值
}
每一個樣本的特征轉換都需要遍歷全部樣本,如果樣本數很大,效率非常差。因為這個稠密轉稀疏無非是找到一個空值空間,把數據插入內存,這個時候就可以利用Hash的方式提升效率。
還以上文例子為例,我們可以把特征空間區分為兩份,比如1~100的位置給到特征F1,1000~10000的位置給到特征F2。然后用一個HashFunction自動把數值映射到對應的位置上。
比如:
HashFunction(F1,7)=010
HashFunction(F2,9)=01000
這樣就不需要遍歷全部樣本,大大提升了效率。
?
03Hash沖突問題
?
在推薦領域,往往樣本量非常大,每個特征的可能性也很多。比如某個特征表示的是平臺的所有商品,那么如果用HashFunction的方法需要巨大的空間表示這個特征,這樣才能避免相同的特征值落在相同的范圍內,形成Hash沖突。但是巨大的空間意味著模型的寬度增加,對于計算效率也是有挑戰。
?
變成一個博弈問題,Hash沖突風險越小,模型越大,人們希望風險小而且模型小。為了解決這個問題,業內有很多優質的Hash方法,比如MurmurHash、CityHash。
推薦MurmurHash,目前Redis數據庫主鍵就是用的這個方案。因為這個Hash算法非常復雜,以我的智商應該很難理解,所以MurmurHash的詳細原理,建議移步某乎。謝謝~
總結
以上是生活随笔為你收集整理的Hash特征编码在推荐系统的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微软NNI-业内最亲民的AutoML工具
- 下一篇: 详解云原生机器学习平台的优势