/// <summary> /// Enable model monitoring for the <see cref="IModelStorageProvider"/>. /// Overrides the default model storage provider. /// </summary> /// <typeparam name="TData"></typeparam> /// <typeparam name="TPrediction"></typeparam> /// <param name="builder"></param> /// <param name="storageName">The name of the ML model in the storage provider.</param> /// <param name="modelStorageProvider">The model storage provider. The default model storage provider is <see cref="InMemoryModelStorageProvider"/>.</param> /// <returns></returns> public static IModelPredictionEngineBuilder <TData, TPrediction> WithStorageProvider <TData, TPrediction>( this IModelPredictionEngineBuilder <TData, TPrediction> builder, string storageName, IModelStorageProvider modelStorageProvider = null) where TData : class where TPrediction : class, new() { builder.Services.Configure(builder.ModelName, (Action <ModelPredictionEngineOptions <TData, TPrediction> >)((mlOptions) => { mlOptions.CreateModel = (mlContext) => { if (modelStorageProvider == null) { modelStorageProvider = new InMemoryModelStorageProvider(); } ChangeToken.OnChange( () => modelStorageProvider.GetReloadToken(), () => mlOptions.Reload()); return(GetTransfomer(storageName, mlContext, modelStorageProvider)); }; })); return(builder); }
public ModelBuilderService( IModelCreationBuilder <TInput, TOutput, TResult> modelBuilder, IModelStorageProvider storageProvider, ILogger logger) { _modelBuilder = modelBuilder ?? throw new ArgumentNullException(nameof(modelBuilder)); _storageProvider = storageProvider ?? throw new ArgumentNullException(nameof(storageProvider)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); }
/// <summary> /// Initializes a new instance of the <see cref="SpamModelBuilderService"/> class. /// </summary> /// <param name="spamModelBuilder"></param> /// <param name="storageProvider"></param> /// <param name="logger"></param> public SpamModelBuilderService( IModelCreationBuilder <SpamInput, SpamPrediction, MulticlassClassificationFoldsAverageMetricsResult> spamModelBuilder, IModelStorageProvider storageProvider, ILogger logger) : base(spamModelBuilder, storageProvider, logger) { _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _modelBuilder = spamModelBuilder ?? throw new ArgumentNullException(nameof(spamModelBuilder)); _storageProvider = storageProvider ?? throw new ArgumentNullException(nameof(storageProvider)); Name = nameof(SpamModelBuilderService); }
/// <summary> /// Initializes a new instance of the <see cref="SentimentModelBuilderService"/> class. /// </summary> /// <param name="sentimentModelBuilder"></param> /// <param name="storageProvider"></param> /// <param name="logger"></param> public SentimentModelBuilderService( IModelCreationBuilder <SentimentIssue, SentimentPrediction, BinaryClassificationMetricsResult> sentimentModelBuilder, IModelStorageProvider storageProvider, ILogger logger) : base(sentimentModelBuilder, storageProvider, logger) { _modelBuilder = sentimentModelBuilder ?? throw new ArgumentNullException(nameof(sentimentModelBuilder)); _storageProvider = storageProvider ?? throw new ArgumentNullException(nameof(storageProvider)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); Name = nameof(SentimentModelBuilderService); }
private static ITransformer GetTransfomer(string storageName, ML.MLContext mlContext, IModelStorageProvider storage) { var model = storage.LoadModelAsync(storageName, CancellationToken.None).GetAwaiter().GetResult(); var transformer = mlContext.Model.Load(model, out var inputSchema); return(transformer); }
/// <summary> /// Adds ML.NET based Sentiment model builder with <see cref="FileModelStorageProvider"/> as storage. /// </summary> /// <param name="services">The DI services.</param> /// <param name="modelStorageProvider">The model storage provider.</param> /// <returns></returns> public static IServiceCollection AddSentimentModelBuilder(this IServiceCollection services, IModelStorageProvider modelStorageProvider = null) { services.TryAddSingleton(new MLContext()); if (modelStorageProvider == null) { modelStorageProvider = new FileModelStorageProvider(); } services.TryAddScoped <IModelCreationBuilder <SentimentIssue, SentimentPrediction, BinaryClassificationMetricsResult>, SentimentModelBuilder>(); services.AddScoped <IModelBuilderService, SentimentModelBuilderService>((sp) => { var builder = sp.GetRequiredService <IModelCreationBuilder <SentimentIssue, SentimentPrediction, BinaryClassificationMetricsResult> >(); var logger = sp.GetRequiredService <ILogger <SentimentModelBuilderService> >(); return(new SentimentModelBuilderService(builder, modelStorageProvider, logger)); }); return(services); }
/// <summary> /// Adds ML.NET based Spam detection model builder with <see cref="FileModelStorageProvider"/> as storage. /// </summary> /// <param name="services">The DI services.</param> /// <param name="modelStorageProvider">The model storage provider.</param> /// <returns></returns> public static IServiceCollection AddSpamDetectionModelBuilder(this IServiceCollection services, IModelStorageProvider modelStorageProvider = null) { services.TryAddSingleton(new MLContext()); if (modelStorageProvider == null) { modelStorageProvider = new FileModelStorageProvider(); } services.TryAddScoped <IModelCreationBuilder <SpamInput, SpamPrediction, MulticlassClassificationFoldsAverageMetricsResult>, SpamModelBuilder>(); services.AddScoped <IModelBuilderService, SpamModelBuilderService>((sp) => { var builder = sp.GetRequiredService <IModelCreationBuilder <SpamInput, SpamPrediction, MulticlassClassificationFoldsAverageMetricsResult> >(); var logger = sp.GetRequiredService <ILogger <SpamModelBuilderService> >(); return(new SpamModelBuilderService(builder, modelStorageProvider, logger)); }); return(services); }