Новый уровень поиска. Exploratory search
Бывает у вас такое, что нужно найти какую-то информацию, а не знаешь, как составить запрос? Такое обычно встречается на разных форумах, таких как ТопЛиба, где люди помогают друг другу найти книги по расплывчатым обрывкам воспоминаний.
Хочется, чтобы в наш век продвинутых технологий такой запрос можно было бы адресовать поисковику, и он бы справился. И кажется, что эта реальность уже не за горами.
Краткое введение
У меня встреча с разведочным поиском (в литературе можно встретить «исследовательский поиск», это то же самое) произошла почти случайно, в процессе обсуждения с коллегами темы для написания магистерской диссертации. Мне тогда подкинули вот какую задачу: есть некая папка с кучей презентаций на разные темы, надо найти нужную, но в памяти осталось только то, что она на десять минут, кажется, про железнодорожный транспорт и там был пример патента на тормоза для поезда. Обычный поиск по файлам не факт, что даст что-то ценное (в частности, потому что в половине случаев патент был не на тормоза, и презентация вообще про самолеты, но память – штука сложная). Нужно что-то придумать, чтобы поиск работал даже так.
Это и есть задача для разведочного поиска. Разведочный поиск (Exploratory Search) – часть области извлечения информации (information retrieval), направленная на решение задач поиска в области, с которой пользователь незнаком, в силу чего не может составить строгий запрос, а должен осуществлять поиск последовательно, в несколько этапов, на каждом из которых он будет получать больше данных для следующего поиска.
Одна из ключевых публикаций по теме – «Exploratory Search. Beyond the Query–Response Paradigm» («Разведочный поиск. За пределами парадигмы «Запрос-Ответ»). В этой публикации авторы определяют разведочный поиск и очерчивают набор областей, которые он затрагивает.
Мне кажется, что из всех областей можно выделить шесть ключевых:
- обработка естественного языка (NLP);
- взаимодействие «человек-компьютер»;
- когнитивная психология;
- анализ данных;
- извлечение информации;
- UX / UI дизайн (функционал и внешний вид интерфейса).
Существует множество разных подходов к разведочному поиску, которые концентрируются в большей степени на отдельных его областях. Вот, например, некоторые из них:
- интерактивное извлечение информации (Interactive Information Retrieval). Предполагает, что у пользователя должна быть возможность улучшать запрос шаг за шагом, улучшая результат (поисковую выдачу). Это сама по себе междисциплинарная область, которая использует два вида моделей: когнитивные (для изучения процессов мышления пользователя в ходе поиска) и модели взаимодействия пользователя с поисковой системой на разных уровнях (на уровне системного интерфейса, обстоятельств поиска, мотивации пользователя и т.д.);
- когнитивные модели поиска (Cognitive Information Retrieval) можно рассматривать отдельно, уделяя больше внимания человеческому поведению и процессам восприятия информации и обучения;
- эволюционная модель («berrypicking»). Мой перевод может быть не вполне корректным, но идея заключается в том, что в процессе поиска пользователь получает дополнительную информацию и добавляет ее в запрос, чтобы получить больше информации на следующем этапе. Аналогия со сбором ягод в том, что информация собирается «по ягодке», процесс поиска нелинейный, пользователь не может получить большой блок информации целиком за один запрос;
- информационно-продовольственная теория (в переводах встречатся как «теория охоты на информацию», что мне больше нравится; Information Foraging). Сравнивает поведение человека, который ищет информацию, с поведением животного, которое ищет еду. И те, и другие стараются потратить меньше времени с максимальной выгодой для себя. Авторы концепции вводят такие понятия как «запах информации» (information scent) – указания на то, что пользователь движется в нужном направлении, – и «информационная среда» (environment), которая разделена на участки. Каждый участок содержит определенное количество информации, и пользователь решает, оставаться на нем или двигаться дальше, если с участка собран максимальный объем информации;
- подход, основанный на прототипах (Archetype-Based Approach). Главная идея заключается в том, чтобы для темы поиска собрать набор документов, которые точно к ней относятся, и извлекать из них ключевые слова, и осуществлять на их основе поиск;
- подход, основанный на иерархическом моделировании (Hierarchical Topic Modeling-Based Approach). В России этой темой активно занимается Константин Воронцов с коллегами. Они предложили поисковый движок, который поддерживает каскадный поиск – пошаговый переход от более ширкой области к более узким до тех пор, пока цель поиска не будет достигнута.
Переход к языковым моделям
Как вы уже, полагаю, догадались, разведочный поиск – это очень широкая область. В нее входят исследования, которые изучают паттерны движения курсора компьютерной мыши пользователя или движения глаз во время поиска; комфорт использования интерфейса в зависимости от расположения его элементов; психологию процессов поиска и много чего еще. Я не буду даже пытаться охватить всё.
Мне наиболее интересна обработка естественного языка и большие языковые модели в частности (если вы еще не читали мои посты про внутреннее устройство GPT и промпт-инжиниринг, советую их к прочтению). Поэтому в этом посте я сосредоточусь именно на использовании больших языковых моделей в рамках разведочного поиска и постараюсь сделать краткий обзор их применения.
Придется снова сделать оговорку: всеобъемлющий обзор коротко написать не получится, слишком много этих областей применения. Мне понравился перечень, приведенный в статье «Large Language Models and Search» («Большие языковые модели и поиск»). Он, кажется, достаточно полный:
- генерация ответа, дополненная результатами поиска (Retrieval-Augmented Generation);
- понимание запросов (Query Understanding);
- создание указателей (Index Construction);
- ранжирование результатов поиска по релевантности запросу (Re-ranking);
- сжатие поисковой выдачи (Search Result Compression).
Генерация ответа, дополненная результатами поиска – это большая и интересная тема. Если коротко, это та исследовательская область, в которой к языковой модели стараются прикрутить поисковик. У меня есть несколько интересных статей, и более подробно на эту тему я напишу в своем телеграм-канале. Во-первых, этот пост задумывался как обзорный, без погружения в конкретные нюансы, во-вторых, надо как-то читателей в телеграм заманивать.
Не очень красивое сокращение («RAG» переводится как «тряпье» или «лохмотья») получилось по недосмотру: авторы просто не подумали, что вскоре после публикации работы RAG станет популярной и активно растущей областью исследований. Бывает, что уж. У меня как-то в процессе работы над одним из проектов получилась метрика WTF (соблазн ее оставить в неизменном виде был велик).
Одно из преимуществ RAG – снижение вероятности получить галлюцинации в ответ на запрос, потому что модель берет информацию из дополнительного источника и опирается не только на свои собственные знания. Конечно, полностью извести галлюцинации таким образом пока не получается, но направление важное и перспективное.
Понимание запросов включает в себя переписывание запроса пользователя, например, добавление в него релевантных области терминов или уточнение. Предполагается, что пользователь получает переписанный запрос и соглашается с ним или вносит дополнительные изменения, чтобы получилось ровно то, что нужно.
К этой же области относится, например, дополнение запроса (когда вы вводите часть запроса, и поисковик предлагает продолжение), расширение запроса (например, когда вы ищете конкретную модель компьютера, а поиск помимо нее возвращает еще другие модели той же линейки, потому что «понимает», что искомая модель относится к этой линейке), выявление намерения поиска (например, вы вводите модель компьютера, а поисковик возвращает список магазинов, где можно такой купить, потому что предполагает, что вы хотите именно этого) и так далее.
Создание указателей важно для ускорения процесса поиска в дальнейшем. В самом простом варианте для каждого термина собирается перечень документов, в которых он есть. В более сложных можно создать такой указатель для отдельных частей большого документа и сделать саммари, релевантное поисковому запросу пользователя (извлечь из большого документа именно то, что нужно). Еще можно с помощью указателя перевести данные из табличного формата в текстовый и дать возможность пользователю обращаться к таблице с данными запросом, сформулированным обычным человеческим языком. Что-то такое прикрутили к pandas сравнительно недавно.
Ранжирование результатов поиска позволяет улучшить точность выдачи поисковой системы в соответствии с запросом пользователя.
Сжатие поисковой выдачи проще всего понять на примере Perplexity: вы ему запрос, он вам саммари из нескольких источников. И собственных галлюцинаций. Поэтому надо проверять внимательно и иногда спрашивать, откуда он взял ту или иную информацию. Подробнее про Perplexity и некоторые другие инструменты у меня вот тут. Perplexity, кстати, использует RAG.
Заключение
Поисковые движки постоянно совершенствуются. Как только появляется какая-нибудь новая технология, сразу появляется идея того, как бы ее применить для усовершенствования поисковых систем. Это одна из областей, за которыми совершенно точно нужно следить внимательно.