Pull to refresh

Comments 22

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

а статья мощная, но оооочень технически ориентированная. Реально я думаю понятна будет ничтожному проценту людей, тем кто конкретно такую же штуку запиливал. И то вопросы останутся. А остальным только впечатлиться «до чего техника дошла» :)
Можно спрашивать детали, я постараюсь ответить :)
Это означает, что мы делаем Inverted File на 262144 кластера

Зачем такое гигантское количество кластеров?
Если в двух словах, то на вырост. Разработчики faiss рекомендуют брать столько и даже больше для индексации миллиарда векторов.
image

На данном этапе развитии системы в этом действительно нет необходимости, мы проводили эксперименты с 65536 кластерами и это тоже было вполне нормально.
При таком кол-ве кластеров — 2.5М на 240М векторов, должна значительно понизиться точность поиска. Прежде всего я имею ввиду новые записи — они будут попадать, практически, в случайные кластеры. Или вы nprob тоже в 2.5М выставляете?
Но ведь можно регулировать точность параметром nprobe, чтобы опрашивать большее число ближайших кластеров. У нас он выставлен в 256 и точность вполне приличная. К сожалению по нашей системе конкретные числа не достану, но могу показать замеры на BigANN 1B:

R@1 R@10 R@100 time (ms/query)
nprobe=16,efSearch=128,ht=246 0.6546 0.8006 0.8006 4.231
nprobe=32,efSearch=128,ht=246 0.7107 0.8818 0.8818 7.783
nprobe=64,efSearch=128,ht=246 0.7435 0.9343 0.9346 14.691
nprobe=128,efSearch=128,ht=246 0.7653 0.9687 0.9692 28.326
nprobe=256,efSearch=128,ht=246 0.7726 0.9829 0.9834 55.375


Всё таки у нас не 2.5 миллиона кластеров, а 262 тысячи.
Да, прошу прощения, 262К, не 2.5М :) Тем не менее, посоветовал бы тщательно протестировать поиск на новых векторах.
Спасибо за совет, обязательно проверим.
UPD: навскидку покидал запросики, картинки находит правильные.
Вот например
опорная
image

ближайший сосед сразу за опорной
image

Года три назад пытался снять квартиру в Краснодаре через Авито — обнаружил целый рассадник мошенников, в центре 9 из 10 квартир просто не существовали и были опубликованы одной из 3 мошеннических контор (на вскидку 500+ объявлений для каждой конторы). Для блокировки этих мошенников даже не нужны нейронные сети, простых решений на основе fingerprints было бы достаточно, но антиспам-фильтром на Авито в тот момент даже не пахло, либо он легко обходился. Хочется верить, что за 3 года ситуация изменилась, хотя верится слабо.
Поскольку все наши сервисы живут на Kubernetes

А как в этом контексте, развернуть несколько индексов в одном поде? Если он будет достаточно жирным то его деплой приведет к перебалансировке остальных?

Мы сейчас выбрали подход 1 индекс на под, это позволяет более гибко планировать поды, всё-таки они довольно толстые.


Горизонтальное масштабирование достигается увеличением числа подов.

Спасибо за статью.
1. Было бы интересно узнать, что вы используете для получения самих векторов.
2. А какой практический смысл в том, что вектора можно только добавлять? Может быть изображения, добавленные, скажем, 5 лет назад уже можно удалять? Это бы позволило немного замедлить рост размера индекса. Если с этмими изображениями начнут спамить, то они добавятся в индекс. Или я что-то упускаю?
  1. Я попрошу коллегу, которая занималась нейросетью рассказать об этом в отдельной статье.
  2. Нам нужно уметь искать по всему архиву изображений, поскольку мошенники зачастую берут фотографии из старых, уже закрытых объявлений.
А закрытые объявления видны каким-то простым способом? Или нужно знать полный адрес объявления?

Они не доступны по прямой ссылке, как обычные объявления, но Авито достаточно легко парсить, чем многие и занимаются.

В общем, всё по классике инфопоиска.

Можете посоветовать литературу по классике?
Благодарю за рекомендацию и за статью. Очень заинтересовала.

Жаль, что не имею права голоса.
Отличная статья, спасибо!

1. Я так понял, «train» фазу IVF вы сделали только один раз, при самом первом построении индекса? Не сказывается ли это на точности?
2. Бэкап индекса происходит только с одного инстанса индекса, или сразу со всех? Если с одного, то как вы определяетсе «мастера», который производит бекап?
1. Да, мы делаем тренировку один раз для каждой порождающей данные модели. На точность существенного влияния мы не заметили, но тут всё зависит от того, насколько распределение на тренировочной выборке соответствует реальному.
2. Пока что бекапы делаются со всех инстансов, мы немного троттлим чтение файла, чтобы не забивать сеть в полку.
Sign up to leave a comment.