You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取TFX Transform步骤中生成的vocabulary(词汇表)的长度

解决方案

在Transform预处理逻辑内获取词汇表长度

你不需要将词汇表长度转换为静态Python整数,直接使用TensorFlow Transform提供的原生API获取长度张量,直接用于后续的张量运算即可:

  1. 调用tft.get_vocabulary_size()即可直接拿到对应词汇表的长度张量,该结果会自动对齐你调用tft.vocabulary()时的配置(包含你设置的OOV桶数量、截断规则等)。
  2. 所有TensorFlow原生操作(如tf.one_hot的depth参数、稀疏张量构造等)都支持传入张量作为参数,无需提前转为静态值。

正确代码示例

import tensorflow_transform as tft

name = 'my_categories'
# 生成词汇表,可按需配置oov_buckets、top_k等参数
vocab_uri = tft.vocabulary(category_inputs, vocab_filename=name, oov_buckets=1)
# 直接获取词汇表长度张量
vocab_len = tft.get_vocabulary_size(vocab_filename=name)

# 后续转换直接使用vocab_len张量即可,例:生成多标签独热编码
category_indices = tft.compute_and_apply_vocabulary(category_inputs, vocab_filename=name)
one_hot_labels = tf.one_hot(category_indices, depth=vocab_len)

在Transform步骤结束后的后续组件(如Trainer)中获取静态长度值

如果需要在模型训练等环节拿到实际的Python整数值,可以通过TFTransformOutput加载Transform组件的输出产物获取:

import tensorflow_transform as tft
from tfx.components.trainer.fn_args_utils import FnArgs

def run_fn(fn_args: FnArgs):
    # 加载Transform输出的预处理结果
    tf_transform_output = tft.TFTransformOutput(fn_args.transform_output)
    # 拿到词汇表长度的Python整数值
    vocab_len = tf_transform_output.vocabulary_size_by_name(vocab_name=name)

你的报错原因说明

  • 你之前使用的tft.analyzers.size()统计的是输入张量的总元素个数,不是去重后的分类数量,不符合你的需求。
  • 所有在预处理函数中将张量转为静态Python值的操作都会失败,因为预处理函数执行时仅在构造计算图,分析器的实际计算结果还未生成,不需要也不能在这个阶段拿到静态值。

内容的提问来源于stack exchange,提问作者Sarah Messer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 07:45:08