
Картинка из описания сервиса Microsoft Face API
Возьмем каталог картинок, можно с подписями, можно без (instagram, tinder, craigslist, avito etc.).
В процессе поиска пользователь обращает внимание на определенные паттерны в картинках (например, велосипед - спортивный, девушка - блондинка и т.п.). Хорошо, если при публикации картинки было дано ее словесное описание (пример: хеш-теги в инстаграме). Если нет, можно использовать библиотеки Machine Learning, умеющие размечать семантические атрибуты изображений - image recognition, реализованная в TensorFlow и др. библиотеках). По сути, это будет набор нейросеток, каждая из которых распознает какой-то свой паттерн для картинки. Некоторые сетки еще не дают заданной точности, но это дело ближайшего времени. Силовые ведомства уже давно трудятся над чем-то подобным для опознавания лиц подозреваемых.
Есть несколько возможных способов поиска (от простого к сложному).
1 Библиотека сама выделяет какие-то паттерны по картинкам и затем показывает их список пользователю для использования их как умных фильтров.
2 Пользователь составляет словесное описание фильтров, по которым хочет искать. Например, модель велика -такая-то, цвет волос девушки - такой-то и т.п.) Приложение парсит описание пользователя, матчит их со списком паттернов, которые заранее были выделены по картинкам, и ищет в проиндексированной базе картинок нужные.
3 Приложение само учится определять паттерны, интересные пользователю, по истории его лайков, времени просмотра, переходам и т.п., показывающим степень его заинтересованности. Этот подход самый тяжелый, но при правильном использовании может быть самый точный, т.к. часто то, что мы хотим, мы даже не можем сформулировать, полагаясь на игру подсознания.
Улучшения:
- Искать не только по картинкам, но и по словесному описанию к ним, комментариям пользователей и т.п.
- Использовать коллаборативную фильтрацию: показывать то, что понравилось другим пользователям со схожими интересами; показывать похожие объекты и т.п.
- Затачивать под конкретную задачу. Например, в дейтинг-приложениях учитывать время активности пользователя и неактивные профили показывать в последнюю очередь.
- Фильтровать outliers - картинки, которые лайкают все (сделанные профессиональными агенствами для рекламы например).