我正在研究一个知识图数据集,它有三重格式,即主语、谓语和宾语的三重格式。你知道吗
例如,知识图如下所示:
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非常陌生。你知道吗
任何帮助都将不胜感激!非常感谢。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐