zoukankan      html  css  js  c++  java
  • iOS

    一、前言

      前面一篇博文简单的通过官方文档来了解了下机器学习是什么,以及简单的文字筛选Demo,但是我在实际执行过程中遇到的些问题,在这里抛出来。

    二、训练源

      我准备做出一个可以识别影评是好评、差评还是中评的机器学习模型。

      这是我准备的数据:

    [
        {
            "text":"这部电影真好看",
            "label":"好评"
        },
        {
            "text":"太烂了",
            "label":"差评"
        },
        {
            "text":"一般般,不算差也不算好",
            "label":"中评"
        },

      然后当我在playground里面执行这句代码的时候:

    //训练源地址
    let data = try MLDataTable(contentsOf: URL(fileURLWithPath: "/Users/sunjiaqi/Desktop/data.json"))
    
    //导入训练源数据
    let sentimentClassifier = try MLTextClassifier(trainingData: data, textColumn:"text",
    labelColumn: "label")

      报错了,

      经过一番查找资料后得知,Creater ML 是不支持中文输入的,这就很坑。

      那怎么办呢,有办法,将中文转成UTF-16编码,这个编码后的汉字就变成一个又一个数字了,也就可以进行训练了

      文字转UTF16编码和导出JSON文件的代码奉上

    NSMutableArray *textList = [[NSMutableArray alloc] init];
        // 获取文件路径
        NSString *path = [[NSBundle mainBundle] pathForResource:@"data" ofType:@"json"];
        // 将文件数据化
        NSData *data = [[NSData alloc] initWithContentsOfFile:path];
        NSArray *dataPathList = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
        [dataPathList enumerateObjectsUsingBlock:^(NSDictionary *obj, NSUInteger idx, BOOL * _Nonnull stop) {
            NSString *moviceContent = obj[@"text"];//影评内容
            NSString *moviceType = obj[@"label"];//影评类型
            moviceContent = [moviceContent stringByReplacingPercentEscapesUsingEncoding:NSUTF16StringEncoding];
            NSDictionary *dict = @{@"text":moviceContent,@"label":moviceType};
            [textList addObject:dict];
        }];
        
        //将数组转成JSON写入文件
        NSData *whirtData =[NSJSONSerialization dataWithJSONObject:textList options:NSJSONWritingPrettyPrinted error:0];
        [whirtData writeToFile:@"/Users/zhaowenjuan/Desktop/apps2.json" atomically:YES];

      注:很多人会问,为啥这里的代码又用OC来写了,我只想说我用OC习惯点,这段代码很简单,会swift的也可以轻易的转出来。

      数据终于准备好了,开始训练吧。

    三、使用

      模型的训练与导出没有什么可说的了,就那固定的几行代码

      关键是该怎么使用。

      1、将模型直接拖入项目中,打开模型的话会看见一个文件的快捷入口,这个头文件就是自动生成的,里面有调用模型的方法。

      2、构建一个模型的方法

    - (nullable MCContentFilter *)model {
        auto bundle = [NSBundle bundleForClass:MCContentFilter.class];
        auto mlmodelcURL = [bundle URLForResource:@"MCContentFilter" withExtension:@"mlmodelc"];
        if (mlmodelcURL) {
            return [MCContentFilter new];
        }
    
        auto modelPath = [bundle pathForResource:@"MCContentFilter" ofType:@"mlmodel"];
        if (!modelPath) return nil;
    
        auto modelURL = [NSURL fileURLWithPath:modelPath];
        mlmodelcURL = [MLModel compileModelAtURL:modelURL error:nil];
        if (!mlmodelcURL) return nil;
    
        auto model = [[MCContentFilter alloc] initWithContentsOfURL:mlmodelcURL error:nil];
        return model;
    }

      用法

    auto model = [self model];

      注:auto 自动类型推导

      3、调用模型方法

    model predictionFrom

      类似于这样的方法。

      模型的作用只是做出判断,它不关心你是中文还是英文,它都看不懂,它只能根据你给的数据规则来判断和匹配,随意生成训练源数据这步非常重要!

      demo过段时间再整理吧,今天太晚了,晚安。

      

  • 相关阅读:
    关于RAS加密中pfx格式提取字符串私钥 (转)
    Oracle冷备份和热备份的实践(原创)
    数据库的备份与恢复(oracle 11g) (转)
    Oracle安装-------实例化EM 配置文件时出错问题 ( 转 )
    oracle表空间维护常用命令
    使用Navicat for Oracle新建表空间、用户及权限赋予 (转)
    【JavaScript】JavaScript模块化编程
    【随笔】入行必读:互联网行业薪酬等级
    【JavaScript】JavaScript Promise 探微
    【Java】关于并发
  • 原文地址:https://www.cnblogs.com/qiyiyifan/p/12178797.html
Copyright © 2011-2022 走看看