写在前面

准备近期将微软的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 示例:二元分类之用户评论的情绪分析的更多相关文章

  1. ML.NET 示例:目录

    ML.NET 示例中文版:https://github.com/feiyun0112/machinelearning-samples.zh-cn 英文原版请访问:https://github.com/ ...

  2. ML.NET 示例:二元分类之信用卡欺诈检测

    写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...

  3. ML.NET 示例:二元分类之垃圾短信检测

    写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...

  4. ML.NET教程之情感分析(二元分类问题)

    机器学习的工作流程分为以下几个步骤: 理解问题 准备数据 加载数据 提取特征 构建与训练 训练模型 评估模型 运行 使用模型 理解问题 本教程需要解决的问题是根据网站内评论的意见采取合适的行动. 可用 ...

  5. ML.NET 示例:多类分类之鸢尾花分类

    写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...

  6. 机器学习框架ML.NET学习笔记【2】入门之二元分类

    一.准备样本 接上一篇文章提到的问题:根据一个人的身高.体重来判断一个人的身材是否很好.但我手上没有样本数据,只能伪造一批数据了,伪造的数据比较标准,用来学习还是蛮合适的. 下面是我用来伪造数据的代码 ...

  7. 【ML系列】简单的二元分类——Logistic回归

    对于了解机器学习中二元分类问题的来源与分析,我认为王树义老师这篇文章讲的非常好,通俗且易懂: http://blog.sciencenet.cn/blog-377709-1121098.html 但王 ...

  8. ML.NET 示例:开篇

    写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...

  9. ML.NET 示例:推荐之矩阵分解

    写在前面 准备近期将微软的machinelearning-samples翻译成中文,水平有限,如有错漏,请大家多多指正. 如果有朋友对此感兴趣,可以加入我:https://github.com/fei ...

随机推荐

  1. window服务器上mongodb的安装与如何将mongodb设置为服务,为mongodb设置管理用户,mongodb连接字符串配置

    最近公司有一个项目模块让用nosql-mongodb替换了,故,对mongodb做了一点研究,然后分享一下! 1.首先说一下安装时的坑 下载mongodb,如果你从官网下载,将会是一件很慢的事情,在公 ...

  2. 洗礼灵魂,修炼python(27)--异常处理(1)—>了解异常

    python学到这,其实你应该是在入门到进阶的中间阶段了,但是还没有到进阶的阶段的,这是肯定的,因为进阶得可以从实际问题中解决问题的,比如写一个自动化的爬虫程序啊,对一件事物作大数据归纳分析,开发一个 ...

  3. Excel实用录入技巧

    一.文本录入技巧 输入开头为0的序号 当直接输入单元格中的数字第一个为0时系统会默认去掉 只需要经单元格格式改为文本或者在单元格输入前使用英文状态下的单引号(‘) 例如:'0001 >>& ...

  4. LCD显示异常分析——撕裂(tear effect)【转】

    转自:LCD显示异常分析--撕裂(tear effect) 概述 在上一篇<LCD显示异常分析--开机闪现花屏>中,我们一起分析了开机花屏的问题,在这一篇中,我将对LCD撕裂(tear e ...

  5. js计算两个日期的天数差值

    js计算两个日期的天数差值 通过两个日期计算这两个日期之间的天数差值 /** * 计算天数差的函数,通用 * @param sDate1 * @param sDate2 * @returns {Num ...

  6. lvm管理卷之缩减卷大小

    最近刚刚装好了一个系统,但是因为没有分好区,导致home分区过大,所以想把home分区的一大半移动到根分区里面. 1.先说一下我的环境. 安装的是centos6版本的系统,使用的默认文件系统是ext4 ...

  7. 实验吧web解题记录

    自以为sql注入掌握的还是比较系统的,然而,做了这些题之后才发现,大千世界无奇不有,真是各种猥琐的思路...还是要多学习学习姿势跟上节奏 登录一下好吗?? http://ctf5.shiyanbar. ...

  8. ccf--20151203--画图

    本题思路如下: 题目和代码如下: 问题描述 试题编号: 201512-3 试题名称: 画图 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 用 ASCII 字符来画图是一件有趣 ...

  9. java用星星符号打印出一个直角三角形

    package debug; public class Demo10 { public static void main(String[] args) { //用星星符号打印出一个直角三角形 for( ...

  10. 从头学Android之RelativeLayout相对布局

    http://blog.csdn.net/worker90/article/details/6893246 相对布局对于做Web开发来说再熟悉不过了,我们在用CSS+DIV的时候经常会用到这些类似的相 ...