Пизерини ![](https://images.downcodes.com/uploads/20241119/img_673c4c89d78d130.png)
Pyserini — это набор инструментов Python для воспроизводимых исследований по поиску информации с разреженными и плотными представлениями. Поиск с использованием разреженных представлений обеспечивается посредством интеграции с набором инструментов Anserini IR нашей группы, построенным на Lucene. Поиск с использованием плотных представлений обеспечивается посредством интеграции с библиотекой Facebook Faiss.
Pyserini в первую очередь предназначен для обеспечения эффективного, воспроизводимого и простого в использовании поиска на первом этапе в многоступенчатой архитектуре ранжирования. Наш набор инструментов представляет собой автономный стандартный пакет Python и включает в себя запросы, оценки релевантности, готовые индексы и сценарии оценки для многих часто используемых коллекций IR-тестов. С помощью Pyserini можно легко воспроизвести прогоны ряда стандартных коллекций ИК-тестов!
Дополнительную информацию можно найти в нашей статье в SIGIR 2021.
Новый! Руководство по работе с корпусом документов MS MARCO 2.1 для TREC 2024 RAG Track.
❗ Anserini был обновлен с JDK 11 до JDK 21 с коммитом 272565
(2024/04/03), что соответствует выпуску v0.35.0. Соответственно, Pyserini был обновлен до JDK 21 при фиксации b2f677
(04.04.2024).
? Установка
Установить через PyPI:
Pyserini построен на Python 3.10 (могут работать и другие версии, кроме YMMV) и Java 21 (из-за зависимости от Anserini). Установка pip
автоматически подключает основные зависимости, такие как PyTorch, ? Трансформеры и среда выполнения ONNX.
Инструментарий также имеет ряд дополнительных зависимостей:
pip install 'pyserini[optional]'
Примечательно, что faiss-cpu
, lightgbm
и nmslib
включены в эти необязательные зависимости. Установка этих пакетов может быть темпераментной, поэтому они не включены в основные зависимости. Возможно, будет хорошей идеей установить их самостоятельно.
Экосистема программного обеспечения быстро развивается, и потенциальным источником разочарования является несовместимость различных версий базовых зависимостей. Дополнительные подробные инструкции по установке мы предоставляем здесь.
Если вы планируете использовать только Pyserini, то инструкция pip
(без дополнительных зависимостей) подойдет. Однако, если вы планируете внести свой вклад в базу кода или хотите работать с новейшими, еще не выпущенными функциями, вам потребуется установка для разработки. Инструкции приведены здесь.
? Как мне искать?
Pyserini поддерживает различные типы моделей поиска. См. это руководство для получения подробной информации о том, как искать общие корпуса в исследованиях IR и NLP (например, MS MARCO, NaturalQuestions, BEIR и т. д.), используя индексы, которые мы уже создали для вас. Вот прямые ссылки на руководство:
- Традиционные лексические модели (например, BM25) с использованием Lucene.
- Изучил модели разреженного поиска (например, uniCOIL, SPLADE и т. д.) с использованием Lucene.
- Изучили модели плотного поиска (например, DPR, Contriever, BGE и т. д.) с использованием Lucene или Faiss.
- Гибридные модели поиска (например, плотно-разреженное слияние).
Как только вы получите результаты top -k , вам действительно захочется получить текст документа... Как это сделать, смотрите в этом руководстве.
? Как мне индексировать свой собственный корпус?
Ну, это зависит от того, какой тип модели поиска вы хотите использовать:
- Создание индекса BM25 (прямая реализация Java)
- Создание индекса BM25 (встраиваемая реализация Python)
- Создание индекса разреженных векторов
- Построение плотного векторного индекса
Действия различаются для разных классов моделей: это руководство (так же, как и ссылки выше) описывает детали.
? Дополнительные часто задаваемые вопросы
- Как настроить поиск? (Руководство по интерактивному поиску)
- Как загрузить индексы вручную? (Руководство по интерактивному поиску)
- Как выполнить плотный и гибридный поиск? (Руководство по интерактивному поиску)
- Как перебирать термины индекса и получать доступ к статистике терминов? (API чтения индекса)
- Как просматривать публикации? (API чтения индекса)
- Как получить доступ к векторам терминов и манипулировать ими? (API чтения индекса)
- Как вычислить оценку документа по tf-idf или BM25? (API чтения индекса)
- Как получить доступ к базовой статистике индекса? (API чтения индекса)
- Как получить доступ к базовым анализаторам Lucene? (API анализатора)
- Как мне создавать собственные запросы Lucene? (API построителя запросов)
- Как перебирать необработанные коллекции? (API коллекции)
⚗️ Воспроизводимость
С помощью Pyserini можно легко воспроизвести прогоны ряда стандартных коллекций ИК-тестов! Мы предоставляем ряд готовых индексов, которые напрямую поддерживают воспроизводимость «из коробки».
В нашей статье SIGIR 2022 мы представили «воспроизведение в два щелчка», которое позволяет любому воспроизводить экспериментальные запуски всего двумя щелчками мыши (т. е. копировать и вставлять). Документация организована в матрицы воспроизводства для разных корпусов, которые предоставляют сводную информацию о различных экспериментальных условиях и наборах запросов:
- MS MARCO V1 Прохождение
- Документ MS MARCO V1
- MS MARCO V2 Прохождение
- Документ MS MARCO V2
- БЕЙР
- Мистер ТайДи
- ЧУДО
- Ответы на открытые вопросы
- ЧИРАЛ
Более подробную информацию можно найти в нашей статье «Создание культуры воспроизводимости в академических исследованиях».
Дополнительные руководства по воспроизведению, приведенные ниже, содержат подробные пошаговые инструкции.
Разреженный поиск
Разреженный поиск
- Воспроизведение базовых показателей Robust04 для специального поиска
- Воспроизведение базового уровня BM25 для рейтинга прохождения MS MARCO V1
- Воспроизведение базового уровня BM25 для ранжирования документов MS MARCO V1
- Воспроизведение многопольной базовой линии BM25 для ранжирования документов MS MARCO V1 от Elasticsearch
- Воспроизведение базовых показателей BM25 в коллекциях MS MARCO V2.
- Воспроизведение экспериментов по фильтрации LTR: проход MS MARCO V1, документ MS MARCO V1.
- Воспроизведение экспериментов IRST в коллекциях MS MARCO V1.
- Воспроизведение DeepImpact: проход MS MARCO V1
- Воспроизведение uniCOIL с помощью doc2query-T5: MS MARCO V1, MS MARCO V2
- Воспроизведение uniCOIL с помощью TILDE: проход MS MARCO V1, проход MS MARCO V2
- Воспроизведение SPLADev2: прохождение MS MARCO V1
- Воспроизведение экспериментов мистера ТайДи
- Воспроизведение базовых показателей BM25 для HC4
- Воспроизведение базовых показателей BM25 для HC4 на NeuCLIR22
- Воспроизведение экспериментов SLIM
- Базовые показатели для KILT: эталон для наукоемких языковых задач
- Базовые показатели для TripClick: крупномасштабный набор данных журналов кликов в области здоровья.
- Базовые линии (в Anserini) для набора данных FEVER (извлечение фактов и проверка)
Плотный поиск
Плотный поиск
- Воспроизведение экспериментов TCT-ColBERTv1: MS MARCO V1
- Воспроизведение экспериментов TCT-ColBERTv2: MS MARCO V1, MS MARCO V2.
- Воспроизведение экспериментов DPR
- Воспроизведение экспериментов BPR
- Воспроизведение экспериментов ANCE
- Воспроизведение экспериментов DistilBERT KD
- Воспроизведение экспериментов DistilBERT по сбалансированной тематической выборке
- Воспроизведение экспериментов по плотному поиску SBERT
- Воспроизведение экспериментов по плотному поиску ADORE
- Воспроизведение экспериментов с векторной PRF
- Воспроизведение экспериментов ANCE-PRF
- Воспроизведение экспериментов мистера ТайДи
- Воспроизведение экспериментов DKRR
Гибридный разреженно-плотный поиск
Гибридный разреженно-плотный поиск
- Воспроизведение экспериментов uniCOIL + TCT-ColBERTv2 на коллекциях MS MARCO V2
Доступная корпорация
Доступная корпорация
Корпора | Размер | Контрольная сумма |
---|
Прохождение MS MARCO V1: uniCOIL (noexp) | 2,7 ГБ | f17ddd8c7c00ff121c3c3b147d2e17d8 |
Пассаж MS MARCO V1: uniCOIL (d2q-T5) | 3,4 ГБ | 78eef752c78c8691f7d61600ceed306f |
Документ MS MARCO V1: uniCOIL (noexp) | 11 ГБ | 11b226e1cacd9c8ae0a660fd14cdd710 |
Документ MS MARCO V1: uniCOIL (d2q-T5) | 19 ГБ | 6a00e2c0c375cb1e52c83ae5ac377ebb |
Прохождение MS MARCO V2: uniCOIL (noexp) | 24 ГБ | d9cc1ed3049746e68a2c91bf90e5212d |
Проход MS MARCO V2: uniCOIL (d2q-T5) | 41 ГБ | 1949a00bfd5e1f1a230a04bbc1f01539 |
Документ MS MARCO V2: uniCOIL (noexp) | 55 ГБ | 97ba262c497164de1054f357caea0c63 |
Документ MS MARCO V2: uniCOIL (d2q-T5) | 72 ГБ | c5639748c2cbad0152e10b0ebde3b804 |
? Дополнительная документация
- Руководство по готовым индексам
- Руководство по интерактивному поиску
- Руководство по классификации текста с использованием набора данных 20Newsgroups
- Руководство по работе с набором данных открытых исследований COVID-19 (CORD-19)
- Руководство по работе со связыванием сущностей
- Руководство по работе со SpaCy
- Использование API анализатора
- Использование API чтения индекса
- Использование API построителя запросов
- Использование API коллекции
- Прямое взаимодействие через Пижниуса
️ История выпусков
- Версия 0.43.0 (с Anserini v0.38.0): 11 ноября 2024 г. [Примечания к выпуску]
- Версия 0.42.0 (с Anserini v0.38.0): 8 ноября 2024 г. [Примечания к выпуску] [Известные проблемы]
- Версия 0.41.0 (с Anserini v0.38.0): 7 ноября 2024 г. [Примечания к выпуску] [Известные проблемы]
- Версия 0.40.0 (с Anserini v0.38.0): 28 октября 2024 г. [Примечания к выпуску]
- Версия 0.39.0 (с Anserini v0.38.0): 27 сентября 2024 г. [Примечания к выпуску]
- Версия 0.38.0 (с Anserini v0.38.0): 11 сентября 2024 г. [Примечания к выпуску]
- Версия 0.37.0 (с Anserini v0.37.0): 26 августа 2024 г. [Примечания к выпуску]
- Версия 0.36.0 (с Anserini v0.36.1): 17 июня 2024 г. [Примечания к выпуску]
- Версия 0.35.0 (с Anserini v0.35.0): 4 апреля 2024 г. [Примечания к выпуску]
старше... (и исторические заметки)
- Версия 0.25.0 (с Anserini v0.25.0): 31 марта 2024 г. [Примечания к выпуску]
- Версия 0.24.0 (с Anserini v0.24.0): 28 декабря 2023 г. [Примечания к выпуску]
- Версия 0.23.0 (с Anserini v0.23.0): 17 ноября 2023 г. [Примечания к выпуску]
- Версия 0.22.1 (с Anserini v0.22.1): 19 октября 2023 г. [Примечания к выпуску]
- Версия 0.22.0 (с Anserini v0.22.0): 31 августа 2023 г. [Примечания к выпуску]
- Версия 0.21.0 (с Anserini v0.21.0): 6 апреля 2023 г. [Примечания к выпуску]
- Версия 0.20.0 (с Anserini v0.20.0): 1 февраля 2023 г. [Примечания к выпуску]
- Версия 0.19.2 (с Anserini v0.16.2): 16 декабря 2022 г. [Примечания к выпуску]
- Версия 0.19.1 (с Anserini v0.16.1): 12 ноября 2022 г. [Примечания к выпуску]
- Версия 0.19.0 (с Anserini v0.16.1): 2 ноября 2022 г. [Примечания к выпуску] [Известные проблемы]
- v0.18.0 (с Anserini v0.15.0): 26 сентября 2022 г. [Примечания к выпуску] (первый выпуск на основе Lucene 9)
- v0.17.1 (с Anserini v0.14.4): 13 августа 2022 г. [Примечания к выпуску] (окончательный выпуск на основе Lucene 8)
- Версия 0.17.0 (с Anserini v0.14.3): 28 мая 2022 г. [Примечания к выпуску]
- Версия 0.16.1 (с Anserini v0.14.3): 12 мая 2022 г. [Примечания к выпуску]
- Версия 0.16.0 (с Anserini v0.14.1): 1 марта 2022 г. [Примечания к выпуску]
- Версия 0.15.0 (с Anserini v0.14.0): 21 января 2022 г. [Примечания к выпуску]
- Версия 0.14.0 (с Anserini v0.13.5): 8 ноября 2021 г. [Примечания к выпуску]
- Версия 0.13.0 (с Anserini v0.13.1): 3 июля 2021 г. [Примечания к выпуску]
- Версия 0.12.0 (с Anserini v0.12.0): 5 мая 2021 г. [Примечания к выпуску]
- v0.11.0.0: 18 февраля 2021 г. [Примечания к выпуску]
- v0.10.1.0: 8 января 2021 г. [Примечания к выпуску]
- v0.10.0.1: 2 декабря 2020 г. [Примечания к выпуску]
- v0.10.0.0: 26 ноября 2020 г. [Примечания к выпуску]
- v0.9.4.0: 26 июня 2020 г. [Примечания к выпуску]
- v0.9.3.1: 11 июня 2020 г. [Примечания к выпуску]
- v0.9.3.0: 27 мая 2020 г. [Примечания к выпуску]
- v0.9.2.0: 15 мая 2020 г. [Примечания к выпуску]
- v0.9.1.0: 6 мая 2020 г. [Примечания к выпуску]
- v0.9.0.0: 18 апреля 2020 г. [Примечания к выпуску]
- v0.8.1.0: 22 марта 2020 г. [Примечания к выпуску]
- v0.8.0.0: 12 марта 2020 г. [Примечания к выпуску]
- v0.7.2.0: 25 января 2020 г. [Примечания к выпуску]
- v0.7.1.0: 9 января 2020 г. [Примечания к выпуску]
- v0.7.0.0: 13 декабря 2019 г. [Примечания к выпуску]
- v0.6.0.0: 2 ноября 2019 г.
️ Исторические заметки
⁉️ Переход с Lucene 8 на Lucene 9. В 2022 году Pyserini перешел с Lucene 8 на Lucene 9. Большинство готовых индексов были перестроены с использованием Lucene 9, но некоторые все еще основаны на Lucene 8.
Более подробная информация:
- PyPI v0.17.1 (commit
33c87c
, выпущен 13 августа 2022 г.) — это последний выпуск Pyserini, созданный на базе Lucene 8 и основанный на Anserini v0.14.4. После этого ствол Anserini был обновлен до Lucene 9. - PyPI v0.18.0 (commit
5fab14
, выпущен 26 сентября 2022 г.) построен на основе Anserini v0.15.0 с использованием Lucene 9. После этого магистраль Pyserini перешла на Lucene 9.
Пояснения:
Каков эффект? Индексы, созданные с помощью Lucene 8, не полностью совместимы с кодом Lucene 9 (см. Anserini #1952). Обходной путь — отключить согласованное разрешение конфликтов, которое происходит автоматически, если Pyserini обнаруживает индекс Lucene 8. Однако код Lucene 9, работающий с индексами Lucene 8, даст несколько иные результаты, чем код Lucene 8, работающий с индексами Lucene 8. Обратите внимание, что код Lucene 8 не может читать индексы, созданные с помощью Lucene 9.
Почему это необходимо? Несмотря на прорыв, обновление до Lucene 9 необходимо, чтобы воспользоваться преимуществами индексов Lucene HNSW, которые расширят возможности Pyserini и откроют пространство для проектирования плотных/разреженных гибридов.
Начиная с версии 0.11.0.0 и ранее, версии Pyserini приняли соглашение XYZW , где XYZ отслеживает версию Anserini, а W используется для различения разных выпусков на стороне Python. Начиная с Anserini v0.12.0, версии Anserini и Pyserini стали разделены.
Anserini предназначен для работы с JDK 11. Было изменение пути JRE выше JDK 9, которое нарушает работу pyjnius 1.2.0, как описано в этом выпуске, также сообщается в Anserini здесь и здесь. Эта проблема была исправлена в версии pyjnius 1.2.1 (выпущенной в декабре 2019 г.). Предыдущая ошибка была задокументирована в этом блокноте, а в этом блокноте описано исправление.
Ссылки
Если вы используете Pyserini, укажите следующую статью:
@INPROCEEDINGS{Lin_etal_SIGIR2021_Pyserini,
author = "Jimmy Lin and Xueguang Ma and Sheng-Chieh Lin and Jheng-Hong Yang and Ronak Pradeep and Rodrigo Nogueira",
title = "{Pyserini}: A {Python} Toolkit for Reproducible Information Retrieval Research with Sparse and Dense Representations",
booktitle = "Proceedings of the 44th Annual International ACM SIGIR Conference on Research and Development in Information Retrieval (SIGIR 2021)",
year = 2021,
pages = "2356--2362",
}
Благодарности
Это исследование в первую очередь частично поддерживается Советом естественных наук и инженерных исследований (NSERC) Канады.