Implementation:Recommenders team Recommenders Wide Deep Utils
| Knowledge Sources | |
|---|---|
| Domains | Deep Learning, Recommendation Systems, TensorFlow Estimator API |
| Last Updated | 2026-02-10 00:00 GMT |
Overview
The wide_deep_utils module provides utility functions for constructing Wide and Deep recommendation models using TensorFlow's high-level Estimator API, including feature column building and model assembly.
Description
This module implements Google's Wide & Deep learning architecture for recommendation, combining memorization (wide/linear component) with generalization (deep/neural network component). It exposes two main public functions:
- build_feature_columns -- Creates TensorFlow feature columns for wide, deep, or wide_deep model types. Wide columns use categorical vocabulary lists for user and item IDs plus a crossed feature column hashed into a configurable bucket size (default: 1000). Deep columns use embedding columns for user and item IDs (configurable dimensions, default: 8 each with max_norm scaling) with optional numeric feature columns for item features.
- build_model -- Assembles the appropriate TensorFlow Estimator based on which column types are provided:
- Wide columns only produces a LinearRegressor
- Deep columns only produces a DNNRegressor
- Both produces a DNNLinearCombinedRegressor
- Configurable parameters include linear_optimizer (default: Ftrl), dnn_optimizer (default: Adagrad), hidden units (default: [128, 128]), dropout, batch normalization, checkpoint frequency, and random seed. GPU memory is configured for dynamic allocation via allow_growth.
Internal helpers _build_wide_columns and _build_deep_columns handle the specific column construction logic, including the original user/item features alongside crossed columns to address hash collision problems.
Usage
Use these utilities when building Wide & Deep recommendation models with TensorFlow's Estimator API. The functions support three model configurations: pure wide (linear), pure deep (DNN), or combined wide-deep, allowing experimentation with different architectures. Pair with tf_utils.pandas_input_fn for data input and tf_utils.evaluation_log_hook for training-time evaluation.
Code Reference
Source Location
- Repository: Recommenders
- File: recommenders/models/wide_deep/wide_deep_utils.py
- Lines: 1-213
Signature
def build_feature_columns(
users, items, user_col=DEFAULT_USER_COL, item_col=DEFAULT_ITEM_COL,
item_feat_col=None, crossed_feat_dim=1000, user_dim=8, item_dim=8,
item_feat_shape=None, model_type="wide_deep"
)
def build_model(
model_dir=MODEL_DIR, wide_columns=(), deep_columns=(),
linear_optimizer="Ftrl", dnn_optimizer="Adagrad",
dnn_hidden_units=(128, 128), dnn_dropout=0.0, dnn_batch_norm=True,
log_every_n_iter=1000, save_checkpoints_steps=10000, seed=None
)
Import
from recommenders.models.wide_deep.wide_deep_utils import build_feature_columns, build_model
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| users | iterable | Yes | Distinct user IDs for vocabulary list construction |
| items | iterable | Yes | Distinct item IDs for vocabulary list construction |
| user_col | str | No | User column name (default: DEFAULT_USER_COL) |
| item_col | str | No | Item column name (default: DEFAULT_ITEM_COL) |
| item_feat_col | str | No | Item feature column name for deep/wide_deep models |
| crossed_feat_dim | int | No | Hash bucket size for crossed features (default: 1000) |
| user_dim | int | No | User embedding dimension for deep models (default: 8) |
| item_dim | int | No | Item embedding dimension for deep models (default: 8) |
| item_feat_shape | int or iterable | No | Shape of item feature array for deep models |
| model_type | str | No | Model type: "wide", "deep", or "wide_deep" (default: "wide_deep") |
| model_dir | str | No | Model checkpoint directory (default: MODEL_DIR) |
| wide_columns | list | No | Wide feature columns from build_feature_columns |
| deep_columns | list | No | Deep feature columns from build_feature_columns |
| linear_optimizer | str or Optimizer | No | Wide model optimizer (default: "Ftrl") |
| dnn_optimizer | str or Optimizer | No | Deep model optimizer (default: "Adagrad") |
| dnn_hidden_units | list of int | No | DNN hidden layer sizes (default: (128, 128)) |
| dnn_dropout | float | No | DNN dropout rate (default: 0.0) |
| dnn_batch_norm | bool | No | Whether to apply batch normalization (default: True) |
| seed | int | No | Random seed for reproducibility |
Outputs
| Name | Type | Description |
|---|---|---|
| build_feature_columns return | (list, list) | Tuple of (wide_columns, deep_columns); one may be empty depending on model_type |
| build_model return | tf.estimator.Estimator | Configured TensorFlow Estimator (Linear, DNN, or Combined) |
Usage Examples
Basic Usage
from recommenders.models.wide_deep.wide_deep_utils import build_feature_columns, build_model
# Build feature columns for a wide-deep model
wide_columns, deep_columns = build_feature_columns(
users=user_ids,
items=item_ids,
user_col="userID",
item_col="itemID",
crossed_feat_dim=1000,
user_dim=16,
item_dim=16,
model_type="wide_deep"
)
# Build the model
model = build_model(
model_dir="./checkpoints",
wide_columns=wide_columns,
deep_columns=deep_columns,
dnn_hidden_units=[256, 128, 64],
dnn_dropout=0.1,
dnn_batch_norm=True,
seed=42
)