У меня есть то, что я считаю простым вопросом машинного обучения.
Вот основная проблема: мне неоднократно дается новый объект и список описаний объекта. Например: new_object: 'bob'
new_object_descriptions: ['tall','old','funny']
. Затем мне нужно использовать какое-то машинное обучение для поиска ранее обработанных объектов, которые имеют 10 или менее похожих описаний, например past_similar_objects: ['frank','steve','joe']
. Затем у меня есть алгоритм, который может непосредственно измерить, действительно ли эти объекты похожи на bob, например, correct_objects: ['steve','joe']
. Затем классификатору дается эта тренировка успешных матчей с обратной связью. Затем этот цикл повторяется с новым объектом.
Здесь псевдокод:
Classifier=new_classifier()
while True:
new_object,new_object_descriptions = get_new_object_and_descriptions()
past_similar_objects = Classifier.classify(new_object,new_object_descriptions)
correct_objects = calc_successful_matches(new_object,past_similar_objects)
Classifier.train_successful_matches(object,correct_objects)
Но есть некоторые положения, которые могут ограничить использование классификатора:
-
В этот классификатор будут помещены миллионы объектов, поэтому классификация и обучение должны хорошо масштабироваться для миллионов типов объектов и быть быстрыми. Я считаю, что это дисквалифицирует что-то вроде спам-классификатора, который оптимален только для двух типов: спам или спам. (Обновление: я мог бы, вероятно, сузить это до тысяч объектов вместо миллионов, если это проблема.)
-
Опять же, я предпочитаю скорость, когда миллионы объектов классифицируются по точности.
-
Обновление: классификатор должен вернуть 10 (или меньше) наиболее похожих объектов на основе отзывов прошлой тренировки. Без этого ограничения очевидный чит был бы для классификатора, который мог бы просто вернуть все прошлые объекты:)
Каковы приемлемые, быстрые алгоритмы машинного обучения для этой цели?
Примечание. Показатель расстояния calc_successful_matches чрезвычайно дорог для вычисления, и поэтому я использую быстрый алгоритм машинного обучения, чтобы попытаться угадать, какие объекты будут закрыты, прежде чем я действительно сделаю дорогостоящий расчет.