ML.NET 内部数组越界 - 我束手无策

问题描述 投票:0回答:1

我束手无策......

T5.omnx - ML.Net 实现尝试深入文本摘要...... 有这个文本线束 - 其内容如下 - 线束是组件可用性的简单证明......

我尝试过许多 T5 模型 - 所有这些都让我陷入编码器输出和解码器输入之间类型不匹配的同一条死胡同...... 我已经检查过两次和三次,所有数组的形状和填充均按预期进行... 我已经在它报告的当前模型上使用了 netron:

INPUTS:             
                name: input_ids tensor: int64[1,128]
                name: attention_mask tensor: float32[1,128]
OUTPUTS:            
                name: input.103 tensor: float32[1,128,512]

我正在使用这些数据模型...

 internal class CombinedInput
    {
        [ColumnName("input_ids")]
        public long[] InputIds { get; set; }

        [ColumnName("attention_mask")]
        public float[] AttentionMask { get; set; }
    }

    internal class CombinedOutput
    {
        [ColumnName("input.103")] // Ensure this matches your model's output name
        public VBuffer<float> Output { get; set; } // This should match the expected shape

        public CombinedOutput()
        {
            // Initialize the VBuffer with a default size (if you know the expected size)
            // For example, if you expect 512 outputs:
            Output = new VBuffer<float>(128, new float[128]);
        }
    }

CombinedOutput 构造函数是由于预测过程中未定义数组所致...

这是我的代码....打印如下所示的结果... 数组类型与上面显示的 netron.org 配置报告匹配...

Console.WriteLine("Experiment: Create and Exercise Combined T5 Model.");
             
    var tokenizer = new GCSTokenizer();   // simple long assignment to each word
    var inputIds = tokenizer.Tokenize(Assets.EAS_Message);

    var inputData = new CombinedInput()
    {
        InputIds = inputIds,
        AttentionMask = tokenizer.GetAttentionMask(inputIds)
    };

    // Logging for debugging
    Console.WriteLine($"Input IDs: {string.Join(", ", inputData.InputIds)}");
    Console.WriteLine(Environment.NewLine);
    Console.WriteLine($"Attention Mask: {string.Join(", ", inputData.AttentionMask)}");
    Console.WriteLine(Environment.NewLine);
    var model = GetCombinedModel();  // built using new CombinedInput[] { }
    var predictionEngine = Assets.mlContext.Model.CreatePredictionEngine<CombinedInput, CombinedOutput>(model);

    try
    {
        var result = predictionEngine.Predict(inputData);  //Out or range throws here ... .
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Prediction failed: {ex.Message}");
    }


************* run output *****************

实验:创建并练习组合T5模型。 输入 ID:1、2、3、4、5、6、7、8、9、10、11、4、12、13、7、14、15、16、17、18、19、20、21、18 , 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 23, 32, 33, 34, 13, 35, 36, 37, 38, 13, 21, 39, 40, 41, 42 , 43, 44, 45, 46, 46, 34, 47, 13, 48, 49, 9, 50, 51, 52, 18, 53, 24, 54, 55, 56, 51, 34, 57, 13, 58 , 59, 59, 55, 18, 60, 61, 62, 38, 63, 64, 33, 65, 66, 67, 18, 68, 69, 70, 71, 23, 72, 73, 74, 75, 76 , 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 16, 91, 92, 29, 93, 94, 95, 96, 97, 98, 99 , 23, 100, 101, 102

注意掩码:1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1

预测失败:指数超出范围。必须为非负数且小于集合的大小。 (参数“索引”) 按任意键!

PS:原始 tokenId 列表有 488 个元素长 - 使用控制数据集 - 这被截断为 128 - 虽然不是理想的 - 这个实验是为了确定我们是否可以在我们的用例中使用 ML.net ...我们将处理稍后滑动输入(如果有原因的话)

所以任何关于为什么我无法用这些数据和这些模型进行预测的指示...提前致谢..

请参阅上文了解当前的代码库和迄今为止执行的步骤

c# nlp ml.net
1个回答
0
投票

找到了我自己的答案 -> 谢谢大家!

© www.soinside.com 2019 - 2024. All rights reserved.