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

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

嚐鮮 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(二)

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

===

本文首次發表於 Medium ➡️ 前往查看


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

Vision 初探 — APP 頭像上傳 自動識別人臉裁圖 (Swift)

提升使用者體驗,現在就為您的 iOS APP 加上 3D TOUCH 功能(Swift)