Основы векторного поиска с использованием искусственного интеллекта |
||
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2024-08-20 11:47 компьютерная лингвистика, алгоритмы машинного обучения, поисковые системы Как современный бум искусственного интеллекта произвел полную революцию в поисковых приложениях... Этот информационный бюллетень представлен Rebuy , коммерческой компанией, занимающейся искусственным интеллектом. Если вам нравится информационный бюллетень, подпишитесь ниже, свяжитесь со мной или подпишитесь на меня на Medium , X и LinkedIn . Я изо всех сил стараюсь создавать полезный/информативный контент. (из [2]) Недавний бум генеративного искусственного интеллекта и появление больших языковых моделей (LLM) заставили многих задуматься об эволюции поисковых систем. Смогут ли LLM, основанные на диалоге, заменить традиционные поисковые системы, или склонность этих моделей к галлюцинациям сделает их ненадежным источником информации? В настоящее время ответ на эти вопросы неясен, но быстрое внедрение поисковых систем, ориентированных на искусственный интеллект, таких как you.com и perplexity.ai, указывает на широкий интерес к дополнению поисковых систем современными достижениями в области языковых моделей. Однако по иронии судьбы мы уже много лет активно используем языковые модели в поисковых системах ! Предложение BERT [1] привело к ступенчатому улучшению нашей способности оценивать семантическое текстовое сходство, в результате чего эти языковые модели были приняты различными популярными поисковыми системами ( включая Google !). В рамках этого обзора мы проанализируем компоненты таких поисковых систем на базе искусственного интеллекта. Основные компоненты поисковой системы Поиск и ранжирование в поисковой системе Поисковые системы — одно из старейших и наиболее широко используемых приложений машинного обучения и искусственного интеллекта. Большинство поисковых систем состоят из двух основных компонентов (изображенных выше):
В зависимости от нашего варианта использования общее количество документов, по которым мы осуществляем поиск, может быть очень большим (например, все продукты на Amazon или все веб-страницы в Google). Таким образом, поисковый компонент поиска должен быть эффективным — он быстро идентифицирует небольшое подмножество документов, имеющих отношение к запросу пользователя . После того как мы определили меньший набор документов-кандидатов, мы можем использовать более сложные методы, такие как более крупные нейронные сети или больше данных , чтобы оптимально упорядочить набор кандидатов таким образом, чтобы он был персонализирован и соответствовал запросу пользователя. Подробнее. Интуитивная идея поиска проста, но существует множество различных подходов к поиску и ранжированию; см. выше. Некоторые из этих подходов являются более традиционными и полагаются только на базовое машинное обучение, в то время как другие активно используют современные разработки в больших языковых моделях. Другими словами, количество «ИИ», присутствующего в «поиске с помощью ИИ», является переменным. Теперь мы кратко рассмотрим эти методы, чтобы лучше понять их. Структура задачи поиска В качестве краткого заявления об отказе от ответственности мы предполагаем, что базовая структура поиска включает в себя запрос пользователя, а также несколько документов, которым мы пытаемся сопоставить этот запрос; см. выше. Мы предполагаем, что все запросы и документы содержат чисто текстовые данные. На протяжении всего обзора мы также будем использовать термины «документ» и «предложение» как взаимозаменяемые; например, мы могли бы использовать «сходство предложений» для обозначения поиска схожих последовательностей текста, таких как документ и запрос. Лексический поиск Традиционный подход к созданию поисковой системы основан на сопоставлении слов в запросе пользователя со словами в документе. Этот подход, называемый лексическим (или разреженным) поиском, опирается на структуру данных, называемую инвертированным индексом, для эффективного сопоставления ключевых слов. Инвертированный индекс просто содержит список слов и сопоставляет каждое слово со списком мест, в которых оно встречается в различных документах. Используя эту структуру данных, мы можем эффективно сопоставлять термины с документами, в которых они встречаются, и даже подсчитывать частоту употребления терминов в каждом документе. Редкий поиск. Чтобы понять, почему этот процесс называется разреженным поиском, нам сначала нужно понять, как мы представляем наши данные. Алгоритмы лексического поиска основаны на частоте слов. Если слово часто встречается как в запросе пользователя, так и в конкретном документе, то этот документ может подойти! Чтобы представить пространство возможных слов, которые могут существовать в запросе или документе, мы определяем словарь соответствующих слов фиксированного размера; см. ниже. Создание общего словаря слов в документах Отсюда мы можем представить последовательность текста (т. е. запрос или документ) с помощью вектора, содержащего запись для каждого слова в нашем словаре. Затем каждая из этих записей может быть заполнена числом (возможно, нулевым), соответствующим частоте этого слова в тексте. Поскольку наш словарный запас велик и в любом документе встречается лишь (относительно) небольшое количество слов, такое векторное представление является относительно редким . Этот метод создания векторного представления, называемый моделью «мешка слов» , лежит в основе методов разреженного поиска. Формула для расчета баллов BM25 между запросом и документом Учитывая представление запроса в виде пакета слов и набора документов, основным алгоритмом, используемым для выполнения разреженного поиска, является алгоритм ранжирования BM25 ; см. выше. Оценки BM25 полностью основаны на подсчете. Мы оцениваем документы, i) подсчитывая слова, которые встречаются одновременно в запросе и документе, и ii) нормализуя эти подсчеты с помощью таких показателей, как обратная частота документов (т. е. присваивание более высоких оценок словам, которые встречаются реже) и относительная длина документа. Хорошо ли это работает? Хотя существуют и другие алгоритмы разреженного поиска (например, TF-IDF ), BM25 достигает впечатляющей производительности. Фактически, BM25 — это трудный базовый уровень даже для более сложных методов разреженного поиска и современных подходов , использующих глубокое обучение; см. ниже. Несмотря на свою простоту, этот алгоритм работает невероятно хорошо и даже сегодня остается основой многих поисковых систем. (из [17]) Практическая реализация. Помимо хорошей производительности, BM25 поддерживается основными поисковыми инструментами, такими как Elastic и RediSearch . Используя эти инструменты, реализация лексического поиска становится одновременно эффективной и простой. Мы просто:
Отсюда инвертированный индекс будет создаваться асинхронно по документам в нашей базе данных, и мы сможем выполнять поиск с помощью BM25 с помощью абстрактного (и простого в использовании) языка запросов. Для получения более подробной информации ознакомьтесь с руководством по коду ниже. Лексический поиск с RediSearch Добавление «ИИ» в поисковую систему BM25 — это алгоритм машинного обучения, и мы можем улучшить его производительность, используя общие методы обработки данных, такие как стемминг , лемматизация , удаление стоп-слов и многое другое. Однако называть BM25 алгоритмом поиска на базе искусственного интеллекта было бы несколько преувеличением. Итак, мы можем задаться вопросом: как мы можем создать более разумный алгоритм поиска? Короткий ответ: мы можем использовать глубокое обучение для улучшения процесса поиска и ранжирования. В частности, для этой цели мы используем два типа моделей — бикодеры и кросскодеры — обе из которых обычно реализуются с использованием моделей «только кодер» (BERT) [1]. Бикодеры составляют основу плотного поиска.1алгоритмы. На простейшем уровне бикодеры принимают на вход последовательность текста и на выходе создают плотный вектор. Однако векторы, создаваемые бикодировщиками, являются семантически значимыми — аналогичные последовательности текста создают векторы, находящиеся поблизости в векторном пространстве при обработке бикодером . В результате мы можем сопоставлять запросы с документами, встраивая как бикодировщик, так и выполняя векторный поиск для поиска документов с наибольшим косинусным сходством.2относительно запроса; см. ниже. Структура биэнкодера Используя такие алгоритмы, как иерархическое навигационное маленькое слово (HNSW) [6], мы можем эффективно выполнять приблизительный поиск векторов ближайших соседей. Подобно выполнению лексического поиска, мы можем хранить векторы документов в базе данных, такой как Elastic или RediSearch, и создавать поисковый индекс HNSW. Затем векторный поиск может быть выполнен посредством i) использования бикодера для создания вектора для запроса пользователя и ii) выполнения векторного поиска для поиска наиболее похожих документов; см. ниже. Конвейер векторного поиска с бикодеромКросс-кодировщики похожи на бикодеры в том, что они позволяют нам оценивать сходство между двумя последовательностями текста. Однако вместо того, чтобы отдельно создавать вектор для каждой текстовой последовательности, кросс-кодировщики принимают обе текстовые последовательности, используя одну и ту же модель; см. ниже. Модель обучена прогнозировать точную оценку сходства для этих текстовых последовательностей. Кросс-кодировщики могут более точно предсказывать текстовую схожесть по сравнению с би-кодировщиками. Однако поиск подобных документов с помощью кросс-кодировщика требует гораздо больше вычислительных затрат! Структура кросс-кодировщикаА именно, бикодеры можно комбинировать с векторным поиском для эффективного обнаружения похожих документов, но кросскодеры требуют, чтобы каждая текстовая пара проходила через модель для получения оценки. Поиск документа, наиболее похожего на запрос пользователя, с помощью перекрестного кодировщика требует, чтобы мы итеративно вычисляли сходство между запросом и каждым документом. Учитывая, что это будет невероятно дорого, кросс-кодировщики обычно применяются только на этапе ранжирования поиска. После того, как мы получили набор соответствующих документов-кандидатов, мы можем передать эти документы через перекрестное кодирование для более точного повторного ранжирования. Простая платформа для поиска на основе искусственного интеллекта Как уже говорилось, поисковые системы состоят из двух основных компонентов: поиска и ранжирования. Чтобы создать базовую поисковую систему на базе искусственного интеллекта, в процессе поиска будут использоваться оба:
Мы объединяем результаты этих двух алгоритмов поиска, взяв взвешенную сумму оценок каждого документа из BM25 и векторного поиска. Сочетание лексического и векторного поиска обычно называют гибридным поиском . Поисковая система на базе искусственного интеллекта В результате поиска мы получаем меньший набор документов-кандидатов, которые можно ранжировать с помощью перекрестного кодировщика, который более точно сортирует результаты поиска на основе текстовой релевантности; см. выше. Такая система использует глубокое обучение как при поиске, так и при ранжировании, образуя настоящую поисковую систему на базе искусственного интеллекта. Этот обзор посвящен пониманию того, как глубокое обучение можно использовать для создания лучших алгоритмов поиска. В первую очередь мы сосредоточимся на поисковом компоненте поиска — обучении бикодеров векторному поиску . Тем не менее, также будут предоставлены дополнительные материалы для чтения для ранжирования с помощью перекрестных кодировщиков. Использование BERT для поиска Как упоминалось ранее, большинство широко используемых би-кодеров и кросс-кодеров основаны на BERT [1]. Таким образом, важно понимать архитектуру только кодировщика и стратегию самоконтролируемого обучения BERT. Теперь мы предоставим обзор BERT и того, как его можно (или нельзя) использовать в поиске. Архитектура только для кодировщика Архитектура трансформатора, состоящая только из энкодера Хотя исходная архитектура преобразователя содержит как кодер, так и декодер, BERT [1] использует архитектуру только с кодером; см. выше. Архитектура, состоящая только из кодировщика, просто содержит несколько повторяющихся уровней двунаправленного самообслуживания и преобразования с прямой связью, за которыми следуют остаточное соединение и нормализация уровня . Давайте углубимся в каждый из этих компонентов. Токенизация текстовой последовательностиСоздание входных данных. Первым шагом в понимании архитектуры, предназначенной только для кодировщика, является понимание того, как устроены ее входные данные. На простейшем уровне входные данные преобразователя, предназначенного только для кодирования, представляют собой просто последовательность текста. Однако мы используем токенизатор — обычно токенизатор BPE или SentencePiece.3— разбить этот текст на последовательность токенов (т.е. слов и подслов); см. выше. Важно отметить, что ко входным данным BERT добавляется несколько «специальных» токенов, в том числе:
Создание последовательности встраивания токенов Затем мы можем внедрить каждый из этих токенов, выполнив поиск в большом слое внедрения , формируя последовательность векторов токенов, которые подаются в модель в качестве входных данных; см. выше. Однако перед приемом в модель к каждому из этих внедрений токенов должно быть добавлено позиционное внедрение , которое позволяет модели понять положение каждого токена в базовой последовательности. Двунаправленное внимание к себе. Понимание внутренней работы механизма внимания к себе выходит за рамки этой статьи; см. здесь для более полной разбивки. Однако на высоком уровне цель самовнимания состоит в том, чтобы преобразовать представление каждого токена путем рассмотрения других токенов в последовательности. В случае двунаправленного4самовнимание, представление каждого токена преобразуется с учетом всех других токенов в последовательности, включая те, что до и после текущего токена; см. выше. Таким образом, представление каждого токена может быть основано на всей входной последовательности. Прямое преобразование из модели BERT Преобразование с прямой связью. Напротив, преобразование с прямой связью в архитектуре, состоящей только из кодировщика, играет несколько иную роль. А именно, эта операция является точечной, что означает, что одно и то же преобразование применяется к каждому вектору токена в последовательности. Преобразование рассматривает только один вектор токена и применяет к вектору последовательность линейных преобразований — обычно два линейных слоя, разделенных функцией активации ReLU , с последующей нормализацией. Пример такого преобразования приведен выше. Два основных компонента трансформаторного блока только для энкодера Собираем все вместе. Двунаправленное самообслуживание и преобразования с прямой связью играют особую и важную роль в преобразователе, предназначенном только для кодера. Компонент самообслуживания изучает полезные шаблоны, рассматривая контекст других токенов в последовательности, тогда как преобразование с прямой связью учитывает только отдельные токены. Вместе эти операции позволяют модели точно моделировать сложные закономерности во всей входной последовательности. Создание векторных вложений. Прежде чем двигаться дальше, нам нужно обсудить, как можно использовать BERT для создания векторного внедрения последовательности текста. Такой подход используется бикодировщиками для создания векторов, которые можно использовать для векторного поиска. Каждый уровень модели BERT принимает последовательность векторов токенов в качестве входных данных и создает последовательность векторов токенов одинакового размера в качестве выходных данных. Таким образом, выходные данные BERT представляют собой последовательность векторов токенов, и каждый промежуточный уровень в модели создает последовательность векторов одинакового размера; см. ниже. Чтобы преобразовать эти списки векторов токенов в одно вложение, представляющее полную входную последовательность, мы должны выполнить какую-то операцию объединения. При использовании BERT обычно используются три стиля объединения:
Каждый из этих подходов показан на рисунке ниже. В целом, выбранный стиль объединения не оказывает существенного влияния на производительность. Однако получение среднего значения по векторам выходных токенов (т. е. подход № 2) на сегодняшний день является наиболее распространенным подходом для создания вложений текста с помощью BERT. Объединение подходов для создания вложений предложений с помощью BERT BERT: Предварительная подготовка глубоких двунаправленных преобразователей для понимания языка [1] Предварительная подготовка и точная настройка BERT (из [1]) Теперь, когда мы понимаем архитектуру преобразователя, состоящего только из энкодера, понять BERT довольно легко. BERT — это просто преобразователь, предназначенный только для кодировщика, который мы предварительно обучаем с использованием нескольких целей с самоконтролем и настраиваем — или дополнительно обучаем модель (обычно с контролируемой целью) — для решения какой-либо последующей задачи; см. выше. Цели предварительной подготовки с самоконтролем, используемые BERT (показаны ниже), включают:
Ни одна из этих задач не требует участия человека. Скорее, «метки», которые мы используем для предварительного обучения модели, неявно присутствуют в необработанных текстовых данных, что позволяет обучать модель на огромном текстовом корпусе, загруженном из Интернета. В случае BERT этот корпус представляет собой всю английскую Википедию и BookCorpus ! Цели предварительной подготовки с самоконтролем для BERT Почему BERT так хорош? BERT был одной из первых языковых моделей на основе преобразователей.5использовать предварительное обучение с самоконтролем на больших объемах необработанных текстовых данных. Такой подход оказался весьма эффективным, поскольку BERT установил новый уровень производительности для всех задач, рассмотренных в [1]; см. ниже. Производительность BERT при точной настройке различных последующих задач (из [1]) Проще говоря, мы можем точно настроить предварительно обученную модель BERT для решения множества различных задач классификации на уровне предложений и токенов с невероятно высокой точностью. По этой причине BERT произвел революцию в исследованиях в области обработки естественного языка, заменив множество специфичных для предметной области методов единой моделью, которая может решить практически все задачи ! В [1] были предложены два разных размера BERT:
Примечательно, что база BERT имеет тот же размер, что и исходная модель GPT , которая была одной из основных базовых линий, используемых для сравнения на момент предложения BERT. Варианты БЕРТ. Благодаря огромному успеху BERT и широкой популярности, которую он приобрел в исследованиях ИИ, было создано множество вариантов этой модели. Например, RoBERTa [3] — это популярный вариант BERT, который тщательно изучает процесс предварительного обучения BERT и обнаруживает, что лучшая модель может быть получена путем предварительного обучения на большем количестве данных и тщательной настройки обучающих гиперпараметров.6. Основные изменения, внесенные RoBERTa в процедуру предварительной тренировки:
Идя дальше, ALBERT [19] представляет собой вариант BERT, который предлагает метод уменьшения параметров, позволяющий сделать предварительную подготовку BERT быстрее и менее интенсивно использовать память. Полученная модель превосходит BERT по ряду тестов, несмотря на меньшее количество параметров. Кроме того, mBERT — многоязычная версия исходной модели BERT — была выпущена (теми же авторами) вскоре после предложения BERT, предварительно обучена совместно на многих языках и использует общий словарь и пространство встраивания для разных языков. Проще говоря, mBERT — это единая модель BERT, которая изучает унифицированные представления на большом количестве языков .
Наконец, XLM-R [21] совершенствует mBERT, создавая многоязычную версию модели RoBERTa. Для достижения более высокой производительности эта модель предварительно обучается на многоязычных данных из Common Crawl , тогда как mBERT обучается на гораздо меньшем (то есть, примерно в 100 раз меньшем, если быть точным) наборе данных Википедии. Кроме того, XLM-R улучшает процесс токенизации многоязычных данных и проводит предварительную подготовку гораздо дольше по сравнению с mBERT. Однако на этом варианты BERT не заканчиваются! Чтобы найти больше моделей на основе BERT, посетите соответствующие страницы HuggingFace. Векторный поиск с помощью BERT Как объяснялось выше, BERT невероятно полезен для решения задач классификации на уровне предложений и токенов, а также задач семантического текстового сходства (STS) . Более конкретно, учитывая два текста в качестве входных данных, мы можем точно настроить модель BERT, чтобы предсказать уровень сходства между этими двумя текстами; см. ниже. Фактически, BERT установил новые современные возможности в решении таких проблем. Однако, как мы уже обсуждали ранее, использование BERT в качестве перекрестного кодировщика таким образом неэффективно и, следовательно, может применяться только на этапе ранжирования поиска. Точная настройка BERT для задачи STS (из [1]) Чтобы более эффективно извлекать соответствующие документы с помощью BERT, мы должны использовать BERT в качестве бикодера, создавая текстовые вложения для всех документов и индексируя их в векторной базе данных. Но в [2] мы узнаем, что встраивание текста, создаваемое BERT, не является семантически значимым — BERT изо всех сил пытается функционировать как бикодировщик и даже плохо работает при использовании для кластеризации ; см. ниже. (из [2]) На этом этапе опытный читатель может задаться вопросом: как могут вложения BERT не работать хорошо для семантического поиска? Модели BERT широко используются в самых разных случаях поиска, включая Google Search ! В этом обзоре мы постараемся дать ответ на этот вопрос, представив sBERT, вариант BERT, оптимизированный для создания более семантически значимых вложений текста, которые можно использовать для создания производительных поисковых приложений на базе искусственного интеллекта.
Лучшие бикодеры для векторного поиска Выйдя за рамки базовой модели BERT, мы теперь рассмотрим несколько вариантов BERT, оптимизированных для использования в качестве бикодеров. На высоком уровне это просто модели BERT, которые настроены для создания более семантически значимых вложений текста. В свою очередь, эти модели более совместимы с векторным поиском, что делает их полезным практическим инструментом для любого алгоритма поиска на основе искусственного интеллекта. Sentence-BERT: встраивание предложений с использованием расширений sBERT сиамских BERT-сетей [2] Учитывая, что стандартные модели BERT плохо работают для задач семантического сходства и кластеризации, мы можем задаться вопросом: как мы можем адаптировать эти модели для создания более полезных вложений для семантического поиска? В [2] с предложением предложения BERT (sBERT) мы видим, что адаптировать модели BERT таким образом не очень сложно. Нам просто нужно точно настроить эти модели, используя сиамскую или триплетную сетевую структуру, чтобы получить семантически значимые представления текста или документа! Что такое сиамские и триплетные сети? Термин «сиамская» или «тройная сеть» может показаться сложным, но концепция на самом деле довольно проста! В sBERT мы используем ту же архитектуру трансформатора только для энкодера BERT [1] (или RoBERTa [3]), с которой мы уже знакомы. Однако, чтобы сделать эту сеть сиамской, мы просто пропускаем два разных входа через одну и ту же модель параллельно. Затем мы можем применить потери к двум генерируемым выходным данным; см. ниже. Сиамская сетевая структураНапример, используя этот подход, мы можем обучить модель BERT определять, похожи ли два предложения или нет. Для этого мы получим набор данных похожих (и не похожих) пар предложений и обучим сиамскую сеть принимать пары предложений в качестве входных данных и классифицировать, похожи они или нет. Структура триплетной сетиИдея триплетных сетей почти идентична сиамским сетям, но мы пропускаем три разных входа (вместо двух) через одну и ту же сеть параллельно. Таким образом, у нас есть возможность обучать модель, используя тройную потерю, которая учитывает три разных выходных данных модели; см. выше. Например, если у нас есть доступ к набору данных с тройками предложений, включая опорное предложение, предложение, похожее на опорное предложение, и предложение, отличное от опорного предложения, мы могли бы обучить модель одновременно создавать вывод похожих предложений аналогичен, а вывод несходных предложений различен. Модель архитектуры для sBERT. В [2] модели sBERT имеют архитектуру обычной модели BERT [1] или RoBERTa [3]. Чтобы сделать встраивание текста, созданное с помощью этих моделей, более семантически значимым, sBERT предварительно обучает точную настройку.7Модели BERT и RoBERTa, использующие три типа сиамских или триплетных сетевых структур. Для получения вложений предложений из BERT или RoBERTa используются стандартные подходы (т. е. по умолчанию мы берем среднее значение всех выходных векторов). (из [2]) Первая настройка sBERT использует цель классификации ; см. выше. Два предложения принимаются в качестве входных данных и передаются через модель BERT для получения вложений (из [2]) Далее авторы в [2] исследуют цель регрессии для точной настройки sBERT; см. выше. Эта установка выглядит почти идентично цели классификации. Однако вместо объединения векторов Последняя установка точной настройки, рассмотренная в [2], использует тройной объектив . Каждый обучающий пример содержит три предложения: опорное предложение, похожее предложение и несходное предложение. Мы пропускаем каждое из этих предложений через модель BERT, чтобы получить вложение. Затем мы применяем тройную потерю (показанную ниже) к этим вложениям, чтобы сдвинуть вложения якоря и подобных предложений ближе друг к другу, и наоборот. Сходство измеряется с помощью евклидова расстояния, и мы добавляем запас (?=1) к потере, чтобы гарантировать, что похожие и несходные предложения имеют достаточно большую разницу в сходстве с опорным предложением. Формулировка тройных потерь для sBERT (из [2])Точная настройка СБЕРТ. Три различные сетевые структуры, рассмотренные выше, дают нам краткое представление о различных стратегиях, которые можно использовать для создания более семантически значимых вложений с помощью BERT. Но помимо этих трех существует множество возможных настроек sBERT ! Как практикующий специалист, полученная точная установка будет использовать аналогичные принципы — обычно сиамскую/тройную сеть BERT с добавленной головкой классификации/регрессии — но будет адаптирована к конкретному стилю предложений или парам документов, которые доступны. Например, мы можем попросить людей комментировать пары предложений по шкале сходства от 1 до 5, собирать описания продуктов, которые обычно покупаются вместе в интернет-магазине, и многое другое!
Модель sBERT, предложенная и проанализированная в [2], является конкретной реализацией этих идей. В частности, модель обучается на двух разных наборах данных с использованием цели классификации с тремя целевыми классами (т. е.
Эта процедура точной настройки является относительно быстрой и недорогой, поскольку мы начинаем с предварительно обученной модели BERT или RoBERTa. Как мы увидим, эта простая процедура тонкой настройки радикально улучшает качество вложений BERT в контексте задач векторного поиска, кластеризации и семантического сходства. Как это работает? В [2] sBERT оценивается на нескольких различных задачах семантического текстового сходства (STS) по сравнению с методами встраивания предложений, такими как InferSent [7] и Universal Sentence Encoder [8]. Здесь все методы сравниваются с использованием подхода, измеряющего косинусное сходство.9между сгенерированными вложениями, а не (дорогой) парный подход, используемый большинством кросс-кодировщиков. Другими словами, sBERT оценивается как биэнкодер . Во-первых, sBERT оценивается на различных задачах STS неконтролируемым способом (т. е. без использования каких-либо конкретных обучающих данных для какой-либо из задач); см. ниже. (из [2])Здесь мы видим, что прямое использование внедрений, полученных из предварительно обученной модели BERT, приводит к низкой производительности. Фактически, результаты, достигнутые с помощью предварительно обученного BERT, даже хуже, чем результаты, достигнутые с помощью средних вложений GloVE [9] ! Напротив, мы можем превзойти все базовые методы — используя BERT или RoBERTa — благодаря структуре сиамской сети и подходу точной настройки, предложенному sBERT. (из [2]) Когда модели sBERT дополнительно настраиваются на последующую задачу, используемую для оценки, наблюдаемые результаты следуют аналогичной тенденции; см. выше. Здесь мы оцениваем sBERT с помощью теста STS [10] — популярного набора данных для оценки систем семантического сходства. Наилучшие результаты достигаются при выполнении обоих:
При выполнении этих задач sBERT достигает производительности, сравнимой с моделью BERT в стиле кросс-кодировщика (т. е. современным подходом к решению задач STS), при этом работая исключительно как би-энкодер. (из [2]) Идя дальше, sBERT оценивается на наборе данных Argument Facet Samedity [11], который содержит пары предложений по разным темам с разным уровнем сходства, а также в Википедии путем измерения сходства предложений из одних и тех же или разных разделов различных статей; см. выше. Опять же, sBERT достигает результатов, которые сопоставимы с моделью BERT в стиле перекрестного кодирования в наборе данных сходства фасетов аргументов, в то время как базовые методы работают довольно плохо. Однако интересно, что sBERT испытывает трудности в межтематической области, где модели обучаются по нескольким темам и оцениваются по отложенной теме.
Главный вывод. Модели BERT отлично подходят для множества задач, но текстовые внедрения BERT по умолчанию не имеют семантического смысла. Процедура тонкой настройки, предложенная в [2], улучшает семантическую значимость вложений BERT. Таким образом, sBERT подходит для более широкого круга задач, включая задачи семантического сходства, такие как кластеризация и семантический (векторный) поиск. Используя оптимизированные структуры индексов, мы можем найти похожие документы с помощью sBERT за миллисекунды, тогда как выполнение поиска по сходству с помощью стандартного BERT (с использованием настройки перекрестного кодирования) может занять десятки или сотни часов.10! Полезные расширения sBERT Из работы в [2] мы узнаем, как сделать модели BERT более удобными для плотного поиска. Учитывая, что создание семантически значимых вложений настолько полезно и важно11, этот метод был расширен несколькими последующими публикациями. Хотя существует множество таких расширений sBERT, мы постараемся охватить наиболее важные из них в этом разделе. (из [12]) Делаем sBERT многоязычным. Одним из основных ограничений работы в [2] является тот простой факт, что предлагаемая модель предназначена только для английского языка. Имея это в виду, мы могли бы задаться вопросом: можем ли мы (дешево) расширить одноязычную модель внедрения, чтобы понимать несколько языков? Авторы [12] именно изучают эту проблему и обнаруживают, что такие модели могут быть созданы, используя идею о том, что переведенные предложения должны иметь то же вложение, что и исходное предложение. В частности, исходная (одноязычная) модель используется для генерации вложений предложений на исходном языке. Затем мы переводим эти предложения и настраиваем модель на основе этих переведенных предложений, чтобы имитировать вложения исходной модели. Этот подход получил название многоязычной дистилляции знаний ; см. выше.
В [12] в качестве учителя используется sBERT, а модель ученика основана на XLM-R [13] — модели в стиле BERT, предварительно обученной на данных с более чем 100 языков . Помимо простоты и дешевизны подход к дистилляции знаний, предложенный в [12], имеет несколько преимуществ:
Дополнение данных sBERT. Кросс-кодеры и би-кодеры имеют свои плюсы и минусы. Кросс-кодировщики, как правило, работают хорошо, но они слишком дороги для практических приложений (если только мы не применим их только на этапе ранжирования поиска). Напротив, бикодеры более практичны, но им требуется гораздо больше обучающих данных и точной настройки для конкурентоспособности; см. ниже. (из [14]) В [14] авторы предлагают решение этой проблемы, которое генерирует гораздо больший набор обучающих данных для би-кодировщиков, таких как sBERT , путем использования кросс-кодировщика BERT для маркировки пар предложений, которые затем можно использовать в качестве дополнительных данных для биэнкодер; см. ниже. Такой подход может значительно улучшить производительность sBERT, но решающее значение имеет точный подход, используемый для выборки данных для маркировки с помощью перекрестного кодировщика. А именно, мы не можем просто случайным образом выбирать пары предложений. Скорее, нам следует использовать подход выборки (например, выборку BM25 и/или семантический поиск или просто удаление отрицательных примеров), чтобы гарантировать, что соотношение похожих и непохожих предложений соответствует исходному набору обучающих данных. (из [14]) Псевдомаркировка для адаптации домена. Продолжая тенденцию использования кросс-кодировщиков для маркировки данных, авторы в [15] используют аналогичный подход для улучшения способности бикодеров обрабатывать сдвиги предметной области (т. е. использование данных, которые отличаются от набора обучающих данных). Предлагаемый подход, получивший название «Генеративная псевдомаркировка» (GPL), сочетает в себе генератор запросов с кросс-кодировщиком, который используется для создания меток. См. ниже иллюстрацию этой техники. (из [15]) Для данного целевого домена авторы используют T5 [18] для генерации запросов для этого домена, учитывая отрывок текста (т. е. положительный пример или желаемое совпадение) в качестве входных данных. Отсюда существующая поисковая система — либо использующая лексический поиск с BM25, либо векторный поиск с предварительно обученной моделью — используется для получения фиксированного количества отрицательных примеров для каждого запроса. Затем мы формируем тройки, в которые входят:
Для каждого триплета перекрестный кодер используется для прогнозирования запаса, который можно использовать в качестве обучающего сигнала. Используя этот подход, мы можем адаптировать бикодировщик к новому домену без необходимости размеченных данных. Все, что нам нужно, — это действительный набор отрывков в этой области, а также предварительно обученный T5 и модель перекрестного кодирования. Масштабный семантический поиск. В [16] авторы изучают производительность векторного поиска с помощью бикодеров, таких как sBERT, в зависимости от размера базового индекса поиска (т. е. количества векторов, по которым нам нужно искать). Интересно, что, как показано в таблице ниже, качество плотного поиска (т. е. векторного поиска с помощью бикодеров) ухудшается по мере увеличения размера индекса. Кроме того, вложения более высокой размерности имеют тенденцию работать немного лучше. (из [14]) Хотя математическое доказательство этой тенденции и тонкости векторного поиска выходят за рамки этой статьи, из анализа в [16] мы узнаем, что i) векторный поиск работает лучше всего с меньшим, чистым индексом поиска, но общее качество векторного поиска поиск — даже в пределах более крупных поисковых индексов — можно улучшить, добавив в процесс обучения бикодировщика дополнительные «жесткие» отрицательные примеры. Бенчмаркинг поисковых систем. Поисковые системы, без сомнения, являются одним из самых популярных и широко изученных приложений ИИ. Таким образом, за последние несколько десятилетий было разработано огромное количество методов и методологий поиска. На самом деле, доступно так много информации и исследований, связанных с поиском, что может быть сложно определить, какие методы работают лучше всего и как они соотносятся друг с другом. Авторы [18] решают эту проблему, предлагая новый комплексный тест по поиску информации, называемый Benchmarking-IR (BEIR) , состоящий из задач, показанных ниже. (из [18]) Кроме того, авторы предоставляют обширный анализ различных методов поиска и приходят к некоторым практическим выводам:
Проще говоря, в [18] мы узнаем, что существует компромисс между эффективностью и производительностью поисковых систем. Как правило, наилучший подход достигается за счет комбинации лексического поиска с BM25 и векторного поиска с помощью бикодера, а также повторного ранжирования нескольких последних результатов поиска с помощью кросс-кодировщика. Эта статья — отличный практический ресурс для всех, кто хочет понять различные компоненты поисковых систем и их влияние на производительность высшего уровня. SentenceTransformers: семантический поиск на практике (со страницы документации библиотеки Sentence Transformer)Теперь, когда мы узнали о sBERT и его расширениях, нам нужно научиться использовать эти идеи на практике! Все статьи, которые мы видели до сих пор, реализованы в библиотеке Python под названием Sentence Transformers , которая построена на основе PyTorch и HuggingFace. Этот пакет открыто предоставляет множество современных моделей, включая как бикодеры, так и кросскодеры , и позволяет легко использовать эти модели и эффективно настраивать их на собственных данных. Поскольку этот пакет основан на sBERT, вложения SentenceTransformer являются семантически значимыми — подобные предложения дают вложения, близкие в векторном пространстве . Генерация вложений предложений с помощью бикодера из Sentence Transformers Покажи мне код. Выше показан пример встраивания предложений с помощью бикодера с использованием библиотеки SentenceTransformers. Хотя модели BERT изначально создают последовательность выходных внедрений для каждого предложения, модели Sentence Transformer автоматически выполняют объединение средних значений по этим внедрениям для создания одного выходного внедрения. Чтобы выполнить семантический поиск с помощью этих вложений, нам просто нужно вычислить соответствующие косинусные расстояния.
Идя дальше, библиотека Sentence Transformers также реализует множество моделей кросс-кодирования. Как описано ранее, кросс-кодировщики принимают пару текстовых последовательностей (например, поисковый запрос и отрывок или два предложения) в качестве входных данных и выводят показатель сходства в диапазоне Оценка пар текста с помощью кросс-кодировщика Sentence Transformers Подробнее. Помимо того, что мы уже узнали, преобразователи предложений также: i) поддерживают более 100 различных языков посредством многоязычного подхода к дистилляции знаний, о котором мы узнали выше, и ii) имеют добавленный модуль для выполнения векторного поиска как по тексту, так и по изображениям ; см. ниже. Совместное пространство для встраивания текста и изображений (из документации Sentence Transformers) В документации к Sentence Transformers содержится множество полезных руководств и учебных пособий по поддержке различных стилей приложений семантического поиска. Ниже приведен краткий список:
Заключительные замечания В рамках этого обзора мы узнали об основных компонентах поисковых систем на базе искусственного интеллекта, включая лексический поиск, бикодеры и кросскодеры. Затем мы углубились в бикодеры и то, как мы можем точно настроить языковые модели в стиле BERT, чтобы обеспечить семантически значимые встраивания текста, которые особенно хорошо работают для плотного поиска. Основные выводы из этого обзора заключаются в следующем:
Источник: cameronrwolfe.substack.com Комментарии: |
|