Embedding技术在房产推荐中的应用
本文概覽:
1. 房產業務及推薦介紹
58同城和安居客是國內第一大房產信息平臺。作為房產信息平臺主要有兩種業務場景、兩類服務對象。第一類是服務于經紀人,當房產經紀人有賣房需求的時候,可以把房源發布在平臺上,平臺導入流量進行支持;第二類是服務于找房用戶,當用戶訪問平臺的時候,可以瀏覽到豐富的房源。58同城平臺的主要是連接起用戶和經紀人,幫助用戶找到滿意的房子,幫助經紀人賣掉手里的房子。
58平臺的推薦主要針對的是找房的用戶,所以這里重點介紹一下找房用戶的行為。當用戶有找房需求的時候,可以在房源列表頁按照自己的需求進行搜索和篩選房源。同時可以在推薦位瀏覽到平臺推薦的房源,當看到符合自己需求的房源時,可以點擊帖子,進入到房源的詳情頁。如果房源詳情頁的信息符合自己的找房需求,就可以通過電話或微聊的形式聯系發布房源的經紀人。上述的這些行為屬于用戶的線上行為。當用戶和房產經紀人聯系后,經紀人可以帶著用戶看房。如果合適的話,進行最終的成交。這些是屬于用戶的線下行為。
目前,58技術只能獲得用戶的線上行為數據,所以后續用于推薦模型的數據主要有用戶的點擊數據和電話微聊數據。
58房產相關推薦位還是比較豐富的。不同的位置,推薦邏輯也有很大的差異。這里以安居客為例,列舉了安居客的5個主要推薦位。第一個場景是首頁的推薦位,對于進入首頁的用戶,先判斷用戶的類型,或者是判斷用戶來安居客的目的,是找二手房還是看新房或者是租房,真的這些不同的用戶推薦不同的房源。第二個場景是默認列表頁,在默認列表頁用戶已經選定了房產類型,這里針對用戶的歷史行為給用戶推薦一些房源。針對新用戶的話,我們會使用當前的經緯度推薦一些附近房源或者是熱門房源,進行新用戶的冷啟動。第三個場景是零少結果頁,對于零少結果頁,我們是可以拿到用戶的篩選條件,這時會針對用戶的篩選條件做一些相關方面的推薦。第四個場景是房源單頁(房源詳情頁),對于房源單頁其實用戶已經對這個頁面的房產信息感興趣,這里的“看了又看”主要是推薦當前房源的相似房源。第五個場景是推薦頻道,推薦頻道主要是用到了Feed流的技術,推拉結合,把用戶感興趣的最新房產信息推薦給用戶。
上面介紹了五種不同的推薦位,其實在這些推薦場景中都離不開兩類相似性的計算。一類是用戶和房源之間的相關性,另一類是兩個房源之間的相關性。具體該怎么計算這兩類相關性呢?我們首先需要把房源和用戶這兩個實體用向量表征出來,然后通過計算向量的差異,衡量用戶和房源、房源和房源是否相似。
對于房源和用戶的向量表征可以分為兩類:第一類是基于標簽的向量表征,第二類是基于關系的向量表征。
基于標簽的向量表征是比較好處理的。比如,對于某個房源有對應的價格、面積、朝向等特征標簽;同樣的,對于用戶也有自己的興趣偏好,比如價格、面積、近地鐵等特征標簽。因為用戶在選房子的時候,有自己的選擇標準,比如價格、戶型等,我們可以把房源的標簽信息打到用戶身上,這樣用戶也有自己的偏好特性標簽。針對這些特征標簽的連續型特征,我們可以直接標準化后作為連續型特征標簽向量的值。離散型特征可以直接進行二進制編碼,加入特征向量里面。
基于標簽的向量表征的優點是實時性好。比如來了一個新房源,我們就可以很容易將房源的屬性轉化為房源的標簽向量。基于標簽的向量表征的缺點是:計算相關性時是基于現有的標簽,沒有自適應的能力,或者是學出新標簽的能力。
基于關系的表征其實是使用了群體智慧,它有很強的自適應能力。比如看下圖,用戶和房源之間的關系。對于用戶2和用戶4,他們同時看了房源1和房源2,這就說明房源1和房源2存在某種潛在的關系,這種關系可能是他們的價格相同、在同一個小區或者是有相同的對口學校,也有可能是其它內在的聯系。所以,基于關系的推薦可以有效的挖掘出用戶和房源、房源和房源之間的潛在聯系。
基于關系的表征一般使用的方法是協同過濾、Word2Vec。基于關系的表征一般是使用相似度表進行保存。由于相似度表無法全量保存用戶與房源、房源與房源之間的關系,只能保存TopN的相似度。這種存儲實際上會存在一些問題,比如在零少結果的場景,根據用戶的搜索標簽是可以召回一批房源的,但是這個召回房源可能與用戶TopN的相似房源交集比較小,所以在召回的大部分房源中很難引入關系特征。因此就需要引入Embedding的思想,來對關系進行量化。
2. Embedding介紹
Embedding概念介紹:Embedding就是把離散的對象(實體)向量化,使向量之間的距離可以表征對象(實體)的關系。
比如下圖中的例子,有五種顏色,總體來說的話都是紅色,但對于我們大多數人來說對這些紅色是沒有概念的,也不清楚哪些紅色是比較相近。如果我們知道這些顏色的RGB值,就可以輕松的了解這些紅色之間的關系。我們通過RGB值知道,茶花紅和海棠紅這兩個顏色是比較相近的。其實顏色的RGB值可以簡單的理解為對顏色這種實體的Embedding。
那具體有哪些方法可以Embedding呢?我們下面會舉三個例子。
2.1 協同過濾矩陣分解-ALS
我們可以使用ALS進行Embedding,ALS是通過矩陣分解實現的協同過濾。使用ALS我們需要構建一個評分矩陣,比如下圖所示的例子,User1對湯臣一品的打分是4分,對上海康城的打分是3分,未對耀華路550弄打分。User2對湯臣一品的打分是1分,對上海康城的打分是3分,對耀華路550弄打分是4分。這是一個的評分矩陣,我們通過ALS算法可以把它分解成一個的矩陣和一個的矩陣。的矩陣就是一個用戶矩陣,的矩陣就是一個物品矩陣。
我們怎么來求解這兩個矩陣呢?首先,我們可以對用戶矩陣隨機的賦值,其次使用最小二乘法得到物品矩陣的值,然后固定物品矩陣的值通過最小二乘法再求解用戶矩陣。通過這種交替使用最小二乘法的方法可以使這兩個矩陣數值逐漸趨于平穩,這個時候我們可以認為評分矩陣就是用戶矩陣和物品矩陣的乘積。
通過下圖我們可以看到,用戶矩陣和評分矩陣都有“豪華指數”和“剛需指數”這兩個維度。當然這兩個維度的表述是我們在矩陣分解完成之后,人為總結的。其實,用戶矩陣和物品矩陣可以理解為針對用戶和房源的Embedding。從用戶矩陣中可以看出,User1對豪宅的偏好度比較高,所以他對耀華路550弄不太感興趣。同時,從物品矩陣中可以看出,湯臣一品和上海康城的相似度應該是大于湯臣一品和耀華路550弄的相似度。
2.2 Skip-gram
Embedding的第二種方法就是使用自然語言處理中的Skip-gram算法進行向量表征。首先,我們將用戶瀏覽、關注、微聊、電話等行為對應的房源匯總成一個房源序列,這樣一個用戶的行為序列就相當于一個句子,序列中的房源就相當于詞。Skip-gram算法認為相鄰的房源是有相關性的房源。這些房源的相互關系可以作為正樣本。比如下圖中的7、6、8、3、5序列,8和7、6、3、5都可以認為是有正相關性的。然后,我們現在有了一些正樣本,可以隨機抽取一些出現頻率比較高、但是不相鄰的房源作為負樣本。
這里的模型結構主要有三層。輸入層的輸入就是房源的One-Hot表示。其次通過輸入層的參數矩陣W轉化為隱層固定維度的向量。然后隱層固定維度的向量乘以輸出矩陣參數 ,就可以轉化為輸出值。在輸出層這里,我們沒有使用Softmax函數,因為這里加入了負采樣,不需要計算目標詞和所有詞之間的相似度,所以這里就使用Sigmoid函數,計算目標詞和正負樣本之間的相似度,然后對比真實的標簽構造損失函數。
上圖中的公式即為轉化后的目標函數。我們需要通過參數優化來極大化這個目標函數,當c為的正樣本時,的輸入向量和c的輸出向量的內積要盡量的大;當c為的負樣本時,的輸入向量和c的輸出向量的內積要盡量的小。我們可以通過隨機梯度上升來求解模型的參數。
2.3 DeepWalk
第三種方法是通過使用圖的思想進行Embedding。我們針對Skip-gram方法中的用戶行為,可以將用戶的房源序列抽象為有向帶權圖,然后輪流以每個結點為出發點,根據權重做隨機游走,這樣就可以形成新的房源序列,最后對這些不同的房源序列繼續使用Skip-gram模型,得到不同的房源的Embedding向量。
2.4 三種Embedding效果展示
下圖是三種Embedding的效果展示,使用了T-SNE進行了降維,不同的顏色代表不同的區域。分的比較清楚的區域,是當前城市比較偏遠的區域,這些區域跟其他區域重疊的可能性比較少,所以他們可以分的比較清晰。對于這些重疊的區域,是當前城市的中心區域或者是相鄰的區域,由于交通比較便利,用戶在找房的時候,這幾個區域都在看,所以在顏色上有比較大的交叉。
上圖不太能直觀的展示出哪種Embedding效果好,這里我們構造出了一批正負樣本,通過樣本數據的AUC值,來評測樣本Embedding的效果。這里的正樣本取的是共現次數比較多的房源對,取了沒有共現的高頻房源作為負樣本。從下圖結果可知,DeepWalk在一線城市效果還是比較好的,可能因為這一塊用戶量比較大,對于DeepWalk模型可以得到充分的訓練,可以隨機游走出一些比較好的房源序列。在二線城市和三、四線城市的話,Skip-gram算法要優于DeepWalk算法,可能是因為小城市數據量比較少,所以DeepWalk差一些。對于ALS,它在一線城市的效果還不錯,但是到了二線城市和三、四線城市降低了很多,應該還是由于打分矩陣過于稀疏,無法做一個很好的訓練。
通過以上列舉的三種方式,我們可以將用戶和房源之間的關系進行向量化。通過計算向量的余弦相似度,就可以實時計算出用戶和房源之間的相似度了。這樣我們可以將基于關系的推薦不僅用在房源的召回階段,也可以用在精排階段作為一部分輸入數據。
3. Embedding應用
3.1 Skip-gram模型應用
下面就詳細介紹Embedding技術在線上的具體應用。首先我們需要對數據進行預處理。這里我們區分了一下房源和用戶之間的關系,對于這種只有訪問的房源,點擊關系是一種弱關系,下圖中用綠色表示。電話和微聊是一種強關系,下圖用藍色表示。同時會去掉一些用戶停留時間比較短的房源,這些可能是用戶的誤觸。對于一個用戶多天的行為序列,會進行按天的分割,因為隔兩天的用戶瀏覽房源數據差異就比較大了,會影響模型的計算。經過處理可以得到下圖右邊的房源序列。
我們參考了Airbnb在2018年發表的Embedding在實時搜素排序中的論文《Real-time Personalization using Embeddings for Search Ranking at Airbnb》。我們這里為了增強連接轉化的影響,也把用戶有電話微聊等連接行為的房源,作為一個房源序列的全局上下文進行訓練。
為了解決冷啟動的問題,在房源序列中加入了房源的Type類型。比如下圖所示的房源,它對應的Type類型為:上海康城小區、戶型為3室、面積為95至100平、價格為400萬至420萬。在訓練時通過加入這種Type類型我們得到房源Embedding的同時,也可以得到類型房源的Embedding。當一個房源沒有算出具體的Embedding向量時,我們就可以利用這個房源對應的類型向量進行補充。這里把房源對應的類型放在了房源前面,其實也是有一種思想在里面,我們可以認為在用戶的看房行為中,用戶首先看到了房源列表頁的房源信息描述,表示用戶對這種小區、戶型、面積和價格的組合特征感興趣了,才點擊進入房源的詳情頁面。所以,用戶先有了對房源類型感興趣,才點擊到房源詳情頁,這是有先后關系的。
同時引入房源類型作為實體之后,對于一些用戶比較少、房源序列比較少的小城市的房源Embedding有比較好的優化作用。比如,下圖中用戶U1看了5、4、7,用戶2看了6、1、3,如果在其它的房源序列中沒有出現5和6共現的情況,這個時候Embedding就無法學到房源5和房源6之間的關系,但是我們引入了房源Type類型,通過引入5和6的Type類型都是A,這樣可以有效的知道房源5和房源6是有一定相似性的。
這里可以思考一個問題:類型標簽的引入是否會有標簽泄露的問題,我個人覺得,相同的小區、戶型、面積和價格的特征組合下的房源相似度很高,這其實是房產業務中的專家邏輯,在這里加入這種專家邏輯,可以更好的幫助Skip-gram進行Embedding的訓練。
3.2?DeepWalk模型應用
通過之前的實驗,我們知道DeepWalk在數據充足的情況下Embedding的效果要好于單純使用Skip-gram,所以在大城市我們會用DeepWalk進行Embedding。這里我們還使用前面提到的數據清洗和預處理方法。
同樣地,為了增加連接轉化的影響,我們將連接作為全局的上下文,并且提高最近結點的權重。從下圖中可以看出,U1用戶的房源序列中房源5是連接結點,這樣就把4到5、1到5、3到5、2到5都加了轉化權重1。7到5由于它們最近,所以轉化權重設置為3。通過這樣的轉化,我們可以得到圖中的有向帶權圖,然后通過隨機游走構造出新的房源序列。
同樣地,這里引入Type類型,我們將ID結點的圖轉化為ID加類型的圖。然后通過隨機游走,得到ID加類型的序列。圖中綠色序列就是房源1類型、房源1ID、房源3類型、房源3ID...。
3.3?EGES應用
上面提到的在房源序列中引入房源類型的做法,是需要先指定好房源的特征組合,這樣會造成可擴展性不強。目前,我們也在嘗試使用阿里的EGES進行Embedding。這里的SI0(Side Information 0)代表房源本身的ID,后邊的SI1,...,SIn代表不同類型的屬性。不同的房源屬性都有不同的輸入矩陣,便于計算出不同屬性的權重進行組合,這樣每個屬性都有自己的向量,也可以解決新房源冷啟動的問題。
3.4 獲取用戶及房源的Embedding
我們計算好房源的Embedding之后,對于用戶可以匯總用戶看過的房源向量,計算出用戶的Embedding向量。針對房源的Embedding,我們可以優先拿對應ID的Embedding向量,當ID的值沒有取到時,可以使用Type_Embedding向量。這樣我們就可以得到用戶關系向量和房源關系向量。
下圖展示了相關性的舉例。隨著相似度的減小,房源的價格、面積和位置差異會越來越大。所以,我們得出的Embedding還是有一定的效果。
3.5?Embedding線上應用
下圖展示了線上應用的效果。我們通過標簽特征的處理和關系特征的Embedding,可以得到一個綜合的輸入向量來表征用戶和房源之間的關系,最后構建一個綜合的監督模型來訓練這種關系之間的相似度。為了提高連接率,我們把有連接行為的用戶房源對作為正樣本,對于只瀏覽不連接的用戶房源對作為負樣本。我們就使用了Wide&Deep模型進行了訓練,在Wide部分使用了基于內容的標簽特征,Wide部分主要負責模型的記憶能力;Deep部分主要負責模型的泛化,使用基于關系的Embedding進行深度學習,通過深度模型的計算可以學習出隱含的特征組合,提高模型的泛化能力。這個模型相較于之前的協同過濾召回+基于標簽特征精排,點擊轉化提升5.4%,連接轉化提升4.4%。它對于業務的兼容性也大大提高,在零少結果場景的推薦,在精排階段可以使用這種關系的相似度。
3.6?Embedding應用總結
我們來對Embedding應用進行總結。
4. Embedding相關問題解答
(1)Embedding在推薦中的應用,對連續特征要不要和離散特征一樣進行Embedding處理呢?
連續特征已經可以從本身的數值評估不同實體之間的相關性了。一般情況下,不需要進行Embedding處理。但是也有一些特殊的場景是需要的,比如,在某種場景下,可能20歲的用戶和40歲的用戶的相關性大于20歲和30歲的相關性,這個時候就需要Embedding的處理。
(2)連續數據Embedding的方法?
對于連續變量的Embedding,需要對特征進行分桶或分箱。
(3)跨業務Embedding應用?
根據點擊構造序列。因為基于關系的相似性計算,不需要考慮業務類型的標簽差異。如果要使用DeepWalk的話,可以在結點跳轉的時候,對業務進行一些加權。
5. Reference
本文是Microstrong在觀看58同城資深算法工程師周彤在DataFunTalk公眾號分享的《Embedding 技術在房產推薦中的應用》視頻的筆記。
【1】Embedding 技術在房產推薦中的應用,地址:https://mp.weixin.qq.com/s/m6ZRfxzJIVXoQEWUK9O5Jg
【2】 Embedding技術在58商業的探索與實踐,地址:https://mp.weixin.qq.com/s/XanNsacqzkywtKYlVUexSg
【2】淺談Embedding技術在推薦系統中的應用(1),地址:https://mp.weixin.qq.com/s/07I6vQ-6z1_-useYYBVwyg
【3】Embedding 模型在推薦系統的應用,地址:https://mp.weixin.qq.com/s/sKHFD3XZ4HZOeZ4wqc-rMA
【1】Embedding向量召回在vivo個性化推薦中的實踐,地址:https://mp.weixin.qq.com/s/-QqvrNwEUk4haX8xfbd06g
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊AI基礎下載(pdf更新到25集)本站qq群1003271085,加入微信群請回復“加群”獲取一折本站知識星球優惠券,復制鏈接直接打開:https://t.zsxq.com/yFQV7am喜歡文章,點個在看
總結
以上是生活随笔為你收集整理的Embedding技术在房产推荐中的应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【白话机器学习】算法理论+实战之Page
- 下一篇: 下载量过百万的吴恩达机器学习和深度学习笔