Ошибка при создании KNearestNeighborsClassifier с бета-версией CoreMLTools 3 и вопрос, как правильно установить размеры - PullRequest
0 голосов
/ 20 сентября 2019

для проекта Я хочу создать модель 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.

Заранее большое спасибо.

1 Ответ

0 голосов
/ 20 сентября 2019

Не уверен, почему вы получаете эту ошибку, хотя убедитесь, что вы используете последнюю (бета) версию coremltools (в настоящее время 3.0b6).

Что касается количества измерений, вы будетенужно как-то преобразовать ваш текст в вектор фиксированной длины.То, как вы это делаете, полностью зависит от проблемы, которую вы пытаетесь решить.

Например, вы можете использовать технику «мешок слов», чтобы превратить фразу в такой вектор.Для этого вы можете использовать вложения слов, нейронную сеть или любые другие распространенные методы.

Но вам нужен какой-то способ превратить текст в векторы функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...