このドキュメントでは、tf.transform を使用して一般的な変換を行う方法について説明します。
例に沿ってビーム パイプラインをすでに構築していることを前提とし、 preprocessing_fn
と場合によってはモデルに追加する必要があるもののみを説明します。
文字列/カテゴリデータの使用
次のpreprocessing_fn
、周波数の降順でトークンを使用して特徴x
の値に対して語彙を計算し、特徴x
値を語彙内のインデックスに変換し、最後に出力に対してワンホット エンコーディングを実行します。
これは、ラベル機能がカテゴリ文字列であるユースケースなどで一般的です。結果として得られるワンホット エンコーディングは、トレーニングの準備が整います。
def preprocessing_fn(inputs):
integerized = tft.compute_and_apply_vocabulary(
inputs['x'],
num_oov_buckets=1,
vocab_filename='x_vocab')
one_hot_encoded = tf.one_hot(
integerized,
depth=tf.cast(tft.experimental.get_vocabulary_size_by_name('x_vocab') + 1,
tf.int32),
on_value=1.0,
off_value=0.0)
return {
'x_out': one_hot_encoded,
}
欠損データの平均代入
この例では、機能x
はオプションの機能であり、 preprocessing_fn
のtf.SparseTensor
として表されます。それを高密度テンソルに変換するために、その平均を計算し、インスタンスに平均が欠落している場合にはその平均をデフォルト値に設定します。
結果として得られる密なテンソルの形状は[None, 1]
になります。None None
バッチ次元を表し、2 番目の次元ではインスタンスごとにx
が持つことができる値の数になります。この場合は 1 です。
def preprocessing_fn(inputs):
return {
'x_out': tft.sparse_tensor_to_dense_with_shape(
inputs['x'], default_value=tft.mean(x), shape=[None, 1])
}