code: def _construct_column_types(self) -> dict:
      # Construct feature types input to MultimodalPredictor
      features_image_path = set(
          self._feature_metadata.get_features(
              required_special_types=[S_IMAGE_PATH]
          )
      )
      features_text = set(
          self._feature_metadata.get_features(
              required_special_types=[S_TEXT]
          )
      )
      features_categorical = set(
          self._feature_metadata.get_features(
              valid_raw_types=[R_CATEGORY]
          )
      )
      features_numerical = set(
          self._feature_metadata.get_features(
              valid_raw_types=[R_INT, R_FLOAT]
          )
      )
  
      key_map = {
          "image_path": features_image_path,
          "text": features_text,
          "categorical": features_categorical,
          "numerical": features_numerical,
      }
  
      features = self._feature_metadata.get_features()
  
      column_types = {}
      for feature in features:
          for key in ["image_path", "text", "categorical", "numerical"]:
              if feature in key_map[key]:
                  column_types[feature] = key
                  break
      return column_types
  
imports: import logging
  import os
  from typing import Dict, Optional
  import pandas
  from autogluon.common.features.types import R_CATEGORY, R_FLOAT, R_INT, R_OBJECT, S_IMAGE_PATH, S_TEXT, S_TEXT_AS_CATEGORY, S_TEXT_NGRAM, S_TEXT_SPECIAL
  from autogluon.common.utils.resource_utils import ResourceManager
  from autogluon.common.utils.try_import import try_import_autogluon_multimodal
  from autogluon.core.constants import BINARY, MULTICLASS, REGRESSION
  from autogluon.core.models import AbstractModel
label_desc: Use image node_id 14 for calling the MultiModalPredictorModel obj's underlying member method code with example usage: obj._construct_column_types() and returns: column_types