О проекте

Как работает Cinemoodly

Обычно фильм ищут по названию. Здесь — по описанию: вы говорите, какое кино хочется, своими словами, а поиск находит фильмы с такой же интонацией — даже если ни одно из ваших слов в них не встречается.

«мрачный детектив у моря, дождь и старая тайна»

В описании подходящего фильма может не быть ни «мрачного», ни «детектива», ни «моря»: там будет «расследование в рыбацком посёлке», «серое побережье» и «история, которую скрывают сорок лет». Поиск по словам на таком запросе не найдёт ничего. Поиск по смыслу находит именно это.

Чем это отличается от обычного поиска

Поиск по словам проверяет совпадение: есть ли в тексте про фильм те же слова, что и в запросе. Это отлично работает, когда вы уже знаете, что ищете, — название, режиссёра, год.

Но чаще всего человек знает не название, а состояние: «что-нибудь тёплое и тихое», «красивое, но тревожное», «чтобы поплакать». Здесь совпадения слов нет и быть не может — нужное кино описано совсем другими словами. Именно этот разрыв и закрывает поиск по смыслу: он сравнивает не буквы, а значение целой фразы.

Побочный эффект такого подхода — синонимы, перифразы и опечатки перестают быть проблемой, а язык запроса не обязан совпадать с языком описания.

Как это происходит

Внутри нет ни ключевых слов, ни ручных подборок «если спросили X — показать Y». Есть четыре шага, одинаковых для каждого фильма и каждого запроса.

  1. Про каждый фильм собирается один текстНазвание и год, жанры, темы и теги, франшиза, режиссёр и актёры, описание сюжета — и отдельное описание атмосферы, составленное языковой моделью по этим же данным. Для русского и английского тексты собираются отдельно и никогда не смешиваются.
  2. Текст превращается в набор чиселНейросетевая модель переводит текст в вектор — список из 3072 чисел, координаты смысла. Главное свойство: тексты, близкие по смыслу, получают близкие векторы, даже если написаны разными словами и на разных языках.
  3. Ваш запрос проходит тот же путьФраза из строки поиска превращается в такой же вектор той же моделью. С этого момента запрос и фильмы живут в одном пространстве и их можно сравнивать напрямую.
  4. Находятся ближайшиеБаза отбирает фильмы, чьи векторы ближе всего к вектору запроса, — это и есть «похожее по смыслу». Дальше выдачу можно отсортировать по рейтингу, популярности или году и сузить фильтрами: жанр, тема, актёр, годы, оценка IMDb.

Три режима поиска

Смысловой поиск сильнее всего на описаниях и настроении, но не на всём. Поэтому режимов три, и переключаются они прямо в строке поиска.

По смыслу
То, что описано выше. Берите его, когда описываете кино своими словами, а не называете его.
Гибрид
Смысл плюс точные слова: полезно, когда в запросе есть имя, название франшизы или редкий термин, который нельзя терять.
По словам
Обычный текстовый поиск. Самый короткий путь, если вы знаете точное название.

Чего он не умеет

Это подбор похожего, а не ответ на вопрос. У запроса нет единственно правильной выдачи: две формулировки одной и той же мысли дадут разные списки, и это нормальная работа метода, а не ошибка.

Описание атмосферы у каждого фильма составляет языковая модель по метаданным — она может ошибаться в деталях, поэтому такие тексты помечены прямо на странице фильма.

Поиск умеет ровно то, что есть в каталоге: если фильма в нём нет, никакая формулировка его не найдёт. Каталог постоянно пополняется, но всё кино мира в нём не поместится.

Откуда данные

Описания, постеры, жанры, темы и составы — из TMDB. Рейтинги и число голосов — из некоммерческих датасетов IMDb. Мы ничего не переписываем за авторов: тексты фильмов берутся как есть, а недостающие переводы делает машинный перевод — такие тоже помечены.