Войти Регистрация
Data base

272. Три самых похожих селфи на новую регистрацию

Средняя

Африканский финтех Chipper Cash столкнулся с тем, что одни и те же люди заводили десятки аккаунтов ради промо: за полгода так ушло 16 % промо-бюджета. Теперь селфи нового пользователя превращают в эмбеддинг и запрашивают в Pinecone три ближайших совпадения, ответ укладывается в 200 мс. По их данным, мошеннических регистраций стало в 10 раз меньше.

В задаче размерность 4, метрика cosine. Метаданные селфи: user_id и banned — true, если аккаунт уже заблокирован. У записей до введения блокировок поля banned нет.

Пользователь u9 только что загрузил селфи [0.7, 0.2, 0.5, 0.4]; его прошлые попытки уже лежат в индексе. Верните запрос, который даст 3 ближайших селфи других пользователей, исключив заблокированные аккаунты.

В работе: Поиск дублей при онбординге: лица, документы, отпечатки устройств.

Pinecone · Pinecone (эмулятор: точный перебор)

Индекс

Размерность 4, метрика cosine.

Пример: векторы

idvaluesmetadata
s-010.7, 0.21, 0.5, 0.39{"user_id": "u9", "banned": false}
s-020.69, 0.22, 0.51, 0.4{"user_id": "u3", "banned": false}
s-030.71, 0.18, 0.49, 0.42{"user_id": "u4", "banned": true}
s-040.66, 0.25, 0.55, 0.35{"user_id": "u5"}
s-050.6, 0.3, 0.4, 0.5{"user_id": "u6", "banned": false}
s-060.1, 0.9, 0.2, 0.1{"user_id": "u7", "banned": false}

Ожидаемый ответ

s-02, s-04, s-05
Как проверяем Запрос — JSON, как тело index.query(): vector, topK и filter по метаданным. Ищем точным перебором по метрике индекса на 4 наборах векторов и сравниваем список id по порядку. Фильтр — по правилам Pinecone: $eq $ne $gt $gte $lt $lte $in $nin $exists $and $or.
{"vector": [ … ], "topK": 3, "filter": { … }}
topK$neотсутствующее полеантифрод

Источник: кейс Chipper Cash на сайте Pinecone: поиск дублей лиц при регистрации, 2022. Условие пересказано своими словами.