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

C# 如何在ML.NET(用于聊天机器人)中将特征化文本转换回实际文本?,c#,nlp,bots,ml.net,C#,Nlp,Bots,Ml.net,我正在尝试使用ML.NET创建一个常见问题解答机器人程序(无法使用QNA Maker)。我想将FAQ知识库中的问题与输入进行比较,然后返回最相关的答案。我在网上发现的大多数FAQ机器人都是这样工作的:对FAQ问题进行特征化,对输入进行特征化,进行余弦相似性分析,然后返回最相关的答案。我不太理解微软的功能化,但我甚至不能测试它,因为我找不到如何将特征向量与原始文本关联起来 这是我到目前为止(主要)的情况: 它返回特征向量,但几乎所有的值都是零,所以希望这是正常的,但我不知道如何将其转化为可读的输出

我正在尝试使用ML.NET创建一个常见问题解答机器人程序(无法使用QNA Maker)。我想将FAQ知识库中的问题与输入进行比较,然后返回最相关的答案。我在网上发现的大多数FAQ机器人都是这样工作的:对FAQ问题进行特征化,对输入进行特征化,进行余弦相似性分析,然后返回最相关的答案。我不太理解微软的功能化,但我甚至不能测试它,因为我找不到如何将特征向量与原始文本关联起来

这是我到目前为止(主要)的情况:


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

如果您还想保留原始文本,请在
textfeaturizengestimator.Options
中设置
outputokenscolumnname
参数

更多信息,请参阅

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

我不认为ML.NET真的能做我想要的,事实证明,仅仅修改我想要的就足够了


基本上,他们不能只对一部分文本进行特征化处理,但文本必须根据上下文进行特征化处理,以便进行培训。

您使用的是哪种学习者
mlContext.Transforms.Text.featureizeText
听起来像是管道转换,而不是培训师。我知道的示例培训师
Context.Clustering.trainers.KMeans
Context.Regression.trainers.FastTree
Context.Regression.trainers.Sdca
。他们所有的名称空间都指定了
Trainers
@frank我想我不需要一个培训师,我的计划只是对常见问题进行特征化,对输入进行特征化,进行余弦相似性分析,然后返回最相关的答案
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; }
}
 var options = new TextFeaturizingEstimator.Options()
            {
                // Also output tokenized words
                OutputTokensColumnName = "OutputTokens"                    
            };
            var textPipeline = mlContext.Transforms.Text.FeaturizeText("Features", options, "Text");