Skip to content

Latest commit

 

History

History
68 lines (34 loc) · 3.13 KB

中文版使用说明.md

File metadata and controls

68 lines (34 loc) · 3.13 KB

用PyTorch实现知识图谱表示

简介

我们提供了TransE、TransH、TransR和TransD四个知识图谱表示的算法。

每个算法包含两个程序。文件名不带“Bernoulli”的程序,以相同概率更换头实体和尾实体的方式生成负样本;文件名带“Bernoulli”的程序,则依据伯努利分布更换头实体和尾实体,生成负样本。(参见Knowledge Graph Embedding by Translating on Hyperplanes

代码结构

utils.py包含Triple基类,其比较操作和其他基本的算术操作,也包含了计算每个关系头尾实体比例、将关系分成1-1、1-N、N-1、N-N等四种、以及按关系种类划分三元组的方法。

data.py包含了多种生成负例三元组,以及生成一批次正样本和负样本的方法。

model.py包含了我们实现的知识表示的四个模型。

projection.py包含了TransH、TransR和TransD的投影函数。

loss.py包含了我们在算法中用到的损失函数,最重要的是边界损失函数和正交损失函数。

evaluation.py包含了评测模型性能的两个维度:meanrank(平均排名)和hits@10(前10名比率)。我们使用了多进程加速计算。

用法

我们的程序都是用Python 3.6编写的,使用PyTorch作为深度学习框架。运行我们的程序之前,请先安装Python和PyTorch。

我们使用了hyperboard实时展示训练曲线和验证曲线。对hyperboard感兴趣的用户,请参考https://github.com/WarBean/hyperboard

用法:

python xxx.py [参数]

可以选择的参数如下:

-d [str]: 使用哪个数据集?可能的选择有FB13、FB15k、WN11和WN18。

-l [float]: 初始学习率,适合于TransE和TransH。默认0.001.

-l1 [float]: 第一阶段的学习率。适合TransR和TransD。默认0.001.

-l2 [float]: 第二阶段的初始学习率,如果-es参数设置大于0. 适合TransR和TransD。默认0.0005.

-es [int]: 减少学习率的次数。若设置为0,则整个过程中学习率保持一致。默认0.

-L [int]: 如果设为1,则使用L1作为距离函数,否则使用L2。默认1.

-em [int]: 实体和关系向量的维数。默认100.

-nb [int]: 每轮训练使用多少批样本。默认100.

-n [int]: 最多训练多少轮。默认1,000.

-m [float]: 边界损失函数的边界值。默认1.0.

-f [int]: 在训练、验证和测试过程中,是否将假负例过滤掉。如果设为1,则过滤。默认1.

-mo [float]: 优化器的动量。默认0.9.

-s [int]: 固定随机种子。若设为0,则随机种子不固定。默认0.

-op [int]: 使用哪种优化器。若设为0,则使用随机梯度下降(SGD);若设为1,则使用Adam。默认1.

-p [int]: hyperboard的端口号。默认5000.

-np [int]: 评估过程中开的进程数。默认4.

测试集上的评估结果,将被写入./result/[数据集名称].txt的文本文件中,例如./result/FB15k.txt。结果包括在整个测试集上的Hits@10和MeanRank指标评估结果,以及在1-1、1-N、N-1、N-N子集上分别预测头尾的评估结果。