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

如何使用Keras将多文本特征的嵌入结果传入TFDF?

多文本特征嵌入后接入TFDF的解决方案

错误提示说明你的预处理器模型期望接收4个独立的输入张量,但实际传入的是一个形状为(None, 4)的单一张量。这是因为TFDF默认会将多个文本特征打包成一个张量输入,而你的预处理器定义的是4个单独的Input层,两者不匹配。以下是两种可行的解决方法:

方案1:修改预处理器,适配单张量输入

将预处理器的输入改为接受一个形状为(None, 4)的字符串张量,拆分后分别编码,再拼接所有编码结果:

import tensorflow as tf
import tensorflow_decision_forests as tfdf
import tensorflow_hub as hub
from tensorflow import keras
from tensorflow.keras import layers

sentence_encoder_layer = hub.KerasLayer(
    "https://tfhub.dev/google/universal-sentence-encoder/4"
)

# 定义输入为形状(None, 4)的字符串张量
inputs = layers.Input(shape=(4,), dtype=tf.string)

# 拆分每个文本特征并去除多余维度
split_features = tf.split(inputs, num_or_size_splits=4, axis=1)
split_features = [tf.squeeze(feat, axis=1) for feat in split_features]

# 分别编码每个特征
encoded_features = [sentence_encoder_layer(feat) for feat in split_features]

# 拼接所有编码后的特征
outputs = layers.concatenate(encoded_features, axis=1)

# 创建预处理器并初始化TFDF模型
preprocessor = keras.Model(inputs=inputs, outputs=outputs)
model = tfdf.keras.GradientBoostedTreesModel(preprocessing=preprocessor)

方案2:以字典形式输入数据,匹配多输入预处理器

如果你的数据是以字典形式组织(每个特征对应一个键),可以保持多输入的预处理器,同时确保训练时传入字典格式的数据:

import tensorflow as tf
import tensorflow_decision_forests as tfdf
import tensorflow_hub as hub
from tensorflow import keras
from tensorflow.keras import layers

sentence_encoder_layer = hub.KerasLayer(
    "https://tfhub.dev/google/universal-sentence-encoder/4"
)

FEATURES = ['feat1', 'feat2', 'feat3', 'feat4']

def create_model_inputs():
    inputs = {}
    for feature_name in FEATURES:
        inputs[feature_name] = layers.Input(
            name=feature_name, shape=(), dtype=tf.string
        )
    return inputs

# 创建多输入预处理器
inputs = create_model_inputs()
encoded_features = []
for feature_name in FEATURES:
    encoded = sentence_encoder_layer(inputs[feature_name])
    encoded_features.append(encoded)
outputs = layers.concatenate(encoded_features, axis=1)

preprocessor = keras.Model(inputs=inputs, outputs=outputs)
model = tfdf.keras.GradientBoostedTreesModel(preprocessing=preprocessor)

# 训练时需传入字典格式数据,示例:
# 假设train_data是tf.data.Dataset,每个元素为{'feat1': str, 'feat2': str, ..., 'label': int}
model.fit(train_data)

注意事项

  • 方案1适合数据被打包成张量的场景,方案2适合数据以字典形式存储的情况,可根据你的数据格式选择。
  • 拼接编码后的特征是必要操作,因为TFDF需要接收统一的特征张量作为输入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 15:42:41