嚐鮮 iOS 12 CoreML — 使用機器學習自動預測文章分類,連模型也自己訓練!

ZhgChgLi
ZRealm Dev.
Published in
6 min readOct 17, 2018

--

探索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) 匯出訓練資料

SELECT `title` AS `text`,`type` AS `label` FROM `posts` WHERE `status` = '1'
匯出方式更改成JSON格式
[
{"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 模型檔

到此你的模型就已經訓練好囉!是不是很容易

具體訓練方式:

  1. 先將輸入的語句做斷詞(我想知道婚禮需要準備什麼=>我想,知道,婚禮,需要,準備,什麼),再看他的分類是什麼做一連串的機器學習計算。
  2. 將訓練資料分組,例如: 80% 是拿來訓練另外20%是拿來測試驗證

到這邊已經完成大部分的工作,接下來只要把模型檔加入iOS 專案中,寫個幾行程式就行囉。

將模型檔案(*.mlmodel) 拖曳/加入專案之中

程式部分:

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

我拿去訓練資料約才100筆,目前預測命中率約35%,主要為實驗性質而已。

— — — — —

就是這麼簡單,完成人生中第一個機器學習項目;其中背景如何運作還有很長的路可以學習,希望這個項目能給大家一些啟發!

參考資料:WWDC2018之Create ML(二)

有任何問題及指教歡迎與我聯絡

--

--

ZhgChgLi
ZRealm Dev.

探索世界、求知若渴、教學相長;更愛電影、美劇、西音、運動、生活. www.zhgchg.li