博客
关于我
机器学习框架ML.NET学习笔记【3】文本特征分析
阅读量:453 次
发布时间:2019-03-06

本文共 3868 字,大约阅读时间需要 12 分钟。

一、问题与解决方案

会议记录、垃圾短信检测、工作日志质量分析等任务中,自动评判文本内容的合格性或不合格性是一个重要需求。我们需要通过机器学习模型实现这一目标。以下是我们采取的处理思路和方法。

在本项目中,我们采用二元分类的快速决策树算法作为学习算法。与传统的浮点数特征向量不同,这次的输入特征值是中文文本。因此,我们需要对文本内容进行特征提取处理。

二、文本特征提取的必要性

文本数据是人类语言的符号序列,直接输入计算机算法难以处理。算法通常需要固定长度的数字矩阵作为输入,而文本的可变长度特性使得直接处理难以实现。因此,我们需要对文本进行预处理,提取适合算法输入的特征向量。

三、文本特征提取的方法

在实际开发中,我们采用了以下文本特征提取方法:

  • 分词处理:中文句子中的词语需要通过分词操作进行提取。分词是文本预处理的重要步骤,能够将句子中的语义单元提取出来。
  • 特征向量生成:经过分词后,我们将文本转换为特征向量,这些向量可以作为机器学习模型的输入特征。
  • 在实际代码中,我们采用了Jieba进行分词处理,这是一个开源的中文分词工具,能够高效准确地对中文句子进行分词。

    四、代码实现

    本项目的代码实现主要包含以下几个部分:

  • 数据读取与预处理:从CSV文件中读取数据,进行数据清洗和预处理。
  • 特征提取:使用Jieba进行文本分词,并将分词结果转换为特征向量。
  • 模型构建:基于ML.NET的快速决策树算法构建二元分类模型。
  • 模型训练与评估:对训练数据进行模型训练,并通过测试数据进行模型评估。
  • 模型预测与验证:对样本文本进行预测,验证模型的准确性。
  • 以下是代码的核心实现部分:

    using Microsoft.ML;using Microsoft.ML.Data;using Microsoft.ML.Transforms;using Microsoft.ML.Trainers;namespace BinaryClassification_TextFeaturize{    class Program    {        static readonly string DataPath = Path.Combine(Environment.CurrentDirectory, "Data", "meeting_data_full.csv");        static void Main(string[] args)        {            MLContext mlContext = new MLContext();            var fulldata = mlContext.Data.LoadFromTextFile(                DataPath, separatorChar: ',', hasHeader: false);            var trainTestData = mlContext.Data.TrainTestSplit(fulldata, testFraction: 0.15);            var trainData = trainTestData.TrainSet;            var testData = trainTestData.TestSet;            var trainingPipeline = mlContext.Transforms.CustomMapping(                new JiebaLambdaInput { Text = "JiebaText" },                new JiebaLambdaOutput { JiebaText = "JiebaText" }            )            .Append(mlContext.Transforms.Text.FeaturizeText(                outputColumnName: "Features",                inputColumnName: "JiebaText"            ))            .Append(mlContext.BinaryClassification.Trainers.FastTree(                labelColumnName: "Label",                featureColumnName: "Features"            ));            ITransformer trainedModel = trainingPipeline.Fit(trainData);            var predictions = trainedModel.Transform(testData);            var metrics = mlContext.BinaryClassification.Evaluate(                data: predictions,                labelColumnName: "Label"            );            Console.WriteLine($"Evaluation Accuracy: {metrics.Accuracy:P2}");            var predEngine = mlContext.Model.CreatePredictionEngine(                trainedModel);                        // 示例预测            var sampleStatement1 = new MeetingInfo { Text = "支委会。" };            var predictionResult1 = predEngine.Predict(sampleStatement1);            Console.WriteLine($"{sampleStatement1.Text}:{predictionResult1.PredictedLabel}");            var sampleStatement2 = new MeetingInfo { Text = "开展新时代中国特色社会主义思想三十讲党员答题活动。" };            var predictionResult2 = predEngine.Predict(sampleStatement2);            Console.WriteLine($"{sampleStatement2.Text}:{predictionResult2.PredictedLabel}");            Console.ReadKey();        }    }    public class MeetingInfo    {        [LoadColumn(0)]        public bool Label { get; set; }        [LoadColumn(1)]        public string Text { get; set; }    }    public class PredictionResult : MeetingInfo    {        public string JiebaText { get; set; }        public float[] Features { get; set; }        public bool PredictedLabel { get; set; }        public float Score { get; set; }        public float Probability { get; set; }    }}

    五、代码分析

    本项目的核心学习管道主要包含以下几个步骤:

  • 文本分词:通过自定义的JiebaLambda管道对文本进行分词处理。
  • 特征提取:使用ML.NET的文本特征提取工具将分词结果转换为特征向量。
  • 模型训练:基于快速决策树算法对训练数据进行模型训练。
  • 模型预测:对样本文本进行预测,验证模型的准确性。
  • 六、调试与验证

    为了确保模型的准确性,我们可以通过以下步骤进行调试和验证:

  • 查看预测结果:通过DebugData方法查看训练数据的预测结果,分析模型的输出。
  • 模型性能评估:通过评估指标(如准确率、召回率等)评估模型的性能。
  • 模型优化:根据调试结果调整模型参数,优化模型性能。
  • 通过上述步骤,我们可以全面了解模型的性能表现,并根据需要对模型进行进一步优化。

    七、资源获取

    本项目的完整代码和文档可以在以下链接中找到:

    GitHub Repository

    本项目使用了以下工具和库:

    • Jieba:用于中文文本分词。
    • ML.NET:用于机器学习模型的构建和训练。

    如果需要进一步了解项目实现细节,可以访问上述链接获取完整代码和文档。

    转载地址:http://eejfz.baihongyu.com/

    你可能感兴趣的文章
    NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim教程【十二】
    查看>>
    Nim游戏
    查看>>
    NIO ByteBuffer实现原理
    查看>>