Включение обратной связи с пользователем в модели ML

Я разработал модель ML для задачи классификации (0/1) NLP и развернул ее в производственной среде. Прогноз модели отображается для пользователей, и пользователи имеют возможность оставить отзыв (если прогноз был правильным/неправильным).

Как я могу постоянно включать этот отзыв в мою модель? С точки зрения UX вы не хотите, чтобы пользователь исправлял/обучал систему более двух раз/трижды для конкретного ввода, система должна быстро учиться, то есть обратная связь должна быть включена "быстро". (Приоритетный почтовый ящик Google делает это без проблем)

Как построить этот "цикл обратной связи", с помощью которого моя система может улучшиться? Я много искал в сети, но не смог найти соответствующий материал. любые указатели будут очень полезны.

Пожалуйста, не говорите, что вы переучиваете модель с нуля, включая новые данные. Это точно не то, как Google и Facebook строят свои умные системы

Чтобы более подробно объяснить мой вопрос - подумайте о детекторе спама в Google или их приоритетном входящем почтовом ящике или их недавней функции "умных ответов". Это общеизвестный факт, что они имеют возможность изучать/включать (быстрый) пользовательский канал.

В то же время, когда он быстро учитывает обратную связь с пользователем (то есть пользователь должен обучать систему правильному выводу максимум 2-3 раза на одну точку данных, и система начинает давать правильный вывод для этой точки данных) И он также гарантирует, что он сохраняет старые знания и не начинает давать неправильные выходные данные на более старых точках данных (где он давал правильные выходные данные ранее) при включении обучения из новой точки данных.

Я не нашел ни одного блога/литературы/обсуждения о том, как создавать такие системы - интеллектуальная система, которая объясняет в цикле detaieback "в системах ML

Надеюсь, мой вопрос немного яснее.

Обновление: я нашел несколько связанных вопросов:

Обновление: у меня все еще нет конкретного ответа, но такой рецепт действительно существует. Прочитайте раздел "Обучение на основе обратной связи" в следующем блоге Машинное обучение! = Машинное обучение. В этом Джин говорит о "добавлении обратной связи в машину". То же самое в здесь, здесь, здесь4.

Ответ 1

Создайте простую, легкую модель (ы), которая может быть обновлена ​​за один отзыв. Online Machine learning дает несколько кандидатов для этого

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

https://stats.stackexchange.com/questions/126546/nonlinear-dynamic-online-classification-looking-for-an-algorithm

Ответ 2

Это может быть несколько способов:

1) Вы можете включить обратную связь, которую вы получаете от пользователя, чтобы тренировать только последний слой вашей модели, сохраняя при этом вес всех остальных слоев. Интуитивно, например, в случае CNN это означает, что вы извлекаете функции с помощью своей модели, но слегка корректируете классификатор для учета особенностей вашего конкретного пользователя.

2) Еще один способ может состоять в том, чтобы иметь глобальную модель (которая была обучена на вашем большом наборе тренировок) и простая логистическая регрессия, которая является специфичной для пользователя. Для окончательных прогнозов вы можете комбинировать результаты двух прогнозов. См. этот документ от Google о том, как они делают это для своего приоритетного почтового ящика.

Ответ 3

Мой сервис mlrequest делает это простым благодаря онлайн-обучению. Вы можете развернуть модели онлайн-обучения с низкой задержкой и высокой доступностью в 5 центрах обработки данных по всему миру с помощью нескольких линий Python. Модели могут масштабироваться до многих, многих тысяч модельных транзакций в секунду.

Пример Python приведен ниже, но можно использовать любой язык.

$pip install mlrequest

Обучение модели всегда происходит постепенно. Вам не нужно извлекать старые данные для обучения модели новыми примерами.

from mlrequest import Classifier
classifier = Classifier('my-api-key')
features = {'feature1': 'val1', 'feature2': 45}
training_data = {'features': features, 'label': 2}
r = classifier.learn(training_data=training_data, model_name='my-model', class_count=2)

Прогнозировать так же просто, как

features = {'feature1': 'val1', 'feature2': 77}
r = classifier.predict(features=features, model_name='my-model', class_count=2)
r.predict_result

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