Пояснительная бригада: что за трансформеры теперь задействованы в поиске «Яндекса»

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

Миша Тепловодский

Редактор «Комитета», посмотрел конференцию «Яндекса» семь раз

В конце осени прошла ежегодная конференция «Яндекса», на которой анонсировали новую версию поиска. Следом за словами управляющего директора о «главном прорыве в поиске за десять лет» шёл вдохновенный рассказ Екатерины Серажим — с её подачи ленты социальных сетей запестрели словом «трансформеры».

Екатерина Серажим на YAC 2020, в «Яндексе» она отвечает за качество ранжирования

Признаюсь: когда смотрел конференцию первый раз, понял лишь то, что алгоритм очень сложный и дорогой. И уже где-то в процессе разбора темы определил, на сколько лет я отстал в понимании — примерно на пять. Этот рубеж наложился на релиз нейросетевых алгоритмов, и для объяснения новых принципов работы нельзя обойтись без лёгкого погружения в тему машинного обучения.

Попробую избежать сложной терминологии и с предысторией объяснить, как теперь устроен поиск «Яндекса».

Как раньше работал поиск: краткое содержание предыдущих версий

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

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

С чего всё начиналось

Алгоритм работал, как обычный поиск по текстовому документу, только в совершенно другом масштабе. Смысл запроса он не понимал — искал ровно то, что ввели в поисковую строку. Это как найти букву «ú» в испанском словосочетании motor de búsqueda — язык для этого знать не нужно. Но пришлось убрать формальные барьеры, чтобы склонения или род не путали машину и слова «банановый» и «банановая» не считались чем-то из разных вселенных.

Когда пользователь вводил «рэп для мамы на восьмое марта», поисковик отбирал те страницы, где такие же слова встречаются часто, подряд или вообще составляют заголовок. Шорт-лист таких ссылок показывался пользователю, а тот, в свою очередь, становился объектом статистического эксперимента — на какую из десяти-двадцати он нажмёт? Страница, которая по одному и тому же запросу чаще получала клики, считалась более полезной и поднималась в выдаче.

В таком виде модель поиска могла споткнуться обо что угодно — для неё два очень похожих словосочетания «американские горки» и «парк аттракционов» были чем-то принципиально разным.

Думаю, многие на этом моменте могут вспомнить чувство, с которым в нулевых по пять-шесть раз пытались сформулировать свой запрос чуть иначе, меняя комбинации слов.

Следующие шаги: делаем вид, что алгоритм «понимает» смысл

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

Другой пример: правило с пугающим названием TF-IDF — это способ выявить ключевые слова, основываясь на частоте их использования в интернете. С ним алгоритм мог понять, что в запросе «как вывезти кота из Севастополя в Париж» предлог «из» играет минорную роль — в каких текстах он только не встречается. И, напротив, если в запросе и на сайте совпадает редкий термин, то приоритет такой страницы резко поднимается.

Шли годы, у «Яндекса» продолжала накапливаться внушительная статистика, что пользователи вводили и куда нажимали. Как её использовали, можно разобрать на примере статьи с vc.ru, но пока подержу в секрете, какой именно. Пользователи приходят на неё, например, после таких запросов в поисковике:

Пояснительная бригада: что за трансформеры теперь задействованы в поиске «Яндекса»

Я убрал самые очевидные запросы, но даже без них давние пользователи vc.ru могут догадаться, кто её автор. Проверим:

Опрос: кто этот «биохакер Серёжа»?
Сергей Полонский
Сергей Фаге
Сергей Брин

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

Ровно этим и начал заниматься «Яндекс» — автоматически склеивать запросы, по которым пользователям был интересен документ, и составлять из них «потайную» часть страницы. Её не видно, зато по ней работает поиск. И теперь на странице может не быть ни одного совпадения по словам, а он окажется в топе выдачи из-за совпадений в скрытой части.

А речь шла о статье Сергея Фаге, посвящённой биохакингу.

Почему этого оказалось недостаточно и пришлось обращаться к нейросетям

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

Она иллюстрирует, насколько разнообразными бывают запросы. Ежесекундно через выдачу «Яндекса» кто-то пытается зайти в популярнейшую социальную сеть, набирая её название в поисковой строке. Таких запросов-суперзвёзд не так уж много — они составляют клюв жар-птицы. Поисковику чисто статистически понятно, что от него хочет пользователь.

Пояснительная бригада: что за трансформеры теперь задействованы в поиске «Яндекса»

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

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

Нейросети для чайников: в паре слов о том, чем они занимаются

Если знакомы с базовыми принципами нейросетей, то нажмите сюда, чтобы пропустить эту часть.

Машинное обучение

Алгоритмы машинного обучения решают конкретную задачу. Нужно из сырого материала (данных) научиться строить правильный результат заранее неизвестным способом.

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

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

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

Не нужно даже быть специалистом, чтобы отличить фарфорового кота от обугленных осколков — инженеры часто поручают сбор примеров людям, далёким от мира разработки. Когда-нибудь искали на капче светофор?

Нейросети

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

Инженер нашёл миллион фотографий, где коты точно есть, и ещё миллион — где их нет, на каждой подписан правильный ответ. Дальше — предлагает роботам самим понять, в чём логика. И они в ходе обучения организуются в своеобразную штаб-квартиру с иерархией подчинения. Если честно, как они будут решать задачу — большая загадка. Но для простоты можно считать, что они объединяются в отделы поиска на фотографии изображений лап или, скажем, хвостов.

Роботы-начальники смотрят доклады огромного числа таких отделов: видны ли лапы, светятся ли глаза, есть на фотографии упавший с подоконника горшок. Затем «взвешивают» важность каждого из этих докладов и принимают финальное решение, попал ли кот в кадр.

Машины не знают, что такое «лапы»: все человеческие представления они обсуждают на математическом языке. Для машинной обработки нужно представить фотографию в виде набора точек (пикселей), цвета и яркости которых закодированы числами. А дальше толпа роботов сама будет искать в них закономерности — выделять контуры и считать расстояния между линиями. Нейросеть так и не научится понимать, что такое хвост (как биологическая часть тела), но контуры в виде изгибающейся трубочки могут стать для неё весомым аргументом.

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

Таким образом:

  • Человек не настраивает отдельные узлы нейросетевых алгоритмов, система настраивает себя сама в ходе обучения.
  • Машине нужно огромное число данных с правильными ответами (на порядки больше, чем взрослому человеку), чтобы понять логику и научиться решать задачу.
  • Пока текст или изображение не представить в виде чисел, нейросеть не сможет с ними работать.

Как сделать материал для работы нейросети из текста

В «Яндексе» сформулировали для нейросети текстовую задачку: разобраться, как по смыслу связаны поисковые запросы и тексты документов, на которые пользователи с них перешли. Для этого пришлось пройтись по базе данных, найти заголовки со всех сайтов и преобразовать их в числа, которые заменяют машинам смысл текста (сделав то же самое с запросами пользователей).

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

На этом этапе может возникнуть вопрос: а как вообще перевести смысл даже отдельного слова в числа, что они будут означать? Нейронная сеть решает эту задачу самостоятельно, так, как ей удобно. Но общий принцип можно пояснить на простом примере.

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

  • Работает: 5.
  • Сидит на vc.ru: 3.
  • Пьёт банановый смузи: 2. Это вообще стереотип.

Получится ряд оценок {5, 3, 2}, который сам по себе ни о чём не говорит. Зато мы можем сравнить его с другим рядом оценок: если допустить, что кот в теории может немного попить банановый смузи, то у него будет {0, 0, 1}. А у меня — {5, 5, 2}, вот уж кто вообще не вылезает с vc.ru.

Можно составить трёхмерное пространство и невооружённым глазом убедиться, что я ближе к предпринимателю, чем кот:

Трёх параметров мало для адекватной оценки «близости» всех слов: в этой системе кот не будет сильно отличаться от прикроватной тумбочки
Трёх параметров мало для адекватной оценки «близости» всех слов: в этой системе кот не будет сильно отличаться от прикроватной тумбочки

Получается, что машина так и не поймёт суть этих слов. Но сможет представить, насколько они близки по смыслу, — это уже подобие ассоциативных принципов работы мозга. Расстояние между точками в этом пространстве можно вычислить, и по нему машина измерит глубину их связи. Чем больше признаков, тем адекватнее получится облако ассоциаций.

Последовательности чисел (как в примерах выше) — это математические векторы, с которыми можно совершать все привычные операции: перемножать их, складывать, вычитать — одно удовольствие работать. Если взять два слова и сложить группы их чисел (по правилу сложения векторов), то получится новая числовая последовательность. Её координаты будут описывать уже общий смысл словосочетания, хотя и с небрежностью. К примеру, порядок слов в этом словосочетании никак не будет учтён.

Значит, переводим тексты в числа. И как это помогает?

У «Яндекса» есть на руках миллиарды пар запросов и заголовков, на которые пользователь в итоге «клюнул». Не нужно разбираться, что между ними есть связь, — раз пользователь зашёл, то на это были причины. Осталось найти закономерности в том, как эти пары связаны.

И запросы, и результаты представляют собой небольшие тексты — их подготовили одинаковым образом, как будто пропустив через разные «шредеры». Текст (словосочетание или предложение) разбили по кусочкам из трёх букв, слов, словосочетаний — использовали сразу несколько способов нарезки, в надежде, что нейросеть разберётся сама, что ей удобнее. И отдали материал.

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

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

Параллельно пришлось думать, как всё это обрабатывать в реальном времени — пользователь не будет ждать, пока машина поработает с трёхсотмерным пространством и найдёт там подходящий сайт. Сначала нейросеть включалась только на последнем этапе, ранжируя около сотни сайтов. Затем её создатели провели большую «домашнюю работу», выполнив вычисления заранее, и нейросетевое ранжирование перенеслось на ранние этапы обработки запроса. Там они отыскивали свою прелесть уже среди сотен тысяч сайтов.

Хотите сказать, что и этого было мало? Зачем ещё нейросети?

У нейросетей предыдущего поколения были свои недостатки: они не очень уверенно выявляли суть текста и теряли последовательность слов. Последнее может быть важно при запросе «поезд Москва Санкт-Петербург», когда пользователь уже указал нужное направление поездки. Да и поисковики всё чаще используют как мудреца или советчика. К примеру, когда пытаются напеть туда «что за песня ту ру рум».

Пояснительная бригада: что за трансформеры теперь задействованы в поиске «Яндекса»

Поздравляю, мы добрались до места, с которого начинается часть конференции «Яндекса» про YATI — ещё одну нейросеть с улучшениями. Её название примерно так и переводится.

В новой версии используются нейросети-трансформеры — тяжёлая артиллерия. Они устроены так, что общий посыл текста вычисляется не суммированием векторов слов, а обработкой каждого из них по отдельности, учитываются даже знаки препинания. А ещё такой алгоритм включает механизм «внимания», заостряя взгляд на значимых фрагментах текста. Всё это требует многократно большей вычислительной мощности, с чего и начался рассказ на YAC.

Физическое воплощение

Мы брали по восемь GPU-ускорителей, «связывали» их в одну плату и устанавливали в сервер. Затем такие серверы устанавливаются в стойки, очень близко друг к другу, и тесно обматываются друг с другом сетью.

Екатерина Серажим, отвечает за качество ранжирования в «Яндексе»

Сегодня архитектурные принципы центральных (CPU) и графических процессоров (GPU) довольно сильно отличаются. В центральных работают мощные ядра, которые справляются с тяжёлыми вычислениями и умеют перекидывать друг на друга работу — но таких «силачей» там немного. А создатели видеокарт, старавшиеся поднять производительность в компьютерных играх, перешли к схеме из тысяч слабых ядер — каждое из них обрабатывает отдельные пиксели или элементы картинки.

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

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

Логика работы

Для YATI мы показывали не просто текст какого-то документа, а реальные поисковые запросы и тексты документов, которые видели наши пользователи. И просили его угадывать, какой из них понравился бы пользователю. Следом мы доучили трансформер. У нас есть эталон — экспертная разметка, наши асессоры по сложной шкале оценивают, насколько документ релевантен запросу. Теперь трансформер должен был угадать эту экспертную оценку.

Екатерина Серажим, отвечает за качество ранжирования в «Яндексе»

В этой части принципиальных изменений по сравнению с предыдущим поколением нейросетей немного. Новый алгоритм всё ещё занимается переводом текстов в группы чисел. А затем вычисляет смысловую близость и вероятность клика пользователя.

В этот раз активнее использовались данные, размеченные пользователями «Яндекс.Толоки» (сервис, где пользователи могут подзаработать, решая простые задачки, одновременно снабжая нейросети правильными ответами) и экспертами — асессорами. Асессоры получают на руки конкретный поисковый запрос, а потом изучают несколько десятков документов на соответствие ему — какой лучше ответит на вопрос пользователя.

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

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

Первые результаты и немного планов на будущее

Внутренние тесты «Яндекса» показали, насколько впечатляющие результаты показывает трансформер. Если из всей смеси способов ранжировать выдачу выключить все, кроме него, то качество результата упадёт всего на 4–5%. То есть первый релиз трансформера в одиночку работает почти так же, как тысячи придуманных способов последних двух десятилетий.

А в сочетании со старыми методами уровень качества достигает 95,4%. Что тогда считается 100%-м результатом? Он бы получился, если бы выдачу полностью вручную составили живые рецензенты и ранжировали документы по убыванию оценок. А вклад нейросети составляет уже около 50%, хотя раньше был в пять раз меньше.

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

7373
11
72 комментария

А если вы хотите более технический рассказ про YATI - его можно прочитать вот здесь: https://habr.com/ru/company/yandex/blog/529658/

5
Ответить

Яндекс — молодец! 
Осталось перестать подмешивать свои сервисы в топ в обход нового алгоритма.
Плюс убрать из топа сайты, использующие накрутку ПФ. 

47
Ответить

Комментарий недоступен

14
Ответить

Согласен, пока не уберут эту часть кода поисковой машины: «Если у нас есть такой сервис, все бесплатные варианты идут на х.., точнее на вторую и следующие страницы выдачи», все напрасно.

3
Ответить

Когда острова запускали, тоже был молодец. Только где они?

Ответить

Не пользуюсь яндексом принципиально. Только Google - в нём больше подходящих ссылок находит, тогда как в яндексе таких выдач нет.

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

25
Ответить