Post

iOS 12 CoreML 机器学习文字分类|自订模型训练实战教学

针对iOS开发者,解析如何利用CoreML 2.0自订并训练文字分类模型,解决文章分类自动化痛点,实现准确率提升与快速部署,助你打造智能分类App功能。

iOS 12 CoreML 机器学习文字分类|自订模型训练实战教学

Click here to view the English version of this article.

點擊這裡查看本文章正體中文版本。

基于 SEO 考量,本文标题与描述经 AI 调整,原始版本请参考内文。


尝鲜 iOS 12 CoreML — 使用机器学习自动预测文章分类,连模型也自己训练!

探索CoreML 2.0,如何转换或训练模型及将其应用在实际产品上

接续 上一篇 针对在 iOS上使用机器学习的研究,本篇正式切入使用CoreML

首先简述一下历史,苹果在2017年发布了CoreML(包含上篇文章介绍的Vision) 机器学习框架;2018紧接著推出CoreML 2.0,除 效能提升 外还支援 自订客制化CoreML模型

前言

如果你只是听过「机器学习」这个名词而不清楚他的意思的话,这边用一句话简单说明:

「依照你过往的经验去预测未来同样事情的结果」

例如:我吃蛋饼要加番茄酱,买过几次后早餐店老板娘就会记得,「帅哥,加番茄酱?」我回答:「是」 — 老板娘预测正确;若回答「不是,因为是萝卜糕+蛋饼」 — 老板娘记得并再下次遇到相同情况修正他的问题.

输入的资料:蛋饼、起司蛋饼、蛋饼+萝卜糕、萝卜糕、蛋

输出的资料:要加番茄酱/不加番茄酱

模型:老板娘的记忆跟判断

其实我对机器学习的认知,也是在纯粹知道概念理论,但没实际深入了解过,如有错误请大家多多指教

提到这就要顺便拜🛐一下苹果大神,把机器学习产品化,只要知道基本概念就能操作,不用具备庞大的知识基础,降低入门门槛,我自己也是在实作过这个范例后,才第一次觉得有接触到机器学习的踏实感,让我对这个项目产生很大的兴趣.

开始

第一步,最重要的当然是前面所提到的「模型」,模型从哪来呢?

有三种方式:

  • 网路找别人训练好的模型并转成CoreML的格式

Awesome-CoreML-Models 这个GitHub专案搜集很多别人训练好的模型

模型转换可参考 官网 或网路资料

  • 苹果 Machine Learning官网 最下方的 Download Core ML Models ,可以下载苹果帮我们训练好的模型 (主要是拿来学习或测试而已)

  • 运用工具自己训练模型🏆

所以,能做什么?

  • 图片辨识 🏆

  • 文字内容识别分类🏆

  • 文字断词

  • 文字语言判断

  • 名词识别

断词请参考 在 iOS App 中进行自然语言处理:初探 NSLinguisticTagger

今日主要重点 — 文字内容识别分类+ 自己训练模型

讲白话就是,我们给机器「文字内容」跟「分类」训练电脑对未来的资料做分类.例如:「点击查看最新优惠!」、「1000$购物金马上领」=>「广告」;「Alan发送一则讯息给您」、「您的帐户即将到期」=>「重要事项」

实际应用:垃圾信件判别、标签产生、分类预测

p.s 由于图片辨识我还没想到能训练它做什么,所以就没去研究了;有兴趣的朋友可以看 这篇 ,官方有提供图片的GUI训练工具 很方便!!

需求工具: MacOS Mojave⬆ + Xcode 10

训练工具: BlankSpace007/TextClassiferPlayground (官方只提供 图片的GUI训练工具 ,文字的要自己写;这是由网路大神提供的第三方工具)

准备训练资料:

资料结构如上图,支援.json,.csv档

资料结构如上图,支援.json,.csv档

准备好要拿来训练的资料,这里以用Phpmyadmin(Mysql) 汇出训练资料

1
SELECT `title` AS `text`,`type` AS `label` FROM `posts` WHERE `status` = '1'

汇出方式更改成JSON格式

汇出方式更改成JSON格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[
  {"type":"header","version":"4.7.5","comment":"Export to JSON plugin for PHPMyAdmin"},
  {"type":"database","name":"db"},
  {"type":"table","name":"posts","database":"db","data":
    //以上删除
    [
      {
         "label":"",
         "text":""
      }
    ]
    //以下删除
  }
]

打开刚下载的JSON档案,只留下中间DATA结构里的内容

使用训练工具:

下载好训练工具后,点击 TextClassifer.playground 打开 Playground

点击红匡执行->点击绿匡切换View显示

点击红匡执行->点击绿匡切换View显示

将JSON档案拉入GUI工具

将JSON档案拉入GUI工具

打开下方Console查看训练进度,看到「测试正确率」这行代表已完成模型训练

打开下方Console查看训练进度,看到「测试正确率」这行代表已完成模型训练

资料太多就要考验考验你的电脑处理能力。

填写基本讯息后按「保存」

填写基本讯息后按「保存」

保存下训练好的模型档案

CoreML 模型档

CoreML 模型档

到此你的模型就已经训练好啰!是不是很容易

具体训练方式:

  1. 先将输入的语句做断词(我想知道婚礼需要准备什么=>我想,知道,婚礼,需要,准备,什么),再看他的分类是什么做一连串的机器学习计算。

  2. 将训练资料分组,例如: 80% 是拿来训练另外20%是拿来测试验证

到这边已经完成大部分的工作,接下来只要把模型档加入iOS 专案中,写个几行程式就行啰。

将模型档案( * .mlmodel) 拖曳/加入专案之中

将模型档案( * .mlmodel) 拖曳/加入专案之中

程式部分:

1
2
3
4
5
6
7
import CoreML

//
if #available(iOS 12.0, *),let prediction = try? textClassifier().prediction(text: "要预测的文字内容") {
    let type = prediction.label
    print("我觉得是...\(type)")
}

完工!

待探索问题:

  1. 可以支持再学习?

  2. 可以将mlmodel模型档转换到其他平台?

  3. 能再iOS上训练模型?

以上三点,目前查到的资料是都不行。

结语:

目前我将其应用在实务APP上,做文章发文时预测他的分类

[结婚吧APP](https://itunes.apple.com/tw/app/%E7%B5%90%E5%A9%9A%E5%90%A7-%E4%B8%8D%E6%89%BE%E6%9C%80%E8%B2%B4-%E5%8F%AA%E6%89%BE%E6%9C%80%E5%B0%8D/id1356057329?ls=1&mt=8){:target="_blank"}

结婚吧APP

我拿去训练资料约才100笔,目前预测命中率约35%,主要为实验性质而已。

— — — — —

就是这么简单,完成人生中第一个机器学习项目;其中背景如何运作还有很长的路可以学习,希望这个项目能给大家一些启发!

参考资料: WWDC2018之Create ML(二)

有任何问题及指教欢迎 与我联络


Buy me a beer

本文首次发表于 Medium (点击查看原始版本),由 ZMediumToMarkdown 提供自动转换与同步技术。

Improve this page on Github.

This post is licensed under CC BY 4.0 by the author.