日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

DSSM+DeepFM

發(fā)布時(shí)間:2023/12/29 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DSSM+DeepFM 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、DSSM模型

1.1 DSSM模型架構(gòu)

雙塔模型結(jié)構(gòu)簡(jiǎn)單,一個(gè)user塔,另一個(gè)item塔,兩邊的DNN機(jī)構(gòu)最后一層(全連接層)隱藏單元個(gè)數(shù)相同,保證user embedding和item embedding維度相同,后面相似度計(jì)算(如cos內(nèi)積計(jì)算),損失函數(shù)使用二分類交叉熵?fù)p失函數(shù)。DSSM模型無(wú)法像deepFM一樣使用user和item的交叉特征。

業(yè)界推薦系統(tǒng)常用多路召回(如CF召回、語(yǔ)義向量召回等,其中DSSM也是語(yǔ)義向量召回的其中一種),DSSM離線訓(xùn)練和普通的DNN訓(xùn)練相同。

代碼

class DSSM(torch.nn.Module):
def init(self, user_features, item_features, user_params, item_params, temperature=1.0):
super().init()
self.user_features = user_features
self.item_features = item_features
self.temperature = temperature
self.user_dims = sum([fea.embed_dim for fea in user_features])
self.item_dims = sum([fea.embed_dim for fea in item_features])

self.embedding = EmbeddingLayer(user_features + item_features)self.user_mlp = MLP(self.user_dims, output_layer=False, **user_params)self.item_mlp = MLP(self.item_dims, output_layer=False, **item_params)self.mode = Nonedef forward(self, x):user_embedding = self.user_tower(x)item_embedding = self.item_tower(x)if self.mode == "user":return user_embeddingif self.mode == "item":return item_embedding# 計(jì)算余弦相似度y = torch.mul(user_embedding, item_embedding).sum(dim=1)return torch.sigmoid(y)def user_tower(self, x):if self.mode == "item":return Noneinput_user = self.embedding(x, self.user_features, squeeze_dim=True)# user DNNuser_embedding = self.user_mlp(input_user)user_embedding = F.normalize(user_embedding, p=2, dim=1)return user_embeddingdef item_tower(self, x):if self.mode == "user":return Noneinput_item = self.embedding(x, self.item_features, squeeze_dim=True)# item DNNitem_embedding = self.item_mlp(input_item)item_embedding = F.normalize(item_embedding, p=2, dim=1)return item_embedding

二 Youtube DNN

第一部分 召回網(wǎng)絡(luò):此階段主要目的是從百萬(wàn)級(jí)的視頻中檢索出一小部分的視頻用于之后的排序操作,這部分需要處理的數(shù)據(jù)量非常大,速度要求快,所有使用的模型和特征都不能太復(fù)雜。召回網(wǎng)絡(luò)會(huì)根據(jù)用戶的歷史信息(比如用戶的歷史觀看、搜索等)進(jìn)行召回,這一階段召回的視頻滿足用戶泛化的興趣,用戶之間的相似度則通過(guò)粗略的特征來(lái)表示,如用戶觀看視頻的ID,搜索query和用戶畫(huà)像。

第二部分 排序網(wǎng)絡(luò):此階段會(huì)使用更加豐富和精細(xì)的用戶和視頻特征,預(yù)測(cè)用戶對(duì)召回的視頻打分,然后根據(jù)分?jǐn)?shù)進(jìn)行排序,依次展示給用戶。這部分最主要是能夠精準(zhǔn)的將視頻推送給用戶,所以需要更加復(fù)雜的模型和特征來(lái)提升推薦效果。

第三部分 線下評(píng)估:評(píng)估指標(biāo)有precision、recall、ranking loss等,最終的效果還是需要線上做A/B測(cè)試,關(guān)注的指標(biāo)包括:點(diǎn)擊率、觀看時(shí)間等;需要指出的是,線上線下有時(shí)候并不能保持一致的結(jié)果。

代碼

class YoutubeDNN(torch.nn.Module):
def init(self, user_features, item_features, neg_item_feature, user_params, temperature=1.0):
super().init()
self.user_features = user_features
self.item_features = item_features
self.neg_item_feature = neg_item_feature
self.temperature = temperature
self.user_dims = sum([fea.embed_dim for fea in user_features])
self.embedding = EmbeddingLayer(user_features + item_features)
self.user_mlp = MLP(self.user_dims, output_layer=False, **user_params)
self.mode = None

def forward(self, x):user_embedding = self.user_tower(x)item_embedding = self.item_tower(x)if self.mode == "user":return user_embeddingif self.mode == "item":return item_embedding# 計(jì)算相似度y = torch.mul(user_embedding, item_embedding).sum(dim=2)y = y / self.temperaturereturn ydef user_tower(self, x):# 用于inference_embedding階段if self.mode == "item":return Noneinput_user = self.embedding(x, self.user_features, squeeze_dim=True)user_embedding = self.user_mlp(input_user).unsqueeze(1)user_embedding = F.normalize(user_embedding, p=2, dim=2)if self.mode == "user":return user_embedding.squeeze(1)return user_embeddingdef item_tower(self, x):if self.mode == "user":return Nonepos_embedding = self.embedding(x, self.item_features, squeeze_dim=False)pos_embedding = F.normalize(pos_embedding, p=2, dim=2)if self.mode == "item":return pos_embedding.squeeze(1)neg_embeddings = self.embedding(x, self.neg_item_feature, squeeze_dim=False).squeeze(1)neg_embeddings = F.normalize(neg_embeddings, p=2, dim=2)return torch.cat((pos_embedding, neg_embeddings), dim=1)

參考資料
Funrec-組隊(duì)學(xué)習(xí)

總結(jié)

以上是生活随笔為你收集整理的DSSM+DeepFM的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。