Anserini — это набор инструментов для воспроизводимых исследований по поиску информации. Опираясь на Lucene, мы стремимся преодолеть разрыв между академическими исследованиями в области поиска информации и практикой создания реальных поисковых приложений. Помимо прочего, наши усилия направлены на противоположное этому*. Anserini возникла на основе исследования воспроизводимости различных поисковых механизмов с открытым исходным кодом, проведенного в 2016 году (Lin et al., ECIR 2016). См. Ян и др. (SIGIR 2017) и Yang et al. (JDIQ 2018) для обзоров.
❗ Anserini был обновлен с JDK 11 до JDK 21 с коммитом 272565
(2024/04/03), что соответствует выпуску v0.35.0.
Anserini упакован в автономный фатжар, который также обеспечивает самый простой способ начать работу. Предполагая, что у вас уже установлена Java, скачайте файл fatjar:
wget https://repo1.maven.org/maven2/io/anserini/anserini/0.38.0/anserini-0.38.0-fatjar.jar
Следующие команды создадут запуск SPLADE++ ED с запросами разработки (закодированными с использованием ONNX) в корпусе отрывков MS MARCO:
java -cp anserini-0.38.0-fatjar.jar io.anserini.search.SearchCollection
-index msmarco-v1-passage.splade-pp-ed
-topics msmarco-v1-passage.dev
-encoder SpladePlusPlusEnsembleDistil
-output run.msmarco-v1-passage-dev.splade-pp-ed-onnx.txt
-impact -pretokenized
Чтобы оценить:
java -cp anserini-0.38.0-fatjar.jar trec_eval -c -M 10 -m recip_rank msmarco-passage.dev-subset run.msmarco-v1-passage-dev.splade-pp-ed-onnx.txt
См. подробные инструкции для текущей версии Fatjar Anserini (v0.38.0), чтобы воспроизвести регрессионные эксперименты на корпусах MS MARCO V2.1 для TREC 2024 RAG, на MS MARCO V1 Passage и на BEIR, и все это непосредственно из Fatjar!
Кроме того, Anserini поставляется со встроенным веб-приложением для интерактивных запросов и REST API, который может использоваться другими приложениями. Ознакомьтесь с нашей документацией здесь.
Большинство функций Anserini представлены в интерфейсе Pyserini Python. Если вам удобнее работать с Python, начните с него, хотя Anserini является важным строительным блоком Pyserini, поэтому изучение Anserini все равно имеет смысл.
Для сборки Anserini вам понадобится Java 21 и Maven 3.9+. Клонируйте наш репозиторий с помощью опции --recurse-submodules
, чтобы убедиться, что субмодуль eval/
также клонируется (в качестве альтернативы используйте git submodule update --init
). Затем создайте с помощью Maven:
mvn clean package
Каталог tools/
, содержащий инструменты оценки и другие скрипты, на самом деле представляет собой репозиторий, интегрированный как подмодуль Git (чтобы его можно было использовать в связанных проектах). Выполните сборку следующим образом (вы можете получить предупреждения, но их можно игнорировать):
cd tools/eval && tar xvfz trec_eval.9.0.4.tar.gz && cd trec_eval.9.0.4 && make && cd ../../..
cd tools/eval/ndeval && make && cd ../../..
При этом вы должны быть готовы к работе. Путь адаптации в Anserini начинается здесь!
Если вы используете Windows, используйте WSL2 для сборки Anserini. Пожалуйста, обратитесь к документу по установке WSL2, чтобы установить WSL2, если вы еще этого не сделали.
Обратите внимание, что в Windows без WSL2 тесты могут завершиться неудачей из-за проблем с кодировкой, см. #1466. Простой обходной путь — пропустить тесты, добавив -Dmaven.test.skip=true
к приведенной выше команде mvn
. См. #1121 для получения дополнительной информации об отладке ошибок сборки Windows.
Anserini предназначен для поддержки комплексных экспериментов с различными стандартными наборами ИК-тестов «из коробки». Каждая из этих сквозных регрессий начинается с необработанного корпуса, строит необходимый индекс, выполняет поисковые запросы и генерирует результаты оценки. Подробности смотрите на отдельных страницах.
разработчик | DL19 | DL20 | |
---|---|---|---|
Неконтролируемый разреженный | |||
Базовые показатели Lucene BoW | ? | ? | ? |
Квантованный BM25 | ? | ? | ? |
Базовые показатели WordPiece (предварительно токенизированные) | ? | ? | ? |
Базовые линии WordPiece (Huggingface) | ? | ? | ? |
Базовые показатели WordPiece + Lucene BoW | ? | ? | ? |
документ2запрос | ? | ||
doc2query-T5 | ? | ? | ? |
Learned Sparse (семейство uniCOIL) | |||
uniCOIL noexp | ? | ? | ? |
uniCOIL с doc2query-T5 | ? | ? | ? |
uniCOIL с ТИЛЬДОЙ | ? | ||
Изученный разреженный (другое) | |||
ДипИмпакт | ? | ||
СПЛАДv2 | ? | ||
SPLADE++ CoCondenser-EnsembleDistil | ? | ? | ? |
SPLADE++ CoCondenser-SelfDistil | ? | ? | ? |
Learned Dense (индексы HNSW) | |||
cosDPR-дистиллировать | полный:? | полный:? | полный:? |
BGE-база-en-v1.5 | полный:? | полный:? | полный:? |
OpenAI Ада2 | полный:? int8:? | полный:? int8:? | полный:? int8:? |
Cohere English v3.0 | полный:? int8:? | полный:? int8:? | полный:? int8:? |
Learned Dense (плоские индексы) | |||
cosDPR-дистиллировать | полный:? | полный:? | полный:? |
BGE-база-en-v1.5 | полный:? | полный:? | полный:? |
OpenAI Ада2 | полный:? int8:?️ | полный:? int8:? | полный:? int8:? |
Cohere English v3.0 | полный:? int8:? | полный:? int8:? | полный:? int8:? |
Learned Dense (перевернутый; экспериментальный) | |||
cosDPR-distil с «фальшивыми словами» | ? | ? | ? |
cosDPR-дистил с "LexLSH" | ? | ? | ? |
Ключ:
Корпора | Размер | Контрольная сумма |
---|---|---|
Квантованный BM25 | 1,2 ГБ | 0a623e2c97ac6b7e814bf1323a97b435 |
uniCOIL (ноэксп) | 2,7 ГБ | f17ddd8c7c00ff121c3c3b147d2e17d8 |
юникойл (d2q-T5) | 3,4 ГБ | 78eef752c78c8691f7d61600ceed306f |
юникойл (тильда) | 3,9 ГБ | 12a9c289d94e32fd63a7d39c9677d75c |
ДипИмпакт | 3,6 ГБ | 73843885b503af3c8b3ee62e5f5a9900 |
СПЛАДv2 | 9,9 ГБ | b5d126f5d9a8e1b3ef3f5cb0ba651725 |
SPLADE++ CoCondenser-EnsembleDistil | 4,2 ГБ | e489133bdc54ee1e7c62a32aa582bc77 |
SPLADE++ CoCondenser-SelfDistil | 4,8 ГБ | cb7e264222f2bf2221dd2c9d28190be1 |
cosDPR-дистиллировать | 57 ГБ | e20ffbc8b5e7f760af31298aefeaebbd |
BGE-база-en-v1.5 | 59 ГБ | 353d2c9e72e858897ad479cca4ea0db1 |
OpenAI-ада2 | 109 ГБ | a4d843d522ff3a3af7edbee789a63402 |
Cohere embed-english-v3.0 | 38 ГБ | 06a6e38a0522850c6aa504db7b2617f5 |
разработчик | DL19 | DL20 | |
---|---|---|---|
Неконтролируемая лексика, полный документ * | |||
Базовые показатели Lucene BoW | + | + | + |
Базовые показатели WordPiece (предварительно токенизированные) | + | + | + |
Базовые показатели WordPiece (токенизатор Huggingface) | + | + | + |
Базовые показатели WordPiece + Lucene BoW | + | + | + |
doc2query-T5 | + | + | + |
Неконтролируемый лексический, сегментированный документ * | |||
Базовые показатели Lucene BoW | + | + | + |
Базовые показатели WordPiece (предварительно токенизированные) | + | + | + |
Базовые показатели WordPiece + Lucene BoW | + | + | + |
doc2query-T5 | + | + | + |
Выучил разреженную лексику | |||
uniCOIL noexp | ✓ | ✓ | ✓ |
uniCOIL с doc2query-T5 | ✓ | ✓ | ✓ |
Корпора | Размер | Контрольная сумма |
---|---|---|
Документ MS MARCO V1: uniCOIL (noexp) | 11 ГБ | 11b226e1cacd9c8ae0a660fd14cdd710 |
Документ MS MARCO V1: uniCOIL (d2q-T5) | 19 ГБ | 6a00e2c0c375cb1e52c83ae5ac377ebb |
разработчик | DL21 | DL22 | DL23 | |
---|---|---|---|---|
Неконтролируемая лексика, оригинальный корпус | ||||
исходные данные | + | + | + | + |
doc2query-T5 | + | + | + | + |
Неконтролируемая лексика, расширенный корпус | ||||
исходные данные | + | + | + | + |
doc2query-T5 | + | + | + | + |
Выучил разреженную лексику | ||||
uniCOIL noexp нулевой выстрел | ✓ | ✓ | ✓ | ✓ |
uniCOIL с нулевым выстрелом doc2query-T5 | ✓ | ✓ | ✓ | ✓ |
SPLADE++ CoCondenser-EnsembleDistil (кэшированные запросы) | ✓ | ✓ | ✓ | ✓ |
SPLADE++ CoCondenser-EnsembleDistil (ONNX) | ✓ | ✓ | ✓ | ✓ |
SPLADE++ CoCondenser-SelfDistil (кэшированные запросы) | ✓ | ✓ | ✓ | ✓ |
SPLADE++ CoCondenser-SelfDistil (ONNX) | ✓ | ✓ | ✓ | ✓ |
Корпора | Размер | Контрольная сумма |
---|---|---|
uniCOIL (ноэксп) | 24 ГБ | d9cc1ed3049746e68a2c91bf90e5212d |
юникойл (d2q-T5) | 41 ГБ | 1949a00bfd5e1f1a230a04bbc1f01539 |
SPLADE++ CoCondenser-EnsembleDistil | 66 ГБ | 2cdb2adc259b8fa6caf666b20ebdc0e8 |
SPLADE++ CoCondenser-SelfDistil | 76 ГБ | 061930dd615c7c807323ea7fc7957877 |
разработчик | DL21 | DL22 | DL23 | |
---|---|---|---|---|
Неконтролируемая лексика, полный документ | ||||
исходные данные | + | + | + | + |
doc2query-T5 | + | + | + | + |
Неконтролируемый лексический, сегментированный документ | ||||
исходные данные | + | + | + | + |
doc2query-T5 | + | + | + | + |
Выучил разреженную лексику | ||||
uniCOIL noexp нулевой выстрел | ✓ | ✓ | ✓ | ✓ |
uniCOIL с нулевым выстрелом doc2query-T5 | ✓ | ✓ | ✓ | ✓ |
Корпора | Размер | Контрольная сумма |
---|---|---|
Документ MS MARCO V2: uniCOIL (noexp) | 55 ГБ | 97ba262c497164de1054f357caea0c63 |
Документ MS MARCO V2: uniCOIL (d2q-T5) | 72 ГБ | c5639748c2cbad0152e10b0ebde3b804 |
Корпуса MS MARCO V2.1 были созданы на основе корпусов V2 для TREC 2024 RAG Track. Приведенные ниже эксперименты охватывают темы и qrels, первоначально нацеленные на корпуса V2, но были «проецированы» на корпуса V2.1.
разработчик | DL21 | DL22 | DL23 | RAGgy разработчик | |
---|---|---|---|---|---|
Неконтролируемая лексика, полный документ | |||||
исходные данные | + | + | + | + | + |
Неконтролируемый лексический, сегментированный документ | |||||
исходные данные | + | + | + | + | + |
Ключ:
bert-base-uncased
), запросы по ключевым словам (?)См. инструкции под таблицей о том, как воспроизвести результаты модели во всех корпусах BEIR «за один раз».
Корпус | Ф1 | Ф2 | МФ | U1 | С1 | БГЭ (плоский) | БГЕ (HNSW) |
---|---|---|---|---|---|---|---|
ТРЕК-КОВИД | ? | ? | ? | ? | ? | полный:? | полный:? |
БиоASQ | ? | ? | ? | ? | ? | полный:? | полный:? |
НФКорпус | ? | ? | ? | ? | ? | полный:? | полный:? |
НК | ? | ? | ? | ? | ? | полный:? | полный:? |
HotpotQA | ? | ? | ? | ? | ? | полный:? | полный:? |
ФиQA-2018 | ? | ? | ? | ? | ? | полный:? | полный:? |
Сигнал-1М(РТ) | ? | ? | ? | ? | ? | полный:? | полный:? |
ТРЭК-НОВОСТИ | ? | ? | ? | ? | ? | полный:? | полный:? |
Робаст04 | ? | ? | ? | ? | ? | полный:? | полный:? |
Аргуана | ? | ? | ? | ? | ? | полный:? | полный:? |
Туш2020 | ? | ? | ? | ? | ? | полный:? | полный:? |
CQADupStack-Android | ? | ? | ? | ? | ? | полный:? | полный:? |
CQADupStack-английский | ? | ? | ? | ? | ? | полный:? | полный:? |
CQADupStack-Игры | ? | ? | ? | ? | ? | полный:? | полный:? |
CQADupStack-Gis | ? | ? | ? | ? | ? | полный:? | полный:? |
CQADupStack-Mathematica | ? | ? | ? | ? | ? | полный:? | полный:? |
CQADupStack-Физика | ? | ? | ? | ? | ? | полный:? | полный:? |
CQADupStack-Программисты | ? | ? | ? | ? | ? | полный:? | полный:? |
CQADupStack-Статистика | ? | ? | ? | ? | ? | полный:? | полный:? |
CQADupStack-Tex | ? | ? | ? | ? | ? | полный:? | полный:? |
CQADupStack-Unix | ? | ? | ? | ? | ? | полный:? | полный:? |
CQADupStack-Веб-мастера | ? | ? | ? | ? | ? | полный:? | полный:? |
CQADupStack-Wordpress | ? | ? | ? | ? | ? | полный:? | полный:? |
Кора | ? | ? | ? | ? | ? | полный:? | полный:? |
ДБПедия | ? | ? | ? | ? | ? | полный:? | полный:? |
СЦИДОКС | ? | ? | ? | ? | ? | полный:? | полный:? |
ВЫСОКАЯ ТЕМПЕРАТУРА | ? | ? | ? | ? | ? | полный:? | полный:? |
Климат-ЛИХОРОДКА | ? | ? | ? | ? | ? | полный:? | полный:? |
Научный факт | ? | ? | ? | ? | ? | полный:? | полный:? |
Чтобы воспроизвести результаты SPLADE++ CoCondenser-EnsembleDistil, начните с загрузки коллекции:
wget https://rgw.cs.uwaterloo.ca/pyserini/data/beir-v1.0.0-splade-pp-ed.tar -P collections/
tar xvf collections/beir-v1.0.0-splade-pp-ed.tar -C collections/
Размер архива составляет 42 ГБ, а контрольная сумма MD5 9c7de5b444a788c9e74c340bf833173b
. После распаковки данных следующие команды пройдут по всем корпусам BEIR и запустят регрессии:
MODEL= " splade-pp-ed " ; CORPORA=(trec-covid bioasq nfcorpus nq hotpotqa fiqa signal1m trec-news robust04 arguana webis-touche2020 cqadupstack-android cqadupstack-english cqadupstack-gaming cqadupstack-gis cqadupstack-mathematica cqadupstack-physics cqadupstack-programmers cqadupstack-stats cqadupstack-tex cqadupstack-unix cqadupstack-webmasters cqadupstack-wordpress quora dbpedia-entity scidocs fever climate-fever scifact) ; for c in " ${CORPORA[@]} "
do
echo " Running $c ... "
python src/main/python/run_regression.py --index --verify --search --regression beir-v1.0.0- ${c} . ${MODEL} .onnx > logs/log.beir-v1.0.0- ${c} - ${MODEL} .onnx 2>&1
done
Вы можете проверить результаты, изучив файлы журналов в logs/
.
Для других моделей измените приведенные выше команды следующим образом:
Ключ | Корпус | Контрольная сумма | MODEL |
---|---|---|---|
Ф1 | corpus | faefd5281b662c72ce03d22021e4ff6b | flat |
Ф2 | corpus-wp | 3cf8f3dcdcadd49362965dd4466e6ff2 | flat-wp |
МФ | corpus | faefd5281b662c72ce03d22021e4ff6b | multifield |
U1 | unicoil-noexp | 4fd04d2af816a6637fc12922cccc8a83 | unicoil-noexp |
С1 | splade-pp-ed | 9c7de5b444a788c9e74c340bf833173b | splade-pp-ed |
БГЭ | bge-base-en-v1.5 | e4e8324ba3da3b46e715297407a24f00 | bge-base-en-v1.5-hnsw |
Приведенное выше слово «Корпус» следует заменить на полное имя файла beir-v1.0.0-${corpus}.tar
, например beir-v1.0.0-bge-base-en-v1.5.tar
. Приведенные выше команды должны работать с некоторыми небольшими изменениями: вам нужно будет настроить параметр --regression
, чтобы он соответствовал схеме файлов конфигурации YAML в src/main/resources/regression/
.
Описанные ниже эксперименты не связаны со строгим сквозным регрессионным тестированием и, таким образом, обеспечивают более низкий стандарт воспроизводимости. По большей части для воспроизведения наших результатов требуется ручное копирование и вставка команд в оболочку.
Если вы нашли Anserini полезным, у нас есть к вам простая просьба внести свой вклад. В ходе воспроизведения базовых результатов на стандартных тестовых коллекциях сообщите нам, если вы добились успеха, отправив нам запрос на включение с простой заметкой, например, которая появляется внизу страницы для дисков 4 и 5. Воспроизводимость важна. нам, и мы хотели бы знать как об успехах, так и о неудачах. Поскольку документация по регрессии генерируется автоматически, запросы на включение следует отправлять на основе необработанных шаблонов. Затем документацию по регрессии можно создать с помощью сценария bin/build.sh
. В свою очередь, вы будете признаны соавтором.
Помимо этого, всегда есть открытые вопросы, по которым мы были бы признательны за помощь!
272565
(02.08.2022): это обновление создало проблемы обратной совместимости, см. #1952. Anserini автоматически обнаружит индексы Lucene 8 и отключит согласованное разрешение конфликтов, чтобы избежать ошибок во время выполнения. Однако код Lucene 9, работающий с индексами Lucene 8, может давать несколько иные результаты, чем код Lucene 8, работающий с индексами Lucene 8. Код Lucene 8 не будет работать с индексами Lucene 9. Pyserini также был обновлен, и возникли аналогичные проблемы: код Lucene 9, работающий с индексами Lucene 8, может давать немного другие результаты, чем код Lucene 8, работающий с индексами Lucene 8.17b702d
(11.07.2019) с Java 8. Также требуется Maven 3.3+.75e36f9
(12.06.2019); до этого набор инструментов использовал Lucene 7.6. Судя по предварительным экспериментам, задержка оценки запроса в Lucene 8 значительно улучшилась. В результате этого обновления результаты всех регрессий немного изменились. Чтобы воспроизвести старые результаты Lucene 7.6, используйте версию 0.5.1. Это исследование частично поддерживается Советом естественных наук и инженерных исследований (NSERC) Канады. Предыдущая поддержка поступила от Национального научного фонда США под номерами IIS-1423002 и CNS-1405688. Любые высказанные мнения, выводы и рекомендации не обязательно отражают точку зрения спонсоров.