处理 ML.NET 中的 VarVector<Single> 特征列

Dealing with VarVector<Single> Feature column in ML.NET

我有一个棘手的模型,我正在尝试对其进行标准化以进行二元分类。这是模型结构的示例。我重命名了一些东西只是为了简化。

    public class Review
    {
        public bool Label { get; set; }
        
        public ReviewItem ReviewItem { get; set; }
        
        public List<OtherItem> OtherItems { get; set; }
    }

    public class ReviewItem
    {
        public string SomeText { get; set; }

        public float SomeNumber { get; set; }

        public bool SomeBool { get; set; }
    }

    public class OtherItem
    {
        public string SomeDifferentText { get; set; }

        public float SomeDifferentNumber { get; set; }

        public bool SomeDifferentBool { get; set; }
    }

列表中可以有任意数量的 OtherItem。这是我试图将模型压扁一点的。

    public class ReviewMlModel
    {
        public bool Label { get; set; }
        
        public string ReviewItem_SomeText { get; set; }

        public float ReviewItem_SomeNumber { get; set; }

        public bool ReviewItem_SomeBool { get; set; }
        
        public string[] OtherItem_SomeDifferentText { get; set; }

        public float[] OtherItem_SomeDifferentNumber { get; set; }

        public bool[] OtherItem_SomeDifferentBool { get; set; }
    }

从那里我尝试将其标准化:

var data = mlContext.Data.LoadFromEnumerable(allReviews);

var dataPrepEstimator = mlContext.Transforms.Text.FeaturizeText("ReviewItem_SomeText")
   .Append(mlContext.Transforms.Text.FeaturizeText("OtherItem_SomeDifferentText"))
   .Append(mlContext.Transforms.Conversion.ConvertType("ReviewItem_SomeBool"))
   .Append(mlContext.Transforms.Conversion.ConvertType("OtherItem_SomeDifferentBool"))
   .Append(mlContext.Transforms.Concatenate("Features", 
           "ReviewItem_SomeText", "OtherItem_SomeDifferentText", "ReviewItem_SomeBool", 
           "OtherItem_SomeDifferentBool", "ReviewItem_SomeNumber", "OtherItem_SomeDifferentNumber"));
var transformedData = dataPrepEstimator.Fit(data).Transform(data);

var model = mlContext.BinaryClassification.Trainers.AveragedPerceptron()
    .Fit(transformedData);

这让我在尝试创建模型的那一行出现异常:

Schema mismatch for feature column 'Features': expected Vector<Single>, got VarVector<Single> (Parameter 'inputSchema')

我猜这是因为这些数组的长度都是可变的,但我没有看到转换 VarVector 的方法。我是否需要让原始 allReviews 可枚举的每个数组都具有相同的长度数组?还是我在压平原始模型时偏离了轨道?

看起来这是将数组更改为具有相同大小以及向所有数组属性添加 [VectorType(size)] 属性的组合。