CoreMLで記事分類を自動予測|iOS 12でモデル自作&活用法を徹底解説
iOS開発者向けにCoreML 2.0を使ったモデル変換と自作トレーニングの方法を紹介。機械学習で記事分類を自動化し、実用的なアプリ開発を実現します。
本記事は AI による翻訳をもとに作成されています。表現が不自然な箇所がありましたら、ぜひコメントでお知らせください。
記事一覧
iOS 12 CoreMLを試す — 機械学習で記事分類を自動予測、モデルも自分で訓練!
CoreML 2.0を探る:モデルの変換や訓練、そして実際の製品への応用方法
接続 前回の記事 に続き、iOSでの機械学習の研究について、本稿では正式にCoreMLの使用に入ります。
まず歴史を簡単に説明すると、Appleは2017年にCoreML(前回の記事で紹介したVisionを含む)機械学習フレームワークを発表しました。2018年にはCoreML 2.0をリリースし、性能向上に加え、カスタムCoreMLモデルの作成もサポートしました。
はじめに
もし「機械学習」という言葉を聞いたことはあるが意味がよくわからない場合、ここで一言で簡単に説明します:
「過去の経験に基づいて未来の同じ事象の結果を予測する」
例えば:私は卵クレープにケチャップをかけます。何度か買いに行くと、朝食店の店主の女性は覚えていて、「イケメン、ケチャップつける?」と聞いてきます。私が「はい」と答えると、店主の女性の予測は正しいです。もし「いいえ、なぜなら大根餅+卵クレープだから」と答えると、店主の女性はそれを覚えて、次回同じ状況で予測を修正します。
入力データ:蛋餅、チーズ蛋餅、蛋餅+大根餅、大根餅、卵
出力データ:ケチャップをかける/かけない
モデル:女将の記憶と判断
実は私も機械学習については、概念や理論を単に知っているだけで、実際に深く理解したことはありません。もし間違いがあれば、どうぞご指導ください。
ここでぜひアップルの神様に感謝🙏を捧げたいです。機械学習を製品化し、基本的な概念さえわかれば操作できるようにして、膨大な知識がなくても始められる敷居を下げてくれました。私自身もこのサンプルを実装して初めて、機械学習に触れた実感が湧き、この分野に強い興味を持つようになりました。
開始
最初のステップで最も重要なのは、前述した「モデル」です。モデルはどこから来るのでしょうか?
三つの方法があります:
- ネットで他人が訓練したモデルを探し、CoreML形式に変換する
Awesome-CoreML-Models このGitHubプロジェクトは、多くの他人が訓練したモデルを集めています。
モデル変換については、公式サイト やネットの情報を参照してください。
蘋果 Machine Learning公式サイト の最下部にある Download Core ML Models から、アップルが訓練したモデルをダウンロードできます(主に学習やテスト用です)
ツールを使って自分でモデルを訓練🏆
だから、何ができるのか?
画像認識 🏆
テキスト内容分類🏆
文字の分割
文字言語の判定
固有表現抽出
分かち書きについては iOSアプリでの自然言語処理入門: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":"PHPMyAdmin用のJSONエクスポートプラグイン"},
{"type":"database","name":"db"},
{"type":"table","name":"posts","database":"db","data":
//以上削除
[
{
"label":"",
"text":""
}
]
//以下削除
}
]
ダウンロードしたJSONファイルを開き、中央のDATA構造の内容だけを残す
訓練ツールの使用:
トレーニングツールをダウンロードしたら、TextClassifer.playground をクリックしてPlaygroundを開きます。
赤枠をクリックして実行 -> 緑枠をクリックしてビュー表示を切り替え
JSONファイルをGUIツールにドラッグ&ドロップする
下のコンソールを開いて訓練の進行状況を確認し、「テスト正答率」という行が表示されたらモデルの訓練が完了しています。
データが多すぎると、あなたのコンピュータの処理能力が試されます。
基本情報を入力した後、「保存」を押してください
訓練済みのモデルファイルを保存する
CoreML モデルファイル
これでモデルの訓練は完了です!とても簡単ですよね。
具体的なトレーニング方法:
まず入力された文章を形態素解析します(例:「我想知道婚禮需要準備什麼」→「我想」「知道」「婚禮」「需要」「準備」「什麼」)。その後、分類を確認し、一連の機械学習計算を行います。
訓練データをグループ分けします。例えば、80%を訓練用、残りの20%をテスト・検証用に使います。
ここまででほとんどの作業が完了しました。あとはモデルファイルをiOSプロジェクトに追加して、数行のコードを書くだけです。
{: lqip=”data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNDAwIiBoZWlnaHQ9IjgzMSI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgZmlsbD0iZ3JleSIvPjwvc3ZnPg==” }
モデルファイル(*.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上でモデルを訓練できますか?
以上の三点について、現在調べたところ、すべて不可能です。
結論:
現在、実務アプリで記事投稿時の分類予測に応用しています。
訓練に使用したデータは約100件で、現在の予測精度は約35%です。主に実験目的です。
— — — — —
これだけで簡単に、人生で最初の機械学習プロジェクトを完成させました。背景でどのように動作しているかはまだ学ぶべきことがたくさんありますが、このプロジェクトが皆さんの参考になれば幸いです!
参考資料: WWDC2018のCreate ML(二)
ご質問やご意見がありましたら、こちらからご連絡ください 。
*Post MediumからZMediumToMarkdownによって変換されました。
本記事は Medium にて初公開されました(こちらからオリジナル版を確認)。ZMediumToMarkdown による自動変換・同期技術を使用しています。








