Вероятности создания текстового классификатора ML

Я создаю модель с помощью Create ML. Я использую файл JSON.

let data = try MLDataTable(contentsOf: URL(fileURLWithPath: "poems.json"))
let (trainingData , testingData) = data.randomSplit(by: 0.8, seed: 0)

let classifier = try MLRegressor(trainingData: data, targetColumn: "author", featureColumns: ["text"])
let metadata = MLModelMetadata(author: "ffffff", shortDescription: "sdhkgfjhsgdjfhgs", license: nil, version: "1.0", additional: nil)

try classifier.write(to: URL(fileURLWithPath: "poems.mlmodel"), metadata: metadata)

Файл JSON выглядит так

{"title":"When You Are Old",
 "author":"William Butler Yeats",
 "text":"When you are old and grey and full of sleep,\nAnd nodding by the   fire, take down this book,\nAnd slowly read, and dream of the soft look\nYour eyes had once, and of their shadows deep;\nHow many loved your moments of glad grace,\nAnd loved your beauty with love false or true,\nBut one man loved the pilgrim Soul in you,\nAnd loved the sorrows of your changing face;\nAnd bending down beside the glowing bars,\nMurmur, a little sadly, how Love fled\nAnd paced upon the mountains overhead\nAnd hid his face amid a crowd of stars."}

После урока я пытаюсь обнаружить текст по "тексту" и вернуть возможного "автора"

Я могу сделать это, но я хотел бы также иметь вероятность.

Создавая модель с помощью Create ML, в качестве текстового классификатора я получаю только вывод метки: Author. Есть ли способ создать ML, чтобы иметь вероятность в текстовой классификации?

Спасибо

4 ответа

Это не представляется возможным с текущим API MLTextClassifier.

Если вы откроете свой файл mlmodel в Netron, https://github.com/lutzroeder/Netron/, он покажет вам результаты, полученные моделью. Я думаю, что это просто дает класс, а не вероятность.

Да, используйте структуру NatrualLanguage для преобразования MLModel в NLModel, а затем получите уверенность.

      import CoreML
import NaturalLanguage

let model = try my_model(configuration: MLModelConfiguration()).model
let text = "Hello, World"
let nlmodel = try NLModel(mlModel: model)
let prediction = nlmodel.predictedLabel(for: text)
let predictionSet = nlmodel.predictedLabelHypotheses(for: text, maximumCount: 1)
let confidence = predictionSet["1"] ?? 0.0
print(text + "," + "\(confidence)")

Я полагаю, это еще не поддерживается MLTextClassifier API. Однако вы можете получить вероятности из вашей модели, используя более общий (и в целом менее точный) MLClassifier при создании вашей модели.

MLModel, созданный в игровой площадке XCode, является текстовым классификатором, который возвращает только метку (String). Пример Apple на Github ( https://apple.github.io/turicreate/docs/userguide/text_classifier/), который использует библиотеку python для создания модели, является классификатором Pipeline и возвращает метку и ее вероятность (String -> Двухместный).

Другие вопросы по тегам