merlin.models.tf.ContrastiveOutput
-
class
merlin.models.tf.ContrastiveOutput(*args, **kwargs)[source] Bases:
merlin.models.tf.outputs.base.ModelOutputCategorical output
- Parameters
to_call (Union[Schema, ColumnSchema,) –
- EmbeddingTable, ‘CategoricalTarget’,
’EmbeddingTablePrediction’, ‘DotProduct’]
The target feature to predict. To perform weight-tying [1] technique, you should provide the EmbeddingTable or EmbeddingTablePrediction related to the target feature.
negative_samplers (ItemSamplersType) – List of samplers for negative sampling, by default None
pre (Optional[Block], optional) – Optional block to transform predictions before computing the binary logits, by default None
post (Optional[Block], optional) – Optional block to transform the binary logits, by default None
logits_temperature (float, optional) – Parameter used to reduce model overconfidence, so that logits / T. by default 1
name (str, optional) – The name of the task, by default None
default_loss (Union[str, tf.keras.losses.Loss], optional) – Default loss to use for categorical-classification by default ‘categorical_crossentropy’
get_default_metrics (Callable, optional) – A function returning the list of default metrics to use for categorical-classification
store_negative_ids (bool, optional) – Whether to store negative ids for post-processing by default False
logq_sampling_correction (bool, optional) – The LogQ correction is a standard technique for sampled softmax and popularity-biased sampling. It subtracts from the logits the log expected count/prob of the positive and negative samples in order to not overpenalize the popular items for being sampled more often as negatives. It can be enabled if a single negative sampler is provided and if it provides the sampler provides the sampling probabilities (i.e. implements with_sampling_probs()). Another alternative for performing logQ correction is using ContrastiveOutput(…, post=PopularityLogitsCorrection(item_frequencies)), where you need to provide the items frequency probability distribution (prior). Default is False.
References –
---------- –
Hakan Inan ([1]) –
Khosravi (Khashayar) –
Richard Socher. 2016. Tying word vectors (and) –
word classifiers (and) –
arXiv (1611.01462 (2016)) –
Notes –
---------- –
case to_call is set as DotProduct() (In) –
of target couldn't be inferred (schema) –
therefore –
user should feed a schema only with ITEM_ID feature as schema arg (the) –
:param : :param which is treated as a kwargs arg below.: :param Example usage::
outputs=mm.ContrastiveOutput( to_call=DotProduct(), negative_samplers="in-batch", schema=schema.select_by_tag(Tags.ITEM_ID), logits_temperature = 0.2, )
- Parameters
schema arg is not needed when we pass the schema to to_call arg. (The) –
usage:: (Example) –
- outputs=mm.ContrastiveOutput(
to_call=schema.select_by_tag(Tags.ITEM_ID), negative_samplers=”in-batch”, logits_temperature = 0.2,
)
-
__init__(to_call: Union[merlin.schema.schema.Schema, merlin.schema.schema.ColumnSchema, merlin.models.tf.inputs.embedding.EmbeddingTable, merlin.models.tf.outputs.classification.CategoricalTarget, merlin.models.tf.outputs.classification.EmbeddingTablePrediction, merlin.models.tf.outputs.base.DotProduct], negative_samplers: Union[merlin.models.tf.outputs.sampling.base.CandidateSampler, Sequence[Union[merlin.models.tf.outputs.sampling.base.CandidateSampler, str]], str], target_name: Optional[str] = None, pre: Optional[keras.engine.base_layer.Layer] = None, post: Optional[keras.engine.base_layer.Layer] = None, logits_temperature: float = 1.0, name: Optional[str] = None, default_loss: Union[str, keras.losses.Loss] = 'categorical_crossentropy', default_metrics_fn: Callable[[], Sequence[keras.metrics.base_metric.Metric]] = <function default_categorical_prediction_metrics>, downscore_false_negatives=True, false_negative_score: float = -655.04, query_name: str = 'query', candidate_name: str = 'candidate', store_negative_ids: bool = False, logq_sampling_correction: Optional[bool] = False, **kwargs)[source]
Methods
__init__(to_call, negative_samplers[, …])add_loss(losses, **kwargs)Add loss tensor(s), potentially dependent on layer inputs.
add_metric(value[, name])Adds metric tensor to the layer.
add_update(updates)Add update op(s), potentially dependent on layer inputs.
add_variable(*args, **kwargs)Deprecated, do NOT use! Alias for add_weight.
add_weight([name, shape, dtype, …])Adds a new variable to the layer.
build(input_shape)build_from_config(config)call(inputs[, features, targets, training, …])call_contrastive(inputs, features, targets)compute_mask(inputs[, mask])Computes an output mask tensor.
compute_output_shape(input_shape)compute_output_signature(input_signature)Compute the output tensor signature of the layer based on the inputs.
count_params()Count the total number of scalars composing the weights.
create_default_metrics()embedding_lookup(ids)finalize_state()Finalizes the layers state after updating layer weights.
from_config(config)get_build_config()get_input_at(node_index)Retrieves the input tensor(s) of a layer at a given node.
get_input_mask_at(node_index)Retrieves the input mask tensor(s) of a layer at a given node.
get_input_shape_at(node_index)Retrieves the input shape(s) of a layer at a given node.
get_output_at(node_index)Retrieves the output tensor(s) of a layer at a given node.
get_output_mask_at(node_index)Retrieves the output mask tensor(s) of a layer at a given node.
get_output_shape_at(node_index)Retrieves the output shape(s) of a layer at a given node.
get_task_name(target_name)get_weights()Returns the current weights of the layer, as NumPy arrays.
outputs(query_embedding, positive, negative)Method to compute the dot product between the query embeddings and positive/negative candidates
sample_negatives(positive, features[, …])Method to sample negatives from self.negative_samplers
set_negative_samplers(negative_samplers)set_weights(weights)Sets the weights of the layer, from NumPy arrays.
to_dataset([gpu])with_name_scope(method)Decorator to automatically enter the module name scope.
Attributes
activity_regularizerOptional regularizer function for the output of this layer.
compute_dtypeThe dtype of the layer’s computations.
dtypeThe dtype of the layer weights.
dtype_policyThe dtype policy associated with this layer.
dynamicWhether the layer is dynamic (eager-only); set in the constructor.
inbound_nodesReturn Functional API nodes upstream of this layer.
inputRetrieves the input tensor(s) of a layer.
input_maskRetrieves the input mask tensor(s) of a layer.
input_shapeRetrieves the input shape(s) of a layer.
input_specInputSpec instance(s) describing the input format for this layer.
lossesList of losses added using the add_loss() API.
metricsList of metrics added using the add_metric() API.
nameName of the layer (string), set in the constructor.
name_scopeReturns a tf.name_scope instance for this class.
non_trainable_variablesnon_trainable_weightsList of all non-trainable weights tracked by this layer.
outbound_nodesReturn Functional API nodes downstream of this layer.
outputRetrieves the output tensor(s) of a layer.
output_maskRetrieves the output mask tensor(s) of a layer.
output_shapeRetrieves the output shape(s) of a layer.
statefulsubmodulesSequence of all sub-modules.
supports_maskingWhether this layer supports computing a mask using compute_mask.
task_nametrainabletrainable_variablestrainable_weightsList of all trainable weights tracked by this layer.
updatesvariable_dtypeAlias of Layer.dtype, the dtype of the weights.
variablesReturns the list of all layer variables/weights.
weightsReturns the list of all layer variables/weights.
-
outputs(query_embedding: tensorflow.python.framework.ops.Tensor, positive: merlin.models.tf.outputs.sampling.base.Candidate, negative: merlin.models.tf.outputs.sampling.base.Candidate) → merlin.models.tf.core.prediction.Prediction[source] Method to compute the dot product between the query embeddings and positive/negative candidates
- Parameters
query_embedding (tf.Tensor) – tensor of query embeddings.
positive (Candidate) – Store the ids and metadata (such as embeddings) of the positive candidates.
negative (Candidate) – Store the ids and metadata (such as embeddings) of the sampled negative candidates.
- Returns
a Prediction object with the prediction scores, the targets and the negative candidates ids if specified.
- Return type
Prediction
-
sample_negatives(positive: merlin.models.tf.outputs.sampling.base.Candidate, features: Dict[str, tensorflow.python.framework.ops.Tensor], training=False, testing=False) → Tuple[merlin.models.tf.outputs.sampling.base.Candidate, merlin.models.tf.outputs.sampling.base.Candidate][source] Method to sample negatives from self.negative_samplers
- Parameters
- Returns
Tuple of candidates with sampled negative ids and the provided positive ids added with the sampling probability
- Return type
Tuple[Candidate, Candidate]
-
to_dataset(gpu=None) → merlin.io.dataset.Dataset[source]
-
property
has_candidate_weights
-
property
keys