• 日常搜索
  • 百度一下
  • Google
  • 在线工具
  • 搜转载

使用Create ML训练文本分类模型

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

乍看上去

什么是机器学习?

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

它是如何使用的?

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

入门

让我们通过实际构建模型来试验机器学习!您需要确保已安装 Xcode 10,以及在您的开发 mac 上运行的 MacOS Mojave。此外,我假设您已经具备 swift、Xcode 和 iOS 开发的一般经验。

图像识别

如果您还没有,请查看我的其他教程,该教程将引导您逐步训练在您的应用程序中使用的图像分类模型。在该教程之后,您将能够训练一个模型,该模型可以区分不同的植物品种和狗的品种,并且可以准确地识别物体。你可以看看这里:

  • 使用Create ML训练文本分类模型  第1张

1. 数据集和 JSON

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

下载文件

为了省去我们为情绪分析模型手动创建训练数据的麻烦,我们在卡内基梅隆大学的朋友为我们提供了一个很棒的免费数据集。我花时间将其转换为 JSON 供您使用。(当然,如果您想自己制作数据集,您可以随时使用自己的数据集。)

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

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

剖析 JSON

如果您还不熟悉 JSON,这很简单。JSONjava的缩写 S cript Object  Notation  顾名思义,它可用于表示对象及其各自的属性。 

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

  • label告诉您指定的句子或短语是肯定的还是否定的。

  • text是要对其进行分析的文本字符串。

有些项目的标签说 Pos,有些说 Neg您可能已经猜到了,它们分别代表 Positive和 Negative

2. 准备数据

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

创建一个新的游乐场

虽然我们大多数人都习惯于创建实际的 iOS 应用程序,但这次我们将前往操场创建我们的机器学习模型。很有趣,不是吗?如果你想一想,它实际上是有道理的——你不需要所有这些额外的文件,而是你只需要一个干净的石板来告诉 Swift 如何创建你的模型。继续创建一个 macOS 操场开始吧。

首先,打开 Xcode。

使用Create ML训练文本分类模型  第2张

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

使用Create ML训练文本分类模型  第3张

并给它一个有用的名字。

使用Create ML训练文本分类模型  第4张

导入框架

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

删除 Playground 中的所有启动代码并输入以下内容:

import CreateML
import Foundation

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

设置数据集

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

将 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:)from 方法 拆分数据MLDataTable

将以下代码行粘贴到您的 Playground 中:

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

L

查看文档, 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关键字尝试实例化 an MLTextClassifier并告诉它调用文本列 "text"和调用标签列 "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,因此请务必将文件路径更改为 希望保存机器学习模型的位置。

测试模型

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

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 的文档


文章目录
  • 乍看上去
    • 什么是机器学习?
    • 它是如何使用的?
    • 入门
    • 图像识别
  • 1. 数据集和 JSON
    • 下载文件
    • 剖析 JSON
  • 2. 准备数据
    • 创建一个新的游乐场
    • 导入框架
    • 设置数据集
      • 将 JSON 转换为MLdataTable
      • 拆分数据
  • 3. 培训和测试
    • 元数据
    • 培训和写作
    • 测试模型
  • 结论