这次我们选择用户反馈情感分析这个场景,这几天我想了一下,这个场景的实际价值是:线上爬取指定产品的用户评论和反馈,通过机器学习预测出产品的热度、问题,后续进行产品完善和市场活动。
话不多说,开始吧。
1. 准备TSV数据
这个非常简单:https://raw.githubusercontent.com/dotnet/machinelearning/master/test/data/wikipedia-detox-250-line-data.tsv,这个文本拷贝到Sublime Text中,另存为data.tsv文件
2. 新建.Net Core Console 应用,右键添加 Machine Learning项目
在选择场景步骤中,我们选择第一个,“情感分析”
2. 选择样本数据,进行训练,预测
选择第一步我们准备好的data.tsv文件,指定一个要预测的列Sentiment
3. 开始样本数据的训练
训练的时间和数据量有关系,一般的:
这里我们尝试了10s和30s,最近算法和准确度没有变化,只是尝试机器学习训练的算法要多:
5. 生成可重复执行的代码工程
生成代码后,会在当前解决方案中多了两个Project,一个是Model的Project,一个Console的Project,我们深入看一下
其中Model Project中主要包含:
模型的输入类和输出类,其中:
输入类ModelInput是对我们输入数据的结构化描述
输出类ModelOutput是包含预测列和评估准确度
还有一个机器学习样本数据训练完成后的MLModel.zip文件,供后续数据预测用。
Console Project中,主要形成了一个可重复执行的代码:重点看Main函数的代码:
1 //Machine Learning model to load and use for predictions 2 private const string MODEL_FILEPATH = @"MLModel.zip"; 3 4 //Dataset to use for predictions 5 private const string DATA_FILEPATH = @"C:\Users\zhougq\Desktop\Data.tsv"; 6 7 static void Main(string[] args) 8 { 9 MLContext mlContext = new MLContext(); 10 11 // Training code used by ML.NET CLI and AutoML to generate the model 12 //ModelBuilder.CreateModel(); 13 14 ITransformer mlModel = mlContext.Model.Load(GetAbsolutePath(MODEL_FILEPATH), out DataViewSchema inputSchema); 15 var predEngine = mlContext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(mlModel); 16 17 // Create sample data to do a single prediction with it 18 ModelInput sampleData = CreateSingleDataSample(mlContext, DATA_FILEPATH); 19 20 // Try a single prediction 21 ModelOutput predictionResult = predEngine.Predict(sampleData); 22 23 Console.WriteLine($"Single Prediction --> Actual value: {sampleData.Sentiment} | Predicted value: {predictionResult.Prediction}"); 24 25 Console.WriteLine("=============== End of process, hit any key to finish ==============="); 26 Console.ReadKey(); 27 }