做什么
随着机器学习热度逐渐上升,为了提高自身竞争力,有必要掌握一些机器学习的知识。关于机器学习的概念,各种神经网络的介绍这里就不做具体介绍了,后期看情况是否写个关于机器学习的知识普及篇。
这篇文章主要是讲如果通过微软提供的机器学习框架,通过C#语言写一个情感分析的小程序。
主要功能为:预测用户输入的英文是否为负面的,准确度肯定不好,但主要是抛砖引玉。
训练数据:250条维基百科评论(wikipedia detox)wikipedia-detox-250-line-data.tsv
训练数据数据标注:第一列是0和1,0表示非负面情绪,1表示负面情绪,第二列是用户评论
大概流程:给机器输入250条评论,机器通过学习,生成模型,然后评估模型,最后输入自定义的一句英文评论,机器输出0或1
开发环境准备
1.安装Visual Studio 2017 15.9.12 or更高版本,作者安装的是2019最新版的,安装的时候记得安装.NetCore相关功能,具体怎么安装勾选相关功能直接下一步即可。
2.安装ML.net模型构建器(ML.NET Model Builder tool),微软官方下载地址,下载以后直接双击安装即可。安装的时候记得把Visual Studio关闭。也可以通过Visual Studio中的扩展功能里安装,如下图:
安装ML.Net扩展工具
安装ML.Net扩展工具
注:扩展工具下载比较慢,可以下载我上传到百度网盘的包
链接:https://pan.baidu.com/s/1x5VhyFJzdj3CC04zrUev_Q
提取码:vqbq
创建项目
新建一个.NetCore的控制台应用程序,给项目起名ML001,步骤如下:
1.新建一个.Net Core 控制台项目
2.给项目起名ML001
右键ML001项目,添加一个Machine Learning,如下图:
新建ML
选择模型
在新打开的页面我们选择一个机器学习模型,当前微软一共给我们提供了5个模型,教程中采用的是第一个Sentiment Analysis,该模型将数据分成2个类别,比较适合舆情分析系统,判断一段文字是正面的还是负面的。
Scenario添加训练数据
训练数据我们用的是250条维基百科的评论,如果想提高模型的准确度,训练数据越多越好。
下载地址:wikipedia-detox-250-line-data.tsv
训练数据可以从文件或者Sqlserver数据库中导入,教程中我们选择File,然后依次选择我们下载的训练数据,Colume to predict 选择预测结果字段,Input Colume 选择默认,然后选择Train
数据准备
训练模型
填写要训练的时间(单位秒)然后点Start training就可以了,如果训练数据非常多,训练时间也需要相应的增加,同时模型会帮我们选择最优的训练结果的
训练结果如下
训练结果
注:
Status - 这将显示模型培训过程的状态;这将告诉您培训过程还剩多少时间,还将告诉您培训过程何时完成。
Best accuracy - 显示模型生成器迄今为止找到的最佳模型的准确性。较高的精度意味着模型对试验数据的预测更准确。
Best algorithm - 这向您展示了在ModelBuilder的探索过程中,哪种算法执行得最好。
然后点击Evaluate
评估模型
在ModelBuilder训练并选择了最佳模型之后,您可以转到Evaluate步骤,该步骤向您显示各种输出(例如性能最佳的算法、探索了多少个模型以及ML任务(在本例中是二进制分类),并允许您在UI中试用该模型。
您可以在概述和详细信息之间切换,以查看有关培训课程和探索的顶级模型(最多5个)的更多信息,包括每个顶级模型的多个评估指标。
模型评估模型评估
可以在“Try your model”部分中对样本输入进行预测。文本框预先填充了数据集的第一行数据,但是我们可以更改输入并点击Predict来尝试不同的情绪预测。
模型评估完毕以后选择code
code
在code页面我们选择Add Projects
code之后我们会看到解决方案里增加了2个项目
ML001ML.ConsoleApp
: .NET 控制台应用程序,包括了ModelBuilder.cs
(创建和训练模型) 和Program.cs
(程序入口)。
ML001ML.Model
:.NET Standard类库, 包括了ModelInput.cs
和ModelOutput.cs
(模型输入和输出相关), ConsumeModel.cs
(模型预测相关方法), 和MLModel.zip
(训练的模型)。
应用
模型训练好以后,就可以开始应用了。打开我们一开始创建的.NetCore 控制台应用中的Program.cs
,
然后输入如下代码:记得添加ML001ML.Model引用
using ML001ML.Model;
using System;
namespace ML001
{
class Program
{
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("请输入一句英文进行预测");
//定义输入
var input = new ModelInput();
//获取用户输入
string userInput = Console.ReadLine();
input.SentimentText = userInput;
// 加载模型,输出预测结果。
ModelOutput result = ConsumeModel.Predict(input);
Console.WriteLine($"用户输入: {input.SentimentText}\n预测结果: {result.Prediction}");
}
}
}
}
测试结果
应该是训练数据不足,本身是正面的话却预测成负面的了。
实际结果
OK,就写这么多了,如果文章对你有帮助,就给个免费的赞吧!
网友评论