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

2024-03-29 10:41:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究一个知识图数据集,它有三重格式,即主语、谓语和宾语的三重格式。你知道吗

例如,知识图如下所示:

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']])

在loss函数中,它迭代每个三元组:

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非常陌生。你知道吗

任何帮助都将不胜感激!非常感谢。你知道吗


Tags: to函数innumpy主题列表fortf