机器学习很棒,但是很难在移动应用程序中实现。 对于没有数据科学学位的人尤其如此。 但是,借助Core ML,Apple可以轻松地将机器学习功能添加到您现有的iOS应用程序中。 了解如何使用全新的Create ML平台来训练轻量级的自定义神经网络。

乍看上去

什么是机器学习?

机器学习是使用统计分析来帮助计算机根据数据中的特征做出决策和预测。 换句话说,这是让计算机解析数据流以形成对其的抽象理解(称为“模型”),然后使用该模型与更新的数据进行比较的行为。

如何使用?

手机上许多您喜欢的应用程序可能都使用了机器学习。 例如,当您键入消息时,自动更正会使用机器学习模型来预测您接下来要键入的内容,该模型会在您键入时不断更新。 此外,Siri,Alexa和Google Assistant等虚拟助手完全依赖于机器学习来模仿人类行为。

入门

让我们通过实际构建模型来尝试机器学习! 您需要确保已安装Xcode 10,以及在开发Mac上运行的macOS Mojave。 此外,我假设您已经具有Swift,Xcode和iOS开发的总体经验。

图像识别

1.数据集和JSON

您可能想知道:在文本分类模型中,数据集将是什么? 该问题的答案取决于您的目标。 例如,如果您想训练一个告诉您文本字符串是否为垃圾邮件的模型,则将有一大堆预先分类的字符串。

下载文件

为了节省我们为情感分析模型手动创建训练数据的需要,卡内基梅隆大学的朋友们为我们提供了一套精美的免费数据集。 我已花时间将其转换为JSON供您使用。 (当然,如果您想自己制作一个,则可以始终使用自己的数据集。)

继续并从我们的GitHub存储库下载训练数据JSON文件 。 单击下载并将文件保存到您自己的计算机。 (请注意,我们已经从该数据集的版本中删除了一些令人反感的语言。但是,如果您正在训练生产机器学习系统,则需要使用整个语料库,包括可能令人反感的评论。)

大! 现在它已经在您的计算机上了,让我们仔细看一下文件显示的内容。

剖析JSON

如果您还不熟悉JSON,这很简单。 JSON为的J ava 小号 CRIPTöbjectÑ浮选的缩写,和顾名思义,它是用于表示对象及其相应的特性是有用的。

在您刚刚下载的文件中,您会看到每个项目都有两个属性:

  • label告诉您指定的句子或短语是肯定的还是否定的。
  • text是要对其进行分析的文本字符串。

某些商品的标签上写着Pos ,另外一些商品上说Neg 。 您可能已经猜到了,它们分别代表PositiveNegative

2.准备数据

因此,让我们深入研究并实际创建模型。 听到您的大部分工作已经完成,您可能会感到惊讶! 现在,我们剩下要做的就是编写一些代码,然后将Swift和Xcode投入使用,为我们做魔术。

创建一个新的游乐场

虽然我们大多数人习惯于创建实际的iOS应用程序,但这次我们将前往游乐场创建我们的机器学习模型。 有趣,不是吗? 如果您考虑一下,它实际上是有道理的-您不需要所有这些额外的文件,而是只需要一个干净的表盘即可告诉Swift如何创建模型。 继续并创建一个macOS游乐场以开始。

首先,打开Xcode。

图2打开Xcode

然后创建一个新的游乐场。

图3创建一个游乐场

并给它一个有用的名字。

图4命名游乐场

导入框架

当然,在开始之前,我们需要导入适当的框架。 如果您看过我以前有关训练图像分类模型的教程,那么您会发现我们的import语句会稍有不同。 为什么? 因为这次我们没有可使用的用户界面-只是纯代码!

删除操场上所有的入门代码,然后输入以下内容:

import CreateML
import Foundation

我们需要两者的原因是,我们将使用URL来告诉Create ML我们的数据集在哪里以及我们希望将结果模型存储在哪里,并且URLFoundation框架中可用。

设置数据集

现在,是时候设置所有数据并准备训练模型了。

将JSON转换为MLDataTable

首先,我们需要告诉Create ML在哪里可以找到我们的JSON文件。 在此示例中,我的文件夹位于我的下载文件夹中,您的文件夹也可能位于我的下载文件夹中。

输入以下代码行:

let dataset = try MLDataTable(contentsOf: URL(fileURLWithPath: "/Users/vardhanagrawal/Downloads/sentiment_analysis.json"))

但是,您需要确保将fileURLWithPath参数设置为JSON文件所在的位置,而不是我的位置。 在这里,我们使用提供的JSON文件中的信息来创建数据表 ,并将其存储在名为dataset的常量中。

分割数据

正如我在使用Create ML训练图像分类模型中提到的,优良作法是将数据集分为两类:一类用于训练模型而一类用于测试。 由于您希望最大程度地关注实际模型,因此应将数据集的80%用于训练,而应保存其他20%的数据以确保一切正常进行。 毕竟,这也很重要!

如果您看过以前的教程,您可能会发现这个概念很熟悉。 如果您没有的话,它只是包含在这里。 本质上,我们将使用randomSplit(by:seed:)方法MLDataTable

将以下代码行粘贴到操场上:

let (trainingData, testingData) = data.randomSplit(by: 0.8, seed: 5)

查看文档, randomSplit(by:seed:)返回一个元组,其中包含两个MLDataTables 。 我们将它们存储为(trainingData, testingData) ,将数据集的80%放置在trainingData ,将20%放置在testingData

3.培训和测试

现在,您的数据已全部设置好并准备就绪,是时候对该数据进行最终训练并测试最终的模型了。

元数据

信不信由你,培训是整个过程中最简单的部分。 首先,您需要使用MLModelMetadata定义元数据。 您可以通过编写以下代码行来做到这一点:

let metadata = MLModelMetadata(author: "Vardhan Agrawal", shortDescription: "This model analyzes the sentiment of a given string.", version: "1.0")

在这里,您可以输入您的名字作为author ,一个有用的description ,以及version号。 当您在Xcode中预览模型时,将显示此数据。

培训与写作

现在,您需要根据数据集创建一个分类器。 您需要输入以下代码行:

let sentimentAnalysisClassifier = try MLTextClassifier(trainingData: trainingData, textColumn: "text", labelColumn: "label")

这使用try关键字尝试实例化MLTextClassifier并告诉它text列称为"text" ,而label列称为"label" 。 这是指JSON文件中存在的字段名称。

最后,您需要将分类器写入计算机上的某个位置。 如果一切顺利,您将在此步骤选择的位置找到.mlmodel文件。 输入以下代码行:

do {
    try sentimentAnalysisClassifier.write(to: URL(fileURLWithPath:
        "/Users/vardhanagrawal/Desktop/SpamDetector.mlmodel"), 
        metadata: metadata)
} catch {
    print("Something went wrong, please try again!")
}

我们将write(to:)方法包装在do-catch块中,以便我们知道是否出了问题。 或者,您可以先说try然后再调用此方法,因为两种方法都可以。 不要忘了,你可能没有一个用户名为vardhanagrawal您的计算机上,所以一定要更改文件路径, 希望您的机器学习模型保存。

测试模型

完成培训后,您将在操场的控制台中看到一些输出。 它看起来像这样:

Parsing JSON records from /Users/vardhanagrawal/Downloads/sentiment_analysis.json
Successfully parsed 479 elements from the JSON file /Users/vardhanagrawal/Downloads/sentiment_analysis.json
Automatically generating validation set from 5% of the data.
Tokenizing data and extracting features
50% complete
100% complete
Starting MaxEnt training with 360 samples
Iteration 1 training accuracy 0.341667
Iteration 2 training accuracy 0.858333
Iteration 3 training accuracy 0.991667
Iteration 4 training accuracy 0.994444
Finished MaxEnt training in 0.01 seconds
Trained model successfully saved at /Users/vardhanagrawal/Desktop/SpamDetector.mlmodel.

这实际上告诉您的是,它是从JSON文件中解析数据,以一定的精度对其进行训练,然后将模型保存在指定的位置。 由于您已经为早期训练预留了一些数据集,因此该模型已经告诉您此控制台代码段的准确性。

在Xcode项目中,您需要做的就是拖动模型并输入以下代码行以从模型中获取输出:

import NaturalLanguage

let sentimentAnalysisClassifier = try NLModel(mlModel: 
    SentimentClassifier().model)
sentimentAnalysisClassifier.predictedLabel(for: 
    "It was the best I've ever seen!")

这将允许您测试模型并在应用程序中使用它。

结论

在本教程中,您学习了如何导入JSON文件,创建自定义文本分类器,然后在Xcode项目中使用它。 要了解有关此主题的更多信息并查看您在这里学到的知识,建议您查阅Apple的文档

当您在这里时,可以在Envato Tuts +上查看我们其他一些很棒的机器学习内容

翻译自: https://code.tutsplus.com/articles/train-a-text-classification-model-with-create-ml--cms-32030

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐