簡単な機械学習の質問だと思います。
基本的な問題は次のとおりです。新しいオブジェクトと、オブジェクトに関する説明のリストが繰り返し与えられます。例: new_object: 'bob'
new_object_descriptions: ['tall','old','funny']
。次に、なんらかの機械学習を使用して、過去に処理した 10 個以下の最も類似した説明を持つオブジェクトを見つける必要があります (例: past_similar_objects: ) ['frank','steve','joe']
。次に、これらのオブジェクトが実際に bob に似ているかどうかを直接測定できるアルゴリズムがあります (たとえば、 correct_objects: ) ['steve','joe']
。次に、分類子には、成功した一致のこのフィードバック トレーニングが与えられます。次に、このループが新しいオブジェクトで繰り返されます。a 疑似コードは次のとおりです。
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)
ただし、使用できる分類子を制限する可能性のあるいくつかの規定があります。
この分類子には何百万ものオブジェクトが配置されるため、分類とトレーニングは何百万ものオブジェクト タイプに十分にスケーリングし、高速である必要があります。これは、スパムかスパムでないかの 2 つのタイプだけに最適なスパム分類器のようなものを失格にすると思います。(更新: 問題がある場合は、おそらくこれを数百万ではなく数千のオブジェクトに絞り込むことができます。)
繰り返しますが、何百万ものオブジェクトが分類されているときは、正確さよりも速度を好みます。
更新: 分類子は、過去のトレーニングからのフィードバックに基づいて、最も類似した 10 個 (またはそれ以下) のオブジェクトを返す必要があります。この制限がなければ、分類子が過去のすべてのオブジェクトを返すことができるため、明らかなチートになります:)
この目的のための適切で高速な機械学習アルゴリズムは何ですか?
注: calc_successful_matches 距離メトリックは計算に非常にコストがかかるため、高速な機械学習アルゴリズムを使用して、実際に高価な計算を行う前にどのオブジェクトが近くにあるかを推測しようとしています。