iOS 12 CoreML 机器学习文字分类|自订模型训练实战教学
针对iOS开发者,解析如何利用CoreML 2.0自订并训练文字分类模型,解决文章分类自动化痛点,实现准确率提升与快速部署,助你打造智能分类App功能。
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档
准备好要拿来训练的资料,这里以用Phpmyadmin(Mysql) 汇出训练资料
1
SELECT `title` AS `text`,`type` AS `label` FROM `posts` WHERE `status` = '1'
汇出方式更改成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显示
将JSON档案拉入GUI工具
打开下方Console查看训练进度,看到「测试正确率」这行代表已完成模型训练
资料太多就要考验考验你的电脑处理能力。
填写基本讯息后按「保存」
保存下训练好的模型档案
CoreML 模型档
到此你的模型就已经训练好啰!是不是很容易
具体训练方式:
先将输入的语句做断词(我想知道婚礼需要准备什么=>我想,知道,婚礼,需要,准备,什么),再看他的分类是什么做一连串的机器学习计算。
将训练资料分组,例如: 80% 是拿来训练另外20%是拿来测试验证
到这边已经完成大部分的工作,接下来只要把模型档加入iOS 专案中,写个几行程式就行啰。
将模型档案( * .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)")
}
完工!
待探索问题:
可以支持再学习?
可以将mlmodel模型档转换到其他平台?
能再iOS上训练模型?
以上三点,目前查到的资料是都不行。
结语:
目前我将其应用在实务APP上,做文章发文时预测他的分类
我拿去训练资料约才100笔,目前预测命中率约35%,主要为实验性质而已。
— — — — —
就是这么简单,完成人生中第一个机器学习项目;其中背景如何运作还有很长的路可以学习,希望这个项目能给大家一些启发!
参考资料: WWDC2018之Create ML(二)
有任何问题及指教欢迎 与我联络 。
本文首次发表于 Medium (点击查看原始版本),由 ZMediumToMarkdown 提供自动转换与同步技术。