知识表示Trans系列之TransE、TransH 以及PTransE算法
- 源码来自KE2G,我将其转换成Java形式
- 由于THUNLP的源码对中文处理不太友好,如在处理中文数据集过程中无法输出中间的信息如Mean-Rank的内容,我自己根据需要将其输出,以便测试代码结果或者对比结果。
- 实验使用的中文数据源自网上一份三国演义人物关系图,对其进行了整理得到相应的三元组。
- 实验的效果根据自己需要进行相应的调参,主要的参数放在GlobalValue.java 文件中。从Mean-Rank和Hits@10的指标来看,该份数据集大部分情况下效果为:TransH > PTransE > TransE
- 代码复现过程中,我根据自己的理解对源C++代码进行了部分修改,剔除了一些冗余和不合理的代码:
- Mean-Rank和Hits@10采用了改进的版本,在评测未知关系三元组过程中,对已知正确的三元组在评测过程剔除。关于TransE评测指标更详细的介绍可参考这篇文章 TransE评测方法
- 删除C++版本的一些冗余参数
- PTransE中关于路径的计算,没有计算了源代码反向的路径,如$(A, relation, B) -> (B, relation^{-1}, A)$ 。PTransE_Test沿用TransE的代码,与TransE评测一致