struct MLTextClassifier (英語)
struct MLWordTagger (英語)
struct MLGazetteer(英語)
struct MLWordEmbedding (英語)
テキスト分類は、自然言語テキスト内のパターン(文によって表現される感情など)を認識するようにトレーニングされた機械学習モデルです。
テキスト分類をトレーニングするには、すでにラベル付けをしたテキストのサンプルを多数見せます。たとえば、ポジティブ、ネガティブ、ニュートラルとしてすでにラベル付けした映画のレビューのサンプルなどです。
まずテキストデータを収集し、 MLData
(英語)インスタンスにインポートします。データテーブルは、JSON形式およびCSV形式から作成できます。また、テキストデータがファイルの集まりである場合は、フォルダ名をラベルとして使用し、ファイルをフォルダに分別します。画像分類モデルの作成で使用した画像データソースの場合と同じです。
例として、感情別に分類した映画のレビューを含む、JSONファイルを考えます。各エントリには、text
キーとlabel
キーのペアが含まれています。それらのキーの値が、モデルのトレーニングに使用される入力サンプルです。以下のJSONスニペットには、「文」と「感情を示すラベル」のペアが 3 つ含まれています。
macOS Playgroundで、MLData
(英語)のinit(contents
(英語)メソッドを使用してデータテーブルを作成します。
この結果生成されるデータテーブルには、JSONファイルのキーから取得された2つの列、textとlabelが含まれます。列の名前は任意ですが、ほかのメソッドでパラメータとして使うことになるので、意味のわかるものにしてください。
モデルのトレーニングに使うデータは、モデルの評価に使うデータとは別のものでなければなりません。MLData
(英語)のrandom
(英語)メソッドを使用してデータを2つのテーブルに分割し、一方をトレーニングに、もう一方をテストに使用します。トレーニング用のデータテーブルにデータの大部分を含め、テスト用のデータには残りの10~20パーセントを含めます。
トレーニングデータのテーブルと列の名前を使って、MLText
(英語)のインスタンスを作成します。トレーニングはすぐに始まります。
トレーニング中、Create MLはトレーニングデータのごく一部を別にしておき、これを使ってトレーニングフェーズ中にモデルの学習状況を検証します。検証データによって、トレーニングされていないサンプルにおけるモデルのパフォーマンスをトレーニングプロセスが測定することができます。検証の精度に応じて、トレーニングアルゴリズムは、モデル内の値を調整したり、精度が十分であればトレーニングプロセスを終了したりします。分割はランダムに行われるため、モデルをトレーニングするたびに異なる結果になる場合があります。
トレーニングデータと検証データでモデルがどれだけ正確に実行したかを確認するには、モデルのtraining
(英語)プロパティとvalidation
(英語)プロパティのclassification
(英語)プロパティを使用します。
次に、以前に見せたことがない文でテストし、トレーニングしたモデルのパフォーマンスを評価します。テスト用のデータテーブルをevaluation(on:)
(英語)メソッドに渡すと、MLClassifier
(英語)インスタンスが返されます。
評価の精度を得るには、返されたMLClassifier
(英語)インスタンスのclassification
(英語)プロパティを使います。
評価のパフォーマンスが不十分な場合は、より多くのデータで再トレーニングを行うか、別の方法で調整する必要があります。モデルのパフォーマンスを高める方法については、モデルの精度の向上を参照してください。
モデルのパフォーマンスが十分になったら、アプリで使えるように保存します。write(to:
(英語)メソッドを使用してCore MLモデルファイル(Sentiment
)をディスクに書き込みます。作者、バージョン、説明など、モデルに関する情報があればMLModel
(英語)インスタンスで提供します。
Xcodeでアプリを開いた状態で、Sentiment
ファイルをナビゲーションペインにドラッグします。Xcodeがモデルをコンパイルし、アプリで使用するためのSentiment
クラスを生成します。XcodeでSentiment
ファイルを選択すると、モデルについての追加情報が表示されます。
Sentiment
からNatural LanguageフレームワークのNLModel
を作成し、トレーニングとデプロイとの間でトークン化が一致していることを確認します。次に、predicted
(英語)を使って、新しいテキスト入力で予測を生成します。
struct MLTextClassifier (英語)
struct MLWordTagger (英語)
struct MLGazetteer(英語)
struct MLWordEmbedding (英語)