关于使用张量表示几个 RDF 三元组的问题。
设想:
RDF-triple用于表达关于资源、格式(主语、谓语、宾语)的简单陈述。
假设我有两个谓词,一个是play_for,另一个是race_for,每个谓词包含n个三元组,如下:
第一个谓词:play_for;n个三人组:(Ray Allen, play_for, Boston Celtics), (Kobe Bryant, play_for, Lakers), ... 简而言之,(A_i, play for, T_i) for i =1 to n。
第二个谓词:race_for;n 三元组:(波士顿凯尔特人队,race_for,NBA 总冠军),(湖人队,race_for,NBA 总冠军),...简而言之,(T_i,race_for,NBA)对于 i=1 到 n。
张量表示是对这 2n 个三元组建模的一种方法。我正在研究Maximilian Nickel 的论文以使用张量分解来查找数据集的潜在语义结构。第一步是使用张量表示数据集。
张量条目 X_ijk = 1 表示存在关系(第 i 个实体,第 k 个谓词,第 j 个实体)。否则,对于不存在和未知的关系,条目设置为零。例如,这 2n 个三元组可以用张量建模为:
One slice: (A_i, play for, T_i)
A1, A2,...,An, T1, T2,...,Tn, NBA
A1 0 0 0 1 0 0 0
A2 0 0 0 0 1 0 0
:
An 0 0 0 0 0 1 0
T1 0 0 0 0 0 0 0
T2 0 0 0 0 0 0 0
:
Tn 0 0 0 0 0 0 0
NBA 0 0 0 0 0 0 0
The other slice: (T_i, race for, NBA)
A1, A2,...,An, T1, T2,...,Tn, NBA
A1 0 0 0 0 0 0 0
A2 0 0 0 0 0 0 0
:
An 0 0 0 0 0 0 0
T1 0 0 0 0 0 0 1
T2 0 0 0 0 0 0 1
:
Tn 0 0 0 0 0 0 1
NBA 0 0 0 0 0 0 0
假设 RDF 三元组存储在“test.txt”中。我的问题是如何使用 Python 对这个建模过程进行编程。
这是我的想法:
最困难的事情是如何获得与张量中非零位置对应的RDF-triple的坐标。首先,这是一个包含所有实体的列表:
T = ['A1',...,'An','T1',...'Tn','NBA']
对于数据集中的每个 RDF-triple (Subject_i, Predicate_k, Object_j),都有一个坐标 (i,j,k) 描述 X_ijk = 1 在张量中的位置。例如,现有的 RDF-triple (A_i, play for, T_i) 的坐标是 (5, 1, 13),这意味着在第一个切片矩阵中 X(5,13) = 1。但是,我不知道如何获得这个坐标。我应该使用字典来存储三元组吗?
我对 Python 不是很熟悉,我已经尝试过解决方案,但我不知道如何解决它。任何帮助将不胜感激。
编辑:为了简洁和可读性,我删除了 RDF 的描述。