我正在尝试使用 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/