Африканский финтех 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.
Пример: векторы
| id | values | metadata |
|---|---|---|
s-01 | 0.7, 0.21, 0.5, 0.39 | {"user_id": "u9", "banned": false} |
s-02 | 0.69, 0.22, 0.51, 0.4 | {"user_id": "u3", "banned": false} |
s-03 | 0.71, 0.18, 0.49, 0.42 | {"user_id": "u4", "banned": true} |
s-04 | 0.66, 0.25, 0.55, 0.35 | {"user_id": "u5"} |
s-05 | 0.6, 0.3, 0.4, 0.5 | {"user_id": "u6", "banned": false} |
s-06 | 0.1, 0.9, 0.2, 0.1 | {"user_id": "u7", "banned": false} |
Ожидаемый ответ
s-02, s-04, s-05
index.query(): vector, topK и filter по метаданным. Ищем точным перебором по метрике индекса на 4 наборах векторов и сравниваем список id по порядку. Фильтр — по правилам Pinecone: $eq $ne $gt $gte $lt $lte $in $nin $exists $and $or.
{"vector": [ … ], "topK": 3, "filter": { … }}
Источник: кейс Chipper Cash на сайте Pinecone: поиск дублей лиц при регистрации, 2022. Условие пересказано своими словами.
Посмотреть данные, проверить часть фильтра. На зачёт не влияет.
Здесь появится результат отправки.