Как превратить выделенный текст обратно в реальный текст в ML.NET (для чат-бота)?

Я пытаюсь создать бота для часто задаваемых вопросов с помощью ML.NET (не могу использовать QNA Maker). Я хочу сравнить вопросы в базе знаний часто задаваемых вопросов с входными данными, а затем вернуть наиболее релевантный ответ. Большинство ботов для часто задаваемых вопросов, которые я нашел в Интернете, работали следующим образом: отображали вопросы часто задаваемых вопросов, определяли входные данные, выполняли косинусное сходство, а затем возвращали наиболее релевантный ответ. Я не совсем понимаю характеристику Microsoft, но я даже не могу ее протестировать, потому что не могу найти, как связать вектор признаков с исходным текстом.

Это то, что у меня есть до сих пор (в основном):

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

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

Какой обучающий вы используете? mlContext.Transforms.Text.FeaturizeText звучит как конвейерное преобразование, а не как тренер. примеры тренеров, которых я знаю Context.Clustering.Trainers.KMeans, Context.Regression.Trainers.FastTree, Context.Regression.Trainers.Sdca. Все их пространства имен указывают Trainers

Franck 02.07.2019 20:25

@Franck Я не думаю, что мне нужен тренер, мой план состоит в том, чтобы просто указать вопросы часто задаваемых вопросов, указать входные данные, сделать косинусное сходство, а затем вернуть наиболее подходящий ответ.

Sydney 08.07.2019 14:19
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
2
552
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

См. этот образец для получения дополнительной информации.

 var options = new TextFeaturizingEstimator.Options()
            {
                // Also output tokenized words
                OutputTokensColumnName = "OutputTokens"                    
            };
            var textPipeline = mlContext.Transforms.Text.FeaturizeText("Features", options, "Text");
Ответ принят как подходящий

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

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

Другие вопросы по теме