扩展数据集

虽然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.Hetionetpykeen.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文件。