如何将特征化文本转回 ML.NET 中的实际文本(对于聊天机器人)?

How to turn featurized text back to actual text in ML.NET (for chatbot)?

我正在尝试使用 ML.NET 创建一个 FAQ 机器人(不能使用 QNA Maker)。我想将 FAQ KB 中的问题与输入进行比较,然后 return 最相关的答案。我在网上发现的大多数 FAQ 机器人都是这样工作的:特征化 FAQ 问题,特征化输入,做余弦相似度,然后 return 最相关的答案。我不太了解微软的特征化,但我什至无法测试它,因为我找不到如何将特征向量与原文联系起来。

这是我目前所拥有的(主要):

mlContext = new MLContext(seed: 0);
IDataView dataview = mlContext.Data.LoadFromTextFile<SampleData>("Data/training_data.tsv", hasHeader: true);
var textPipeline = mlContext.Transforms.Text.FeaturizeText("Features", "Question");
var textTransformer = textPipeline.Fit(dataview);
var predictionEngine = mlContext.Model.CreatePredictionEngine<SampleData, TransformedTextData>(textTransformer);
SampleData sampleData = new SampleData()
    {
        Question = "Setting Up Data Exchange" //would be changed to user input
    };
var prediction = predictionEngine.Predict(sampleData);
Console.WriteLine($"Number of Features: {prediction.Features.Length}");
Console.Write("Features: ");
    for (int i = 0; i < 1000; i++)
        Console.Write($"{prediction.Features[i]:F4}  ");

样本数据class:

public class SampleData
{
        [LoadColumn(0)]
        public string Question { get; set; }

        [LoadColumn(1)]
        public string Answer { get; set; }
}

public class TransformedTextData : SampleData
{
        public float[] Features { get; set; }
}

它 return 是特征向量,但几乎所有的值都是零,所以希望这是正常的,但我只是不知道如何将其转化为可读的输出。此外,我不明白为什么我不能只对常见问题解答文本进行特征化和建模,为什么我需要一个示例问题,我觉得那样效率低下,而且我可能做得不对。感谢您的帮助!

如果还想保留原文,在TextFeaturizingEstimator.Options中设置OutputTokensColumnName参数。

有关更多信息,请参阅 this sample

 var options = new TextFeaturizingEstimator.Options()
            {
                // Also output tokenized words
                OutputTokensColumnName = "OutputTokens"                    
            };
            var textPipeline = mlContext.Transforms.Text.FeaturizeText("Features", options, "Text");

我不认为 ML.NET 实际上可以做我想做的事,结果只是将 this tutorial 修改为我想要的效果就足够了。

基本上他们不能只对文本的一部分进行特征化,但必须在上下文中对文本进行特征化才能进行训练。