扩展数据集
虽然PyKEEN的核心使用pykeen.triples.TriplesFactory来处理三元组集合,
但对于给定的数据集,定义训练、验证和测试的三分法对于可重复的基准测试非常有用。
内部的pykeen.datasets.base.Dataset类可以被视为一个三元组的数据集(尽管它被实现为一个类以便可以扩展)。
PyKEEN中已经包含了几个数据集,每个数据集都来自看起来不同的来源。本教程提供了一些关于如何实现你自己的Dataset类的见解。
预分割数据集
解压的远程数据集
如果您有三个独立的URL分别用于训练、测试和验证集,每个都是3列的TSV文件,请使用本教程。可以在https://github.com/ZhenfengLei/KGDatasets/tree/master/DBpedia50找到一个很好的例子。有一个基类叫做pykeen.datasets.base.UnpackedRemoteDataset,可以像下面这样使用它来包装:
from pykeen.datasets.base import UnpackedRemoteDataset
TEST_URL = 'https://raw.githubusercontent.com/ZhenfengLei/KGDatasets/master/DBpedia50/test.txt'
TRAIN_URL = 'https://raw.githubusercontent.com/ZhenfengLei/KGDatasets/master/DBpedia50/train.txt'
VALID_URL = 'https://raw.githubusercontent.com/ZhenfengLei/KGDatasets/master/DBpedia50/valid.txt'
class DBpedia50(UnpackedRemoteDataset):
def __init__(self, **kwargs):
super().__init__(
training_url=TRAIN_URL,
testing_url=TEST_URL,
validation_url=VALID_URL,
**kwargs,
)
未分割的数据集
如果您有一个TSV数据集的单一URL,需要自动将其分割为训练、测试和验证集,请使用本教程。可以在https://github.com/hetio/hetionet/raw/master/hetnet/tsv找到一个很好的示例。有一个名为pykeen.datasets.base.SingleTabbedDataset的基类,可以像下面这样使用它来包装数据集:
from pykeen.datasets.base import SingleTabbedDataset
URL = 'https://github.com/hetio/hetionet/raw/master/hetnet/tsv/hetionet-v1.0-edges.sif.gz'
class Hetionet(SingleTabbedDataset):
def __init__(self, **kwargs):
super().__init__(url=URL, **kwargs)
URL 的值可以是任何可以被 pandas.read_csv() 读取的内容。可以通过关键字参数
read_csv_kwargs=dict(sep=',') 将额外的选项传递给读取函数,例如 sep=','。请注意,Pandas 的默认分隔符是逗号,但 PyKEEN
将其覆盖为制表符,因此如果您想要逗号,必须显式设置它。由于此过程具有随机性,您还可以使用 random_state 关键字
参数设置用于拆分的种子。
更新setup.cfg
无论您是在向PyKEEN提交拉取请求,还是在自己的包中实现数据集,您都可以使用Python入口点将您的数据集注册到PyKEEN。以下是一个注册pykeen.datasets.Hetionet、pykeen.datasets.DRKG以及出现在PyKEEN setup.cfg中的其他数据集的入口点示例。
在pykeen.datasets标题下,您可以为数据集选择任意名称作为键(出现在等号的左侧,例如hetionet)和类的路径(出现在等号的右侧,例如pykeen.datasets.hetionet:Hetionet)。右侧由模块路径、冒号:和类名构成。
# setup.cfg
...
[options.entry_points]
console_scripts =
pykeen = pykeen.cli:main
pykeen.datasets =
hetionet = pykeen.datasets.hetionet:Hetionet
conceptnet = pykeen.datasets.conceptnet:ConceptNet
drkg = pykeen.datasets.drkg:DRKG
...
如果您正在开发PyKEEN的开发版本,您还需要在shell中运行pykeen readme来更新README.md文件。