异构图的连接预测三
总结:
做完了异构图的连接预测,我的疑虑还是挺多呢。
问题一:
为啥要使用’user’:self.user_emb(data[‘user’].node_id),生成用户的嵌入向量呢?
答:因为要使用到用户节点的特征,就是对电影的偏好。
但是呢,用户节点特征是随机生成的,后续能依靠计算损失,参数更新,梯度下降,逐步找到用户所偏好的电影,就会得到一个预测值。
问题二:
为啥 ‘movie’:self.movie_lin(data[‘movie’].x) +self.movie_emb(data[‘movie’].node_id)。要计算两个电影的特征嗯?
答:只是为了更好得获取特征,更加准确的进行预测。
问题三:分类器
分类器其实就是获得了更新后的用户节点特征,以及更新后的电影特征,将两者的特征进行点积并求和,就会得到该用户对某部电影的预测评分值,
问题三:
理解下方三行代码:
pred = model(sampled_data)
# 真实值
ground_truth = sampled_data[‘user’,‘rates’,‘movie’].edge_label
loss = F.binary_cross_entropy_with_logits(pred,ground_truth)
理解这一部分:
pred:该预测值表示用户对电影的兴趣或评分,[0.32, -0.28]
ground_truth:就是一个真实的标签,[1, 0] 1就是表示对该电影有评分,0则无
然后计算loss,若ground_truth中某个值是1,则说明是正样本(也就是真实存在的边),而且该边对应的pred值很高,loss值很小的话,则说明模型在该正样本上的预测是准确的。
若ground_truth某个值是0,则说明是负样本(不存在的边,也就是该用户对电影没有评分),、
若pred的值很低,应用sigmoid函数后会得到一个接近于0的值,说明用户可能对该电影不是那么感兴趣或者没有评分。 说明该模型在负样本上的预测是准确的。
若pred的值很高的话,则说明用户可能对该电影感兴趣。