private static void SetPredictedResultColumnName(MLModelConfig modelConfig, UserConnection userConnection, IDataReader reader) { if (modelConfig.PredictedResultColumnName.IsNotNullOrEmpty()) { return; } Guid predictedResultColumnUId = FindValue <Guid>(reader, "PredictedResultColumnUId", Guid.Empty); if (predictedResultColumnUId.IsNotEmpty()) { modelConfig.PredictedResultColumnName = FindEntityColumnValueName(userConnection, modelConfig.EntitySchemaId, predictedResultColumnUId); return; } if (modelConfig.TrainingTargetColumnName.IsNotNullOrEmpty()) { modelConfig.PredictedResultColumnName = modelConfig.TrainingTargetColumnName; return; } //TODO #CRM-40303 Remove when PredictedResultColumnUId will be set for all known customer models ModelSchemaMetadata metadata = modelConfig.GetModelSchemaMetadata(); string outputName = metadata.Output?.Name; if (IsEntityColumnExists(userConnection.EntitySchemaManager, modelConfig.EntitySchemaId, outputName)) { _log.Warn("Neither PredictedResultColumnUId nor TargetColumnUId is set. " + $"Using metadata's output as PredictedResultColumn in model {modelConfig.Id}"); modelConfig.PredictedResultColumnName = outputName; } }
/// <summary> /// Loads the model metadata captions. Sets enriched metadata to <see cref="MLModelConfig.MetaData"/> property. /// </summary> /// <param name="userConnection">The user connection.</param> /// <param name="model">Loaded model.</param> public void LoadModelMetadataCaptions(UserConnection userConnection, MLModelConfig model) { if (model.MetaData.IsNullOrEmpty()) { return; } ModelSchemaMetadata metadata = model.GetModelSchemaMetadata(); if (metadata.Inputs.IsNullOrEmpty() && metadata.Output == null) { return; } var modelSchema = userConnection.EntitySchemaManager.GetInstanceByName("MLModel"); var modelEntity = modelSchema.CreateEntity(userConnection); modelEntity.PrimaryColumnValue = model.Id; if (!modelEntity.FetchFromDB(new[] { "MetaDataLcz" }, false)) { return; } string serializedMetadataLcz = modelEntity.GetTypedColumnValue <string>("MetaDataLcz"); if (serializedMetadataLcz.IsNullOrEmpty()) { return; } ModelSchemaMetadata metaDataLcz; try { metaDataLcz = JsonConvert.DeserializeObject <ModelSchemaMetadata>(serializedMetadataLcz); } catch (Exception e) { _log.Warn($"Can't localize metadata for {model.Id}, because MetaDataLcz has incorrect format: " + serializedMetadataLcz, e); return; } metadata.Inputs?.ForEach(input => { var inputLcz = metaDataLcz.Inputs.Find(schemaInput => schemaInput.Name == input.Name); if (inputLcz == null) { return; } input.Caption = inputLcz.Caption; }); if (metadata.Output != null) { metadata.Output.Caption = metaDataLcz.Output?.Caption; } model.MetaData = JsonConvert.SerializeObject(metadata, Formatting.Indented); }
private string GetMetadataOutputName() { return(_modelConfig.GetModelSchemaMetadata().Output?.Name); }