首页 > 解决方案 > 如果 ML .net 中的列名不同,如何动态加载模型以进行情感分析?

问题描述

我现在像这样使用映射。

var trainedModel = _mlContext.Model.Load(modelPath, out DataViewSchema inputSchema);

_mlContext.Model.CreatePredictionEngine<SentimentIssue, SentimentPrediction>(trainedModel);

public class SentimentIssue
    {
        [LoadColumn(0)]
        public bool Label { get; set; }
        [LoadColumn(1)]
        public string Text { get; set; }
    }

public class SentimentPrediction
    {
        [ColumnName("PredictedLabel")]
        public bool Prediction { get; set; }

        public float Probability { get; set; }

        public float Score { get; set; }

        public string Text { get; set; }
    }

如果另一个经过训练的模型的列名与代码中的名称不同,则 CreatePredictionEngine 方法中将出现如下异常:System.ArgumentOutOfRangeException 找不到输入列“SentimentText”。

此外,如果我使用 Column Name 属性,它需要一个常量。

public class SentimentIssue
    {
        [ColumnName("Label")]
        public bool Label { get; set; }
        [ColumnName("Text")]
        public string Text { get; set; }
    }

不允许使用这样的模型,因为 Column Name 需要一个常量。

public class SentimentIssue
    {
        [ColumnName(ConfigurationManager.AppSettings["Label"])]
        public bool Label { get; set; }
        [ColumnName(ConfigurationManager.AppSettings["Text"])]
        public string Text { get; set; }
    }

如何将用于情感分析的模型中的列名动态映射到代码中的模型。是否有其他方法可以为情感分析动态加载模型?

标签: c#sentiment-analysisml.net

解决方案


推荐阅读