TF-Ranking 将数据转换为 ELWC - ExampleListWithContext 形式

Gáb*_*ösi 4 ranking tensorflow

我已阅读所有指南、视频和所有内容,但我不知道如何将我的功能集转换为 ELWC 数据表格式以解决 TF-Rank ListWise 问题。没有对该结构的描述。

例如,学生档案是:

Student ID  age  grade  math%   physics%   english%  art%  math_competit  language_competit Rank
  14588     16    k12     98      67         88      100   first_place        very_good       5
Run Code Online (Sandbox Code Playgroud)

如果我在同一个班级有 20 名学生,我如何转换这些数据以便能够对每个年级进行列表预测(理论上每个年级有 3 个班级,有 20 名学生)

Saj*_*Saj 8

ELWC 格式需要“上下文”和“示例特征”。示例特征是查询列表中每个项目都不同的特征。上下文特征是仅依赖于查询的特征。因此,每个查询都将具有列表中每个项目的特征列表(示例特征),以及上下文特征的单个特征列表。

要转换为 ELWC 格式,请首先收集给定查询的所有项目。下面的代码显示了一个包含两个项目以及一些上下文信息的查询。用于input_pb2.ExampleListWithContext()创建 ELWC 格式化程序的实例。然后您所要做的就是提供上下文和示例。

保存使用TFRecordWriter.

from tensorflow_serving.apis import input_pb2
import tensorflow as tf

def _float_feature(value):
    return tf.train.Feature(float_list=tf.train.FloatList(value=[value]))


def _int64_feature(value):
    return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))


def _bytes_feature(value):
    return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))

context = {
    'custom_features_1': _float_feature(1.0),
    'utility': _int64_feature(1),
}
examples = [
        {
            'custom_features_1': _float_feature(1.0),
            'custom_features_2': _float_feature(1.5),
            'utility': _int64_feature(1),
        },
        {
            'custom_features_1': _float_feature(1.0),
            'custom_features_2': _float_feature(2.1),
            'utility': _int64_feature(0),
        }
]


def to_example(dictionary):
    return tf.train.Example(features=tf.train.Features(feature=dictionary))

ELWC = input_pb2.ExampleListWithContext()
ELWC.context.CopyFrom(to_example(context))
for expl in examples:
    example_features = ELWC.examples.add()
    example_features.CopyFrom(to_example(expl))

print(ELWC)
Run Code Online (Sandbox Code Playgroud)