Swift NaturalLanguage 框架错误“令牌序列类型长度为 0”

Posted

技术标签:

【中文标题】Swift NaturalLanguage 框架错误“令牌序列类型长度为 0”【英文标题】:Swift NaturalLanguage framework error “Token SequenceType length is 0" 【发布时间】:2019-02-01 08:34:54 【问题描述】:

我目前正在使用 Apple 的 CreateML 从我拥有的 JSON 文件生成 NLP 模型。这是我的代码:

import Foundation
import CreateML
import NaturalLanguage

let trainingData = try MLDataTable(contentsOf: Bundle.main.url(forResource: "Fel", withExtension: "json")!)
let model = try MLWordTagger(trainingData: trainingData, tokenColumn: "tokens", labelColumn: "labels")
let metadata = MLModelMetadata(author: "Sai Kambampati", shortDescription: "The Felicity Named Entity Recognizer", license: "MIT", version: "1.0")
try model.write(to: URL(fileURLWithPath: "/Users/SaiKambampati/Desktop/Felicity.mlmodel"), metadata: metadata)

JSON 文件有 116,096 行,Xcode 能够正确解析它。它从 5% 的数据中生成了一个验证集。然而,当它开始标记数据和提取特征时,我收到一条错误消息:

▿ MLCreateError ▿ generic : 1 element - reason : "Token SequenceType length is 0”

我不知道这意味着什么,也无法在网上找到任何东西!有人可以帮忙吗?

【问题讨论】:

【参考方案1】:

您的 JSON 文件必须采用这种格式才能使用 MLWordTagger 的 tokenColumn 参数。标记为字符串列表,标签为字符串列表。

[
    
      "tokens": [
        "Aprender",
        "a",
        "realizar",
        "Aquisição",
        "de",
        "usuários"
      ],
      "labels": [
        "GENERIC_ACTION",
        "NONE",
        "ACTION",
        "TOPIC",
        "NONE",
        "NONE"
      ]
    , ...

【讨论】:

当我的token 数组之一为空时,我遇到了这个问题。

以上是关于Swift NaturalLanguage 框架错误“令牌序列类型长度为 0”的主要内容,如果未能解决你的问题,请参考以下文章

[Swift]使用Alamofire传递参数时报错

我如何继续使用 Swift 2.3 而不是 3.0,Xcode 已更新且无法再构建

在另一个 Swift 项目中使用自定义 Swift 框架

在 swift 项目中集成 swift 框架,都使用 cocoapods

swift 框架moya post请求遇到的坑

开源框架 RSA_Swift