Алгоритмы сопоставления на основе пересечения ключевых слов

Предположим, у нас есть покупатели и продавцы, которые пытаются найти друг друга на рынке. Покупатели могут пометить свои потребности ключевыми словами; продавцы могут делать то же самое с тем, что они продают. Мне интересно найти алгоритм (ы), который упорядочивает продавцов с точки зрения их релевантности для конкретного покупателя на основе их двух наборов ключевых слов.

Вот пример:

buyer_keywords = {"furry", "four legs", "likes catnip", "has claws"} 

, а затем у нас есть два потенциальных продавца, которых нам нужно ранжировать с точки зрения их релевантности:

seller_keywords[1] = {"furry", "four legs", "arctic circle", "white"}
seller_keywords[2] = {"likes catnip", "furry", 
                      "hates mice", "yarn-lover", "whiskers"}

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

Чтобы придать проблеме больше структуры, предположим, что у нас есть некоторая достоверная мера интенсивности атрибутов ключевого слова (сумма которых должна быть равна 1 для каждого продавца), например:

seller_keywords[1] = {"furry":.05, 
                      "four legs":.05, 
                      "arctic circle":.8, 
                      "white":.1}

seller_keywords[2] = {"likes catnip":.5, 
                      "furry":.4, 
                      "hates mice":.02, 
                      "yarn-lover":.02, 
                      "whiskers":.06}

Теперь мы можем суммировать значение hits: теперь продавец 1 получает только 0,1, а продавец 2 - 0,9. Пока все хорошо, но теперь мы можем получить третьего продавца с очень ограниченным, не описывающим набором ключевых слов:

seller_keywords[3] = {"furry":1}

Это катапультирует их на вершину при любом ударе по их единственному ключевому слову, что нехорошо.

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

5
задан hippietrail 18 October 2012 в 09:48
поделиться