"Обработка естественного языка"

В поисках иголки в стоге сена: как дрессировать ретривера с плотным ходом

Давайте посмотрим, как мы можем обучить модель выполнять поиск плотных проходов с моделями Transformer, используя Simple Transformers.

Введение в поиск прохода

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

Например, рассмотрим поисковую систему, в которой корпус отрывков содержит большую коллекцию статей из Википедии. Если вы спросите эту систему «Кто написал «Властелина колец»?», наиболее подходящей статьей (которая в данном случае, несомненно, будет содержать ответ) будет статья в Википедии о «Властелине колец». .

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

Модели, используемые для поиска проходов, можно разделить на два основных лагеря: традиционные разреженные методы (например, BM25 [1]) и более современные плотные методы, которые используют нейронные сети для генерировать плотные векторные представления. До недавнего времени традиционные разреженныеметоды обычно превосходили плотныеметоды как с точки зрения точности поиска, так и скорости обучения/прогнозирования. Однако адаптация моделей преобразователей для создания плотных представлений позволила плотнымметодам превзойти традиционные методы, по крайней мере, с точки зрения точности поиска. Скорость обучения и прогнозирования по-прежнему явно отдается предпочтение разреженным методам, но повышения точности обычно достаточно, чтобы не обращать на это внимания!

Ретривер с плотным проходом

Одной из первых моделей, успешно использующих мощность трансформаторов для извлечения плотных проходов, является метко названный Dense Passage Retriever (DPR)[2]. Архитектура модели довольно проста, используются две модели кодировщика, одна для встраивания (генерации векторного представления) проходов, а другая для встраивания входных запросов. Эта установка, известная как архитектура с двойным кодированием, использует две независимые модели BERT, которые обучаются параллельно.

Обратите внимание, что термины "отрывок", "контекст" и "документ" часто используются как синонимы.

Во время обучения каждый экземпляр обучения состоит из входного запроса, одного релевантного (положительного) отрывка и n нерелевантных (отрицательных) отрывков. Модель обучена увеличивать сходство скалярного произведения между релевантными парами запросов и переходов, т. е. уменьшать расстояние между представлением запроса, сгенерированным кодировщиком запросов, и представлением прохода, сгенерированным кодировщиком контекста.

Положительный пассаж (или пассажи) обычно явно доступен в наборах поисковых данных, но необходимо выбрать отрицательные пассажи. DPR использует технику негативных пассажей в пакете, чтобы выбрать отрицательные отрывки для каждого запроса. Здесь для каждого запроса положительные переходы всех других запросов данного пакета (во время обучения) используются как отрицательные проходы для конкретного запроса.

Далее мы рассмотрим, как обучить модель DPR с помощью Simple Transformers!

Набор данных

Документ DPR продемонстрировал производительность своей модели на пяти стандартных наборах эталонных данных. В этой статье мы будем использовать один из этих наборов данных, а именно набор данных Natural Questions от Google.

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

  1. Загрузите/скопируйте скрипт загрузки данных из репозитория DPR.
wget https://raw.githubusercontent.com/facebookresearch/DPR/main/dpr/data/download_data.py

2. Запустите следующие команды из каталога, содержащего сценарий загрузки.

python download_data.py --resource data.retriever.nq-train
python download_data.py --resource data.retriever.nq-dev

3. Это должно загрузить два файла JSON (nq-train.json и nq-dev.json) в downloads/data/. Давайте немного почистим вещи.

mv downloads/data .
mv data/retriever/* data
rm -r data/retriever
rm -r download

В итоге каталог должен выглядеть так:

. 
├── data 
│   ├── LICENSE 
│   ├── nq-dev.json 
│   ├── nq-train.json 
│   └── README 
└── download_data.py

Настраивать

Теперь мы установим Simple Transformers и другие библиотеки, которые нам понадобятся.

  1. Установите Anaconda или Miniconda Package Manager отсюда.
  2. Создайте новую виртуальную среду и установите пакеты.
    conda create -n simpletransformers python pandas tqdm wandb
    conda activate simpletransformers
    conda install pytorch>=1.6 cudatoolkit=11.0 -c pytorch
    Примечание: выберите версию набора инструментов Cuda, установленную в вашей системе.
  3. Установите простые трансформеры.
    pip install simpletransformers

Подготовка данных

Simple Transformers изначально поддерживает формат данных, используемый в репозитории DPR, поэтому нам не нужно предварительно обрабатывать загруженные файлы.

Однако Simple Transformers также поддерживает дополнительные входные форматы, которые могут быть более удобными для использования с вашими собственными наборами данных. Подробности смотрите в документации.

Обучение модели

После загрузки набора данных и настройки среды мы готовы приступить к обучению модели DPR! Следуя статье, мы настроим кодировщик запросов и кодировщик контекста как модели bert-base-uncased.

Для train_batch_size установлено значение 40, для этого требуется графический процессор с 24 ГБ памяти. Если у вашего графического процессора меньше памяти, вам может потребоваться уменьшить train_batch_size. Вы также можете уменьшить num_train_epochs, чтобы закончить обучение раньше, но это может снизить конечную производительность модели.

Вы можете увидеть прогресс тренировки, визуализированный с помощью Weights & Biases здесь.

Оценка модели

Затем мы загружаем обученную модель и оцениваем ее производительность (мы могли бы просто вызвать eval_model() после train_model()).

При загрузке модели DPR, обученной с помощью Simple Transformers, нет необходимости отдельно указывать кодировщик запроса и кодировщик контекста. Нам просто нужно указать путь к папке модели (в данном случае outputs) как model_name.

Давайте посмотрим на результаты!

Несколько слов о показателях

Mean Reciprocal Rank (MRR) — полезная метрика для оценки задач ранжирования, таких как поиск документов. Оценка MRR зависит от того, был ли извлечен соответствующий отрывок (если нет, то оценка равна 0) и ранга (позиции в списке) соответствующего отрывка в найденном списке.

Верхнее kточность просто проверяет, содержат ли первые k извлеченные отрывки соответствующий отрывок. Если это так, оценка равна 1 и 0 в противном случае.

Оценки усредняются по всем запросам в оценочных данных.

Заворачивать

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

Для получения дополнительной технической информации вы можете обратиться к документации Simple Transformers здесь.

Рекомендации

  1. Робертсон С. и Сарагоса Х., 2009 г. Вероятностная структура релевантности: BM25 и далее. Сейчас Издатели Inc.
  2. Карпухин В., Огуз Б., Мин С., Льюис П., Ву Л., Эдунов С., Чен Д. и Йих В. Т., 2020. Поиск плотных отрывков для ответов на вопросы с открытым доменом . препринт arXiv arXiv:2004.04906.