Я пытаюсь создать бота для часто задаваемых вопросов с помощью 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; }
}
Он возвращает вектор признаков, но почти все значения равны нулю, так что, надеюсь, это нормально, но я просто не знаю, как превратить это в читаемый вывод. Также я не понимаю, почему я не могу просто выделить и смоделировать только текст часто задаваемых вопросов, зачем мне образец вопроса, я чувствую, что это неэффективно и, вероятно, я делаю это неправильно. Спасибо за любую помощь!
@Franck Я не думаю, что мне нужен тренер, мой план состоит в том, чтобы просто указать вопросы часто задаваемых вопросов, указать входные данные, сделать косинусное сходство, а затем вернуть наиболее подходящий ответ.





Если вы хотите также сохранить исходный текст, задав параметр 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 действительно может делать то, что я хотел, оказывается, достаточно просто изменить этот учебник так, как я хотел.
По сути, они не могут просто выделять часть текста, но текст должен быть представлен в контексте обучения.
Какой обучающий вы используете?
mlContext.Transforms.Text.FeaturizeTextзвучит как конвейерное преобразование, а не как тренер. примеры тренеров, которых я знаюContext.Clustering.Trainers.KMeans,Context.Regression.Trainers.FastTree,Context.Regression.Trainers.Sdca. Все их пространства имен указываютTrainers