我有一个数据集,我正在尝试为它设计一些功能,其中涉及检查列或数组中的元素是否出现在另一个数组中。我正在尝试在Tensorflow Extended中执行此操作,以便此操作成为服务中图表的一部分,但我对TF和TFX还是陌生的,并且无法对其进行静默处理。例如,假设我们有以下数据集:
>>> data = {"p_id": [100, 200, 300],
...: "topic": [('python', 'numpy'), ('pandas',), ('cpp',)],
...: "preferred_ids": [(200, 300, 400), (200, 300, 400), ()],
...: "trending_topics": [('pandas', 'tensorflow', 'python'), ('pandas', 'tensorflow', 'python'), ('c', 'cpp')]
...: }
>>> df = pd.DataFrame(data)
>>> df
p_id topic preferred_ids trending_topics
0 100 (python, numpy) (200, 300, 400) (pandas, tensorflow, python)
1 200 (pandas,) (200, 300, 400) (flask, tensorflow, nump)
2 300 (cpp, c) () (c, cpp)
我正在尝试定义函数in_preferred_ids
和matches_trending
,以便最终的转换将创建如下所示的特征列
p_id topic preferred_ids trending_topics in_preferred_ids matches_trending
0 100 (python, numpy) (200, 300, 400) (pandas, tensorflow, python) 0 1
1 200 (pandas,) (200, 300, 400) (flask, tensorflow, nump) 1 0
2 300 (cpp, c) () (c, cpp) 0 2
我尝试使用reduce_any
转到in_preferred_ids
,但最终遇到以下错误
TypeError: Expected int32, got <tensorflow.python.framework.sparse_tensor.SparseTensor object at 0x7f22d8731b70> of type 'SparseTensor' instead.
我怀疑这是因为p_id
是带有元素的列,而reduce_any
可能要求这两列都是数组,但是我不确定如何解决。我的完整尝试如下。任何帮助将不胜感激
def element_is_in(x, y):
return tf.reduce_any(tf.convert_to_tensor(x.values) == tf.convert_to_tensor(y.values))
def preprocessing_fn(inputs):
outputs = {
"in_preferred_ids": (
tf.where(
element_is_in(inputs["p_id"], inputs["preferred_ids"]),
tf.cast(tf.zeros(inputs["p_id"]), tf.int64),
tf.cast(tf.ones(inputs["p_id"]), tf.int64),
)
)
}
return outputs