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 ...
随机推荐
- synchronized的锁问题
有一个类A,提供了三个方法.分别是静态同步方法,非静态同步方法,含有静态代码块的方法 1 class A{ 2 public static synchronized void print1(){ 3 ...
- django学习之命令
1.启动一个django项目: $ django-admin startproject <project-name> 2.创建一个应用: $ python manage.py starta ...
- const int *p 和int * const p 的区别
看例子: int sloth = 3; const int *p1 = &sloth; int * p2 const = &sloth; 这样申明的话,不允许使用p1来修改sloth的 ...
- Can't debug c++ project because unable to static library start program *.lib
Can't debug c++ project because unable to static library start program *.lib I'm using a library ( ...
- Nginx日志格式log_format详解
PS:Nginx日志相关指令主要有两条,一条是log_format,用来设置日志格式,另外一条是access_log,用来指定日志文件的存放路径.类型.缓存大小等,一般放在Nginx的默认主配置文件/ ...
- HTML 中点击<a>标签,页面跳转执行过程
HTML链接使用的是<a>标签 点击超链接,后台的执行大致如下: <a href="https://www.baidu.com">超链接</a> ...
- python五十六课——正则表达式(常用函数之search())
函数:search(regex,string,[flags=0]):参数:和match一样理解功能:从头开始匹配字符串中的数据,如果头不匹配继续往后尝试匹配,直到有第一个匹配成功的子数据,立即返回一个 ...
- 【洛谷】【搜索(dfs)】P3956 棋盘
题目传送门:戳 题目描述: 有一个 \(m * m\) 的棋盘,棋盘上每一个格子可能是红色.黄色或没有任何颜色的.你现在要从棋盘的最左上角走到棋盘的最右下角. 任何一个时刻,你所站在的位置必须是有颜色 ...
- P1057 传球游戏
题目描述 上体育课的时候,小蛮的老师经常带着同学们一起做游戏.这次,老师带着同学们一起做传球游戏. 游戏规则是这样的: nnn 个同学站成一个圆圈,其中的一个同学手里拿着一个球,当老师吹哨子时开始传球 ...
- day03---基本数据类型、运算符、与用户交互
day03 基本数据类型: 数据类型指的是变量值的类型,变量值之所以区分类型,是因为变量值是用来记录一种事物的状态,而不同的事物有不同的事物状态,对应着也必须必须用不同的变量类型去衡量. 分类: 数字 ...