负Kullback-Leibler散度
- class NegativeKullbackLeiblerDivergence(exact: bool = True)[source]
基础类:
KG2ESimilarity计算负KL散度。
表示 \(\mu = \mu_e - \mu_r\),相似性由以下公式给出
\[sim(\mathcal{N}(\mu_e, \Sigma_e),~\mathcal{N}(\mu_r, \Sigma_r)) = -\frac{1}{2} \left( tr\left(\Sigma_r^{-1} \Sigma_e\right) + \mu^T \Sigma_r^{-1} \mu - k + \ln \left(\det(\Sigma_r) / \det(\Sigma_e)\right) \right)\]由于所有协方差矩阵都是对角的,我们可以进一步简化:
\[\begin{split}tr\left(\Sigma_r^{-1} \Sigma_e\right) &=& \sum_i \Sigma_e[i] / \Sigma_r[i] \\ \mu^T \Sigma_r^{-1} \mu &=& \sum_i \mu[i]^2 / \Sigma_r[i] \\ \ln \left(\det(\Sigma_r) / \det(\Sigma_e)\right) &=& \sum_i \ln \Sigma_r[i] - \sum_i \ln \Sigma_e[i]\end{split}\]初始化相似度模块。
- Parameters:
exact (bool) – 是否返回精确的相似度,或者为了稍微提高速度而忽略常数偏移。
方法总结
forward(h, r, t)计算相似度。
方法文档
- forward(h: GaussianDistribution, r: GaussianDistribution, t: GaussianDistribution) Tensor[源代码]
计算相似度。
# noqa: DAR401
- Parameters:
h (GaussianDistribution) – 形状: (*batch_dims, d) 头实体高斯分布。
r (GaussianDistribution) – 形状: (*batch_dims, d) 关系高斯分布。
t (GaussianDistribution) – 形状: (*batch_dims, d) 尾部实体高斯分布。
- Returns:
torch.Tensor, 形状: (*batch_dims) # noqa: DAR202 相似度。
- Return type: