Включение обратной связи с пользователем в модели 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
всякий раз, когда вы хотите, чтобы произошло обновление модели.