嚐鮮 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訓練工具,文字的要自己寫;這是由網路大神提供的第三方工具)
準備訓練資料:
準備好要拿來訓練的資料,這裡以用Phpmyadmin(Mysql) 匯出訓練資料
SELECT `title` AS `text`,`type` AS `label` FROM `posts` WHERE `status` = '1'
[
{"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
資料太多就要考驗考驗你的電腦處理能力。
保存下訓練好的模型檔案
到此你的模型就已經訓練好囉!是不是很容易
具體訓練方式:
- 先將輸入的語句做斷詞(我想知道婚禮需要準備什麼=>我想,知道,婚禮,需要,準備,什麼),再看他的分類是什麼做一連串的機器學習計算。
- 將訓練資料分組,例如: 80% 是拿來訓練另外20%是拿來測試驗證
到這邊已經完成大部分的工作,接下來只要把模型檔加入iOS 專案中,寫個幾行程式就行囉。
程式部分:
import CoreML
//
if #available(iOS 12.0, *),let prediction = try? textClassifier().prediction(text: "要預測的文字內容") {
let type = prediction.label
print("我覺得是...\(type)")
}
完工!
待探索問題:
- 可以支持再學習?
- 可以將mlmodel模型檔轉換到其他平台?
- 能再iOS上訓練模型?
以上三點,目前查到的資料是都不行。
結語:
目前我將其應用在實務APP上,做文章發文時預測他的分類
我拿去訓練資料約才100筆,目前預測命中率約35%,主要為實驗性質而已。
— — — — —
就是這麼簡單,完成人生中第一個機器學習項目;其中背景如何運作還有很長的路可以學習,希望這個項目能給大家一些啟發!
有任何問題及指教歡迎與我聯絡。