У меня есть много элементов контента, хранящихся в базе данных, и я знаю, какие теги интересуют пользователя. Алиса, например, проявляет интерес к таким тегам, как «здравоохранение», «спорт» и «социальный». Каждый элемент контента содержит один или несколько тегов. Как бы я сопоставил их, чтобы рекомендовать Алисе новый контент?
Рассмотрим эти основные таблицы базы данных:
CREATE TABLE `content_tag` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`item_id` INT(11) NOT NULL,
`tag_id` INT(11) NOT NULL,
PRIMARY KEY (`id`)
);
CREATE TABLE `tag` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`)
);
И у меня есть интересы Алисы наряду с (релевантностью) баллом, который действует как вес:
array:3 [
'healthcare' => 2.20
'sports' => 1.30
'socal' => 0.5
]
Как бы вы подошли к этому?
Есть ли способ использовать алгоритм для этого, такой как симметрия косинуса, или это только предложения?
Вы можете найти сходство между Алисой и предметами, а затем отсортировать их. Итак, большинство подобных n предметов будут рекомендованы.
Одним из показателей сходства является косинусное сходство (как вы предлагаете), и оно работает следующим образом;
Для каждого элемента вы можете создать вектор с помощью тегов. Насколько я понимаю, у ваших предметов нет оценок, поэтому значения векторов предметов будут 0 или 1. Каждое значение будет представлять один тег для конкретного предмета.
Представление товара;
[0,0,1,1,0,0] -> Допустим, первое значение представляет «здравоохранение», второе — для спорта, а последний — для tag5. Этот элемент не имеет tag5, поэтому его значение 0
И пользователи также имеют векторы, которые похожи на элементы.
Например, вектор Алисы
[2.20,1.30,0.5,0,0,0]
После создания векторов вы можете вычислить сходство (например, используя косинусное сходство.)
Обратите внимание, что Размер каждого пользователя и векторов элементов равен количеству всех тегов в системе.
В этом примере в системе есть 6 различных тегов.
Других решений пока нет …