Как создать семантический движок для лучшего поиска

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

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

Наш первый конвейер Retriever-Reader

Те из вас, кто уже пробовал Haystack, будут знакомы с конвейером Retriever-Reader, с которого мы начали. Вы начинаете с сохранения данных в хранилище документов, которое может быть базой данных в Elasticsearch, SQL, Milvus или FAISS. Вы используете Retriever, чтобы быстро просмотреть все ваши документы и вернуть несколько наиболее подходящих. Затем вы применяете Reader и возможности современных моделей ответов на вопросы, чтобы внимательно читать каждое предложение и выделять части, которые отвечают на ваш вопрос. Уже с этим дизайном мы выходим за рамки восприятия текста как мешка слов и признаем, что структура предложения и значение слова являются неотъемлемой частью построения потока идей. Теперь мы можем задавать полностью грамматические вопросы во время поиска и решать сложные и подробные запросы, которые выходили за рамки CTRL + F.

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

Генератор

То, как эта важная часть информации сформулирована в вашем тексте, не обязательно может соответствовать тому, как вы хотите, чтобы она возвращалась. Возможно, ответное предложение содержит больше информации, чем вам нужно, или ответ можно вывести только после прочтения нескольких разделов текста. Вот что побудило нас включить Генератор в Стог сена. Вместо того, чтобы просто выделять фрагмент текста в ваших документах, он будет составлять ответ, основанный на документах, которые поисковик считает релевантными, а также на формулировке запроса. Наша первая итерация этого стиля ответов на вопросы основана на документе Расширенный генератор поиска, выпущенном в мае 2020 года, который продемонстрировал некоторые очень впечатляющие возможности. Генератор служит очень стильной альтернативой более прямому Reader, и по мере роста области генеративных исследований мы полагаем, что эти модели будут становиться все более мощными.

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

Сумматор

Сводки существуют, потому что они помогают нам ориентироваться в больших объемах текста. Новостные статьи имеют заголовки и подзаголовки, чтобы понять, что будет дальше, в два предложения. Академические статьи начинаются с аннотаций, чтобы вы могли быстро взглянуть на вопросы, которые они решают, и на успех их экспериментов. Ценность этого не упустили эксперты по машинному обучению, которые разработали все более совершенные модели, которые дают вам быстрый и точный обзор, и мы включили их в Haystack, чтобы вы могли посвятить свое время чтению только документы, которые важны для вас. В нашей реализации по умолчанию используется модель Пегаса от Google, но можно использовать модели из концентратора моделей Transformers, просто указав название модели.

Конвейеры - Соединитель

Все строительные блоки, которые мы упомянули до сих пор, могут сыграть свою роль в помощи вам в навигации по большим стопкам текста, и мы не считаем, что вам придется выбирать между ними. Фактически, они часто дополняют друг друга, и пользователи Haystack должны иметь свободу определять свои собственные комбинации. Наши конвейеры позволяют именно это. Используя гибкость направленных ациклических графов, вы можете легко склеивать строительные блоки для создания мощных конвейеров. Вы можете направлять входы и выходы каждого компонента, сохранять эти конфигурации и визуализировать свои проекты. В конечном счете, не мы говорим вам, что должен возвращать ваш поиск, мы хотим дать вам возможность узнать сами!

В одном случае, когда мы увидели необходимость в такой гибкости, были клиенты, которые не хотели жертвовать производительностью при выборе подходящего ретривера. Сложные методы машинного обучения (например, Dense Passage Retrieval) и методы на основе ключевых слов (например, алгоритм BM25, встроенный в Elasticsearch) имеют свои соответствующие преимущества. С помощью конвейеров теперь можно передать запрос нескольким Retriever'ам и объединить их результаты, прежде чем направлять его следующему компоненту. Это всего лишь одна из многих возможных настроек, и мы очень рады видеть, насколько творчески это проявится, когда наши пользователи смогут смешивать и сопоставлять модули.

Что нас ждет?

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

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

Эта философия задействовать тяжелую технику только тогда, когда это необходимо, также лежит в основе нашего интереса к методам повторного ранжирования. После того, как Retriever просканировал выборку соответствующих документов, вам может потребоваться более тщательный анализ их полезности. Используя мощную архитектуру преобразователя, последние версии Rerankers будут внимательно читать только извлеченные документы и ранжировать документы от наиболее до наименее релевантных, что позволяет быстрее перейти к нужному документу.

Наконец, мы считаем, что НЛП не является синонимом английского НЛП. Мы стараемся использовать любые многоязычные, межъязыковые или предметно-ориентированные технологии, которые могут расширить возможности поиска Haystack на ранее неподдерживаемые языки. С этой целью мы следим за новейшими технологиями перевода, постоянно тестируем многоязычные модели и сотрудничаем для обучения многоязычным вариантам ранее одноязычных моделей.

Заключение

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