для проекта Я хочу создать модель Core ML 3, которая получает некоторый текст (т.е. из писем) и классифицирует его.Кроме того, модель должна быть обновляемой и обученной на устройствах.Поэтому я обнаружил, что KNearestNeighborsClassifier можно обновить, и захотел использовать их для моего подхода.Однако, во-первых, я получил ошибку
" RuntimeWarning: You will not be able to run predict() on this Core ML model. Underlying exception message was: Error compiling model: "Error reading protobuf spec. validator error: KNearestNeighborsClassifier requires k to be a positive integer."
при создании такой модели с помощью скрипта (см. Ниже).Кроме того, я не уверен, как правильно использовать KNearestNeighborsClassifier для моей проблемы.Особенно, какое количество измерений является правильным, если я хочу классифицировать некоторые тексты?И как мне будет правильно использовать модель в приложении?Может быть, вы знаете какое-нибудь полезное руководство, которое я еще не нашел =
Мой скрипт для создания KNearestNeighborsClassifier основан на этом руководстве: https://github.com/apple/coremltools/blob/master/examples/updatable_models/updatable_nearest_neighbor_classifier.ipynb Я установил и использую coremltools == 3.0b6.
Вот мой фактический сценарий для создания модели:
number_of_dimensions = 128
from coremltools.models.nearest_neighbors import KNearestNeighborsClassifierBuilder
builder = KNearestNeighborsClassifierBuilder(input_name='input',
output_name='output',
number_of_dimensions=number_of_dimensions,
default_class_label='defaultLabel',
number_of_neighbors=3,
weighting_scheme='inverse_distance',
index_type='linear')
builder.author = 'Christian'
builder.license = 'MIT'
builder.description = 'Classifies {} dimension vector based on 3 nearest neighbors'.format(number_of_dimensions)
builder.spec.description.input[0].shortDescription = 'Input vector to classify'
builder.spec.description.output[0].shortDescription = 'Predicted label. Defaults to \'defaultLabel\''
builder.spec.description.output[1].shortDescription = 'Probabilities / score for each possible label.'
builder.spec.description.trainingInput[0].shortDescription = 'Example input vector'
builder.spec.description.trainingInput[1].shortDescription = 'Associated true label of each example vector'
#This lets the developer of the app change the number of neighbors at runtime from anywhere between 1 and 10, with a default of 3.
builder.set_number_of_neighbors_with_bounds(3, allowed_range=(1, 10))
# Let's set the index to kd_tree with leaf size of 30
builder.set_index_type('kd_tree', 30)
# By default an empty knn model is updatable
print(builder.is_updatable)
print(builder.number_of_dimensions)
print(builder.number_of_neighbors)
print(builder.number_of_neighbors_allowed_range())
print(builder.index_type)
mlmodel_updatable_path = './UpdatableKNN.mlmodel'
# Save the updated spec
from coremltools.models import MLModel
mlmodel_updatable = MLModel(builder.spec)
mlmodel_updatable.save(mlmodel_updatable_path)
Я надеюсь, что вы можете помочь мне, сказав, что в целом мой подход с использованием KNearestNeighborsClassifier для классификации текста имеет смысл и, надеюсь, выможет помочь мне успешно создать модель CoreML.
Заранее большое спасибо.