如何在Tensorflow中按主题获取知识图中的三元组?

时间:2019-07-30 14:32:54

标签: python tensorflow knowledge-graph

我正在研究一个知识图数据集,该数据集具有格式的三倍,即主语,谓语和宾语的三倍。

说,知识图看起来如下:

X = np.array([['a', 'y', 'b'],
              ['b', 'y', 'a'],
              ['a', 'y', 'c'],
              ['c', 'y', 'a'],
              ['a', 'y', 'd'],
              ['c', 'y', 'd'],
              ['b', 'y', 'c'],
              ['f', 'y', 'e']])

在损失函数中,对每个三元组进行迭代:

x_pos_tf = tf.cast(dataset_iterator.get_next(), tf.int32)

(其中:

dataset_iterator = dataset.make_one_shot_iterator()

现在,对于每个三元组,我希望从知识图中获取与该三元组具有相同主题的所有三元组。例如:对于三元组(a,y,b),我希望获取((a,y,c),(a,y,d))。 [注意:不包括正在评估的三元组。]

通过使用如下所示的知识图字典数据结构,我使用numpy列表执行了此操作:

d = {s: [tuple(x) for x in X if x[0] == s] for s in np.unique(X[:, 0])}

这将返回以下格式的字典:

d={'f': [('f', 'y', 'e')],
   'c': [('c', 'y', 'a'), ('c', 'y', 'd')],
   'a': [('a', 'y', 'b'), ('a', 'y', 'c'), ('a', 'y', 'd')],
   'b': [('b', 'y', 'a'), ('b', 'y', 'c')]}

然后,我对任何三元组进行如下简单查找:

return list({triple for x in x_to_score for triple in self.d[x[0]]} - set(x_to_score))

其中x_to_score是要评估的三元组。

作为示例,这将返回示例三元组('a','y','b')的列表[('a','y','c'), ('a','y','d')]

但是,现在的问题是,当我遍历三元组(即一次处理一批三元组)时,它们需要作为张量传递,因此我无法执行numpy操作或列出理解来做到这一点。

我需要将要评估的三元组处理为张量,然后还返回结果的张量列表。

由于我是Tensorflow的新手,所以我不知道该怎么做。

此外,这需要评估一批三元组。

我已经尝试过tf.slice()操作来获取主题,以及一些tf.sets()函数,但是由于我对Tensorflow非常陌生,因此无法弄清楚。

任何帮助将不胜感激!谢谢。

0 个答案:

没有答案