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

标签 c# nlp bots ml.net

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

这是我目前所拥有的(在 Main 中):

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}  ");

样本数据类:

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; }
}

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

最佳答案

如果您还想保留原始文本,请在 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");

关于c# - 如何将特征化文本转回 ML.NET 中的实际文本(用于聊天机器人)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56857951/

相关文章:

c# - linq中的'orderby'使用字符串数组c#

c# - WP8 ListPicker SelectionChanged 一开始就被触发

c# - 如何使用静态工厂方法创建对象?

arrays - 了解 word2vec (TensorFlow) 中的输入和标签

javascript - 哪些搜索引擎蜘蛛执行 javascript?

c# - 如何在 Entity Framework 5 的 Linq 中使用 DbGeography.Filter?

java - MetaMap java.lang.OutOfMemoryError : Java heap space

python - 提供您自己的自定义标签来标记 nltk 中的数据?

c# - 如何在 MessageController.cs Post 方法中使用 PromptDialog.Confirm()

python - 将新值添加到 txt 文件