一般的な変換

このドキュメントでは、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_fntf.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])
  }