Более одного целевого столбца в MLDataTable - платформа CreateML в Swift
Я хочу создать MLDataTable с одной функцией и тремя целями, используя каркас Create ML. Например, давайте предположим, что я создаю приложение календаря, в котором есть функция добавления быстрого события, например приложение "Календарь Native Mac". У меня есть текст колонки, которая содержит строки, такие как клубная игра на стадионе Неру в Ченнае в субботу утром. Я хочу, чтобы три целевых столбца заголовок, место и время, чтобы получить значения клуба игры, Стадион им. Неру, Ченнаи и 24 ноября 2018 года, 08:00.
Также, пожалуйста, дайте мне знать, если есть какие-либо другие способы реализовать то же самое с помощью среды CreateML.
0 ответов
Вы можете обучить 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: OrganizationName