Как превратить персонализированный текст обратно в реальный текст в ML.NET (для чат-бота)? - PullRequest
1 голос
/ 02 июля 2019

Я пытаюсь создать бота FAQ с ML.NET (не могу использовать QNA Maker).Я хочу сравнить вопросы в разделе часто задаваемых вопросов с вводом, а затем вернуть наиболее релевантный ответ.Большинство ботов часто задаваемых вопросов, которые я нашел в Интернете, работали следующим образом: задайте вопросы для вопросов 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}  ");

Класс SampleData:

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

Возвращает вектор объектов, но почти все значения равны нулю, так что, надеюсь, это нормально, но я просто не знаю, как я могупревратить это в читаемый вывод.Кроме того, я не понимаю, почему я не могу просто описать и смоделировать только текст FAQ, зачем мне нужен пример вопроса, я чувствую, что это неэффективно, и, вероятно, я не делаю это правильно.Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 08 июля 2019

Я не думаю, что ML.NET действительно может делать то, что я хотел, получается просто изменить этот урок на то, что я хотел, сработало достаточно хорошо.

В принципе, они не могут простоподделать часть текста, но текст должен быть подделан в контексте обучения.

0 голосов
/ 02 июля 2019

Если вы также хотите сохранить исходный текст, установите параметр OutputTokensColumnName в TextFeaturizingEstimator.Options.

Подробнее см. .

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