我希望使用create框架创建一个具有一个特性和三个目标的MLDataTable。例如,让我们假设我正在创建一个日历应用程序,它具有添加快速事件的功能,比如本地应用程序。我有一个功能专栏文本,其中包含字符串,如俱乐部在尼赫鲁体育场,陈奈星期六上午比赛。我要三个目标栏目标题,位置和时间得到价值俱乐部的比赛,尼赫鲁球场,钦奈和2018年11月24日,08:00。
另外,请告诉我是否有其他方法使用CreateML框架实现相同的功能。
发布于 2018-12-09 18:14:21
你可以训练MLWordTagger来完成这个任务。以这种格式创建培训数据文件(JSON)。
[
{
"tokens": [
"Club game",
"at",
"Nehru Stadium Chennai",
"on",
"Saturday Morning"
],
"labels": [
"TITLE",
"NONE",
"LOCATION",
"NONE",
"TIME"
]
},
... other sample records...
]您可以在游乐场使用下面的代码进行培训。
var trainingData = try MLDataTable(contentsOf: URL(fileURLWithPath: "/pathto..train.json"))
let model = try! MLWordTagger(trainingData: trainingData, tokenColumn: "tokens", labelColumn: "labels")然后使用这个预测方法来预测句子中的每个标记。
func prediction(from tokens: [MLWordTagger.Token]) throws -> [String]此方法返回令牌的标记数组。
另一种方法是使用NLTagger,它已经能够检测地名、组织名称和时间。
import NaturalLanguage
let text = "Club game at Nehru Stadium, Chennai on Saturday Morning."
let tagger = NLTagger(tagSchemes: [.nameType])
tagger.string = text
let options: NLTagger.Options = [.omitPunctuation, .omitWhitespace, .joinNames]
let tags: [NLTag] = [.personalName, .placeName, .organizationName]
tagger.enumerateTags(in: text.startIndex..<text.endIndex, unit: .word, scheme: .nameType, options: options) { tag, tokenRange in
if let tag = tag, tags.contains(tag) {
print("\(text[tokenRange]): \(tag.rawValue)")
}
return true
} 这将返回下面的输出,所以您只需要训练模型来检测时间副词。
Nehru Stadium: PlaceName
Chennai: OrganizationNamehttps://stackoverflow.com/questions/53358019
复制相似问题