ML.NET 示例:二元分类之用户评论的情绪分析
写在前面
准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正。
如果有朋友对此感兴趣,可以加入我:https://github.com/feiyun0112/machinelearning-samples.zh-cn
用户评论的情绪分析
| ML.NET 版本 | API 类型 | 状态 | 应用程序类型 | 数据类型 | 场景 | 机器学习任务 | 算法 |
|---|---|---|---|---|---|---|---|
| v0.7 | 动态API | README.md 已更新 | 控制台应用程序 | .tsv 文件 | 情绪分析 | 二元分类 | 线性分类 |
在这个介绍性示例中,您将看到如何使用ML.NET预测客户评论的情绪(积极或消极)。在机器学习领域中,这种类型的预测被称为二元分类。
问题
这个问题集中在预测客户的评论是否具有正面或负面情绪。我们将使用小型的wikipedia-detox-datasets(一个用于训练的数据集,一个用于模型的准确性评估的数据集),这些数据集已经由人工处理过,并且每个评论都被分配了一个情绪标签:
- 0 - 好评/正面
- 1 - 差评/负面
我们将使用这些数据集构建一个模型,在预测时将分析字符串并预测情绪值为0或1。
机器学习任务 - 二元分类
二元分类一般用于将项目分类为两个类中的一个的问题(将项目分类为两个以上的类称为多类分类)。
- 预测保险索赔是否有效。
- 预测飞机是否会延误或将准时到达。
- 预测face ID(照片)是否属于设备的所有者。
所有这些示例的共同特征是我们想要预测的参数只能采用两个值中的一个。 换句话说,该值由 boolean 类型表示。
解决方案
要解决这个问题,首先我们将建立一个机器学习模型。然后,我们将在现有数据上训练模型,评估其有多好,最后我们将使用该模型来预测新评论的情绪。

1. 建立模型
建立模型包括:
定义映射到数据集的数据架构,以便用DataReader读取(“wikipedia-detox-250-line-data.tsv”和“wikipedia-detox-250-line-test.tsv”)
创建一个评估器,并将数据转换为数值向量,以便它能够被机器学习算法有效地使用(使用“FeaturizeText”)
选择训练器/学习算法(如“FastTree”)来训练模型。
初始代码类似以下内容:
// STEP 1: Common data loading configuration
TextLoader textLoader = mlContext.Data.TextReader(new TextLoader.Arguments()
{
Separator = "tab",
HasHeader = true,
Column = new[]
{
new TextLoader.Column("Label", DataKind.Bool, 0),
new TextLoader.Column("Text", DataKind.Text, 1)
}
});
IDataView trainingDataView = textLoader.Read(TrainDataPath);
IDataView testDataView = textLoader.Read(TestDataPath);
// STEP 2: Common data process configuration with pipeline data transformations
var dataProcessPipeline = mlContext.Transforms.Text.FeaturizeText("Text", "Features");
// STEP 3: Set the training algorithm, then create and config the modelBuilder
var trainer = mlContext.BinaryClassification.Trainers.FastTree(labelColumn: "Label", featureColumn: "Features");
var trainingPipeline = dataProcessPipeline.Append(trainer);
2. 训练模型
训练模型是在训练数据(具有已知情绪值)上运行所选算法以调整模型参数的过程。它是在评估器对象的 Fit() 方法中实现。
为了执行训练,您需要在DataView对象中提供了训练数据集(wikipedia-detox-250-line-data.tsv文件)后调用 Fit() 方法。
ITransformer trainedModel = trainingPipeline.Fit(trainingDataView);
请注意,ML.NET使用延迟加载方式处理数据,所以在实际调用.Fit()方法之前,没有任何数据真正加载到内存中。
3. 评估模型
我们需要这一步骤来判定我们的模型对新数据的准确性。 为此,上一步中的模型再次针对另一个未在训练中使用的数据集(wikipedia-detox-250-line-test.tsv)运行。 此数据集也包含了已知的情绪。
Evaluate()比较测试数据集的预测值,并生成各种指标,例如准确性,您可以对其进行浏览。
var predictions = trainedModel.Transform(testDataView);
var metrics = mlContext.BinaryClassification.Evaluate(predictions, "Label", "Score");
ConsoleHelper.PrintBinaryClassificationMetrics(trainer.ToString(), metrics);
如果您对模型的质量不满意,可以通过提供更大的训练数据集,并为每个算法选择具有不同超参数的不同训练算法来尝试改进它。
请记住,对于这个示例,它的质量会低于可能的质量,因为数据集很小,以便可以很快地训练。您应该使用更大的已标记情绪的数据集来显著提高模型的质量。
4. 使用模型
训练完模型后,您可以使用Predict()API来预测新示例文本的情绪。
// Create prediction engine related to the loaded trained model
var predFunction= trainedModel.MakePredictionFunction<SentimentIssue, SentimentPrediction>(mlContext);
//Score
var resultprediction = predFunction.Predict(sampleStatement);
其中resultprediction.PredictionLabel将为True或False,具体取决于它是否被预测为负面或正面的情绪。
ML.NET 示例:二元分类之用户评论的情绪分析的更多相关文章
- ML.NET 示例:目录
ML.NET 示例中文版:https://github.com/feiyun0112/machinelearning-samples.zh-cn 英文原版请访问:https://github.com/ ...
- ML.NET 示例:二元分类之信用卡欺诈检测
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- ML.NET 示例:二元分类之垃圾短信检测
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- ML.NET教程之情感分析(二元分类问题)
机器学习的工作流程分为以下几个步骤: 理解问题 准备数据 加载数据 提取特征 构建与训练 训练模型 评估模型 运行 使用模型 理解问题 本教程需要解决的问题是根据网站内评论的意见采取合适的行动. 可用 ...
- ML.NET 示例:多类分类之鸢尾花分类
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- 机器学习框架ML.NET学习笔记【2】入门之二元分类
一.准备样本 接上一篇文章提到的问题:根据一个人的身高.体重来判断一个人的身材是否很好.但我手上没有样本数据,只能伪造一批数据了,伪造的数据比较标准,用来学习还是蛮合适的. 下面是我用来伪造数据的代码 ...
- 【ML系列】简单的二元分类——Logistic回归
对于了解机器学习中二元分类问题的来源与分析,我认为王树义老师这篇文章讲的非常好,通俗且易懂: http://blog.sciencenet.cn/blog-377709-1121098.html 但王 ...
- ML.NET 示例:开篇
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
- ML.NET 示例:推荐之矩阵分解
写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...
随机推荐
- Android--获取高清的app图标
只有一个方法. public synchronized static Drawable getIconFromPackageName(String packageName, Context conte ...
- servlet及jsp之间的请求转发
1.servlet间的请求转发 <dependencies> <dependency> <groupId>javax.servlet</groupId> ...
- python2 与 python3 如何实现共存
1.现在我本机系统已内置python2.6 2.下载进行源码安装 复制链接下载到 /root/mypackage,解压 接着 mkdir /usr/local/python3 然后在解压后的文件夹内执 ...
- 洗礼灵魂,修炼python(10)--有趣的判断分支+从实例中掌握循环语句
所有的编程语言里都有判断语句和循环语句. 判断语句则是用来分支程序流程的 循环语句则是为了实现一个效果,让程序的规律性的重复操作 不用说,分支和循环自然在python里也是有的 一,条件判断:if,i ...
- Mongo学习---mongo入门1
Docker安装以及设置mongo用户 docker pull mongo (拉取镜像 默认最新版本) docker images (查看镜像) docker run -p 27017:27017 - ...
- Request获取客户端IP
获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了. ...
- Python3编写网络爬虫07-基本解析库pyquery的使用
三.pyquery 简介:同样是一个强大的网页解析工具 它提供了和jQuery类似的语法来解析HTML文档,支持CSS选择器,使用非常方便 安装: pip install pyquery 验证: im ...
- Python 使用 xlwings 往 excel中写入一列数据的两种方法
1.准备一个二维列表,然后再range后面不指定任何选项,可以输出该二维列表中数据在一列中显示,如下代码: # -*- coding:utf-8 -*- import xlwings as xw li ...
- [经验总结] 在 windows 命令窗口中运行 python 脚本时提示 ModuleNotFoundError: No module named 'xxx'
先给出的代码和目录结构 获取CPU代码如下: # -*- coding:utf-8 -*- ''' Created on Sep 10, 2018 @author: ''' import sys im ...
- HTML5原生拖拽事件的值传递(三dataTransfer对象)
引用一篇博客,讲解的比较详细:http://www.tuicool.com/articles/j6Zbam