class UserTower(L.LightningModule):
def __init__(self, user_id_emb_dim):
super().__init__()
self.save_hyperparameters()
self.id_embedding = nn.Embedding(num_embeddings=n_users, embedding_dim=user_id_emb_dim)
nn.init.orthogonal_(self.id_embedding.weight)
self.user_emb_dim = user_id_emb_dim + 1 + 3
def forward(self, user_id, gender, age, age_norm):
user_embedding = torch.cat([
self.id_embedding(user_id.long()),
gender.unsqueeze(-1).float() - 1,
age_norm.unsqueeze(-1),
torch.pow(age_norm.unsqueeze(-1), 2),
torch.sqrt(age_norm.unsqueeze(-1)),
], dim=-1)
return user_embedding
class ItemTower(L.LightningModule):
def __init__(self, item_id_emb_dim, source_id_emb_dim):
super().__init__()
self.save_hyperparameters()
self.id_embedding = nn.Embedding(num_embeddings=n_items, embedding_dim=item_id_emb_dim)
nn.init.orthogonal_(self.id_embedding.weight)
self.source_id_embedding = nn.Embedding(num_embeddings=n_source_id, embedding_dim=source_id_emb_dim)
nn.init.orthogonal_(self.source_id_embedding.weight)
self.item_emb_dim = item_id_emb_dim + source_id_emb_dim + 3 + 32
def forward(self, item_id, source_id, duration, duration_norm, embeddings):
item_embedding = torch.cat([
self.id_embedding(item_id.long()),
self.source_id_embedding(source_id.long()),
duration_norm.unsqueeze(-1),
torch.pow(duration_norm.unsqueeze(-1), 2),
torch.sqrt(duration_norm.unsqueeze(-1)),
embeddings,
], dim=-1)
return item_embedding
Post #32
1.5K
5 место - стоит посмотреть выступление (предыдущий пост). А также участник скинул примерный код нейронки.