Предположим, у вас есть встраиваемая модель. Учитывая пользователя, как бы вы решили, какие товары рекомендовать?
Во время обслуживания, учитывая запрос, вы начинаете с выполнения одного из следующих действий:
- Для модели матричной факторизации внедрение запроса (или пользователя) известно статически, и система может просто найти его в матрице внедрения пользователя.
- Для модели DNN система вычисляет встраивание запроса. \(\psi(x)\)во время обслуживания, запустив сеть на векторе признаков \(x\).
Как только у вас есть встраивание запроса \(q\), поиск вложений элементов\(V_j\) которые близки к \(q\) во вложенном пространстве. Это проблема ближайшего соседа. Например, вы можете вернуть первые k элементов по показателю сходства. \(s(q, V_j)\).
Вы можете использовать аналогичный подход в рекомендациях по связанным элементам. Например, когда пользователь смотрит видео на YouTube, система может сначала найти встраивание этого элемента, а затем искать встраивания других элементов.\(V_j\) которые находятся близко в пространстве вложения.
Масштабный поиск
Чтобы вычислить ближайших соседей в пространстве встраивания, система может исчерпывающе оценить каждого потенциального кандидата. Исчерпывающий скоринг может быть дорогостоящим для очень больших корпораций, но вы можете использовать любую из следующих стратегий, чтобы сделать его более эффективным:
- Если внедрение запроса известно статически, система может выполнять исчерпывающую оценку в автономном режиме, предварительно вычисляя и сохраняя список лучших кандидатов для каждого запроса. Это обычная практика для рекомендаций по связанным товарам.
- Используйте приблизительных ближайших соседей.Google предоставляет на GitHub инструмент с открытым исходным кодом под названием ScaNN (Scalable Nearest Neighbours). Этот инструмент выполняет эффективный поиск сходства векторов в масштабе.