Отличный вопрос, спасибо. Да, нам нужно умножить вектор запроса на векторы сотен тысяч документов. Но это происходит параллельно на довольно большом числе отдельных машин (мы называем их «базовыми поисковыми машинами», или просто «базовыми»). Таким образом, на каждом отдельном «базовом» мы умножаем не сотни тысяч векторов, а на несколько порядков меньше. Препроцессинг же векторов документов тоже не бесплатен. Кроме того, документы, векторы которых нам нужно умножить на вектор запроса, обычно довольно похожи между собой — ведь эти документы не случайны, они нашлись на более ранних стадиях поиска по данному запросу. То есть заведомо плохие варианты уже отсечены ещё до умножения. Учитывая всё это, сильно схитрить не получится)
В случае с «келлс» и «келлский» речь идет не о словоизменении, а о словообразовании, то есть с определенной точки зрения это — разные слова. В статье для наглядности использовался вариант BM25, который именно так и считает. Но о том, что слова «келлс» и «келлский» как-то связаны, большой поиск Яндекса, конечно, знает и без DSSM.
На этот счет есть интересная лекция моего коллеги: Андрей Плахов. Язык поисковых запросов как естественный язык.
Если коротко, то язык поисковых запросов (или человеко-машинный пиджин), конечно, отличается от литературного языка, но, судя по всему, его выразительных средств достаточно для решения поисковых задач пользователя.
Сам по себе word2vec — штука довольно интересная. Просто он плохо проявил себя в нашей конкретной задаче по улучшению поиска. Мое объяснение состоит в том, что обучение «классического» word2vec происходит без привлечения информации о поведении пользователей. В отличие от word2vec, целевая функция при обучении DSSM непосредственно связана с задачей ранжирования.
Ключ к высокому качеству поиска находится на поздних стадиях ранжирования. Возможно, это не совсем очевидно, но наш опыт говорит о том, что сделать фильтрацию, которая будет находить хороший топ-10000 документов, заметно проще, чем правильно отранжировать документы в этом топе. Сейчас модель применяется к нескольким сотням лучших документов. Вероятно, в обозримом будущем это число существенно увеличится.
Закономерный вопрос. Наше ранжирование состоит из нескольких последовательных стадий, различных по количеству обрабатываемых документов и сложности применяемых на них алгоритмов. Сначала работает очень быстрое ранжирование, которое находит, например, сотни тысяч документов. Затем мы используем более умное и медленное ранжирование и оставляем десятки тысяч документов и так далее. Таким образом, самые тяжелые алгоритмы применяются не ко всем документам вэба, а к некоторому большому, но всё же ограниченному топу наиболее перспективных документов.
Описанная нейронная модель является всего лишь одним из многих факторов, влияющих на ранжирование в Яндексе. Поэтому после переформулировки запроса результаты будут по-прежнему изменяться. Мы просто стараемся сделать так, чтобы всё находилось с первого раза.
Если коротко, то язык поисковых запросов (или человеко-машинный пиджин), конечно, отличается от литературного языка, но, судя по всему, его выразительных средств достаточно для решения поисковых задач пользователя.