torch-rechub安装
#最新版(推荐) 1. git clone https://github.com/datawhalechina/torch-rechub.git 2. cd torch-rechub 3. python setup.py install
安装过程中遇到问题:python setup.py install
执行 python3 setup.py install可以成功安装
深度学习推荐算法框架
FM算法总结
class FMModel(nn.Module):
def __init__(self, word_counts, embed_dim):
super(FMModel, self).__init__()
self.embedding = nn.Embedding(word_counts, embed_dim)
self.weight = nn.Embedding(word_counts, 1)
def forward(self, features, index):
# features: [64,39], embed:[64,39,16], weight:[64,39,1]
index = torch.tensor(index)
weights = self.weight(index)
embed = self.embedding(index)
first_embed = torch.mul(weights, features.reshape(weights.shape))
# first_embed = first_embed.squeeze(2)
# first_sum: [batch_size, 1]
first_sum = torch.sum(first_embed, dim=1, keepdim=False)
fm_embed = torch.mul(embed, features.reshape(weights.shape))
square_sum = torch.pow(torch.sum(fm_embed, dim=1, keepdim=True), 2)
sum_square = torch.sum(fm_embed * fm_embed, dim=1, keepdim=True)
# cross_term: [batch_size, 1, embed_dim]
cross_term = square_sum - sum_square
# cross_sum: [batch_size, 1]
cross_sum = 0.5 * torch.sum(cross_term, dim=2, keepdim=False)
return first_sum + cross_sum
model = FMModel(train_data['feat_dim'], 16)
# 对离散特征求embedding,实际上计算的是公式中v的值,k就是embedding的长度。线性部分文章中介绍是用one-hot,对离散值的处理也是分别给每个对应的值构建一个k=1的embedding
参考文献
Factorization Machines 学习笔记(一)预测任务_皮果提的博客-CSDN博客
https://blog.csdn.net/wuzhongqiang/category_10128687.html?spm=1001.2014.3001.5482