피세리니 ![](https://images.downcodes.com/uploads/20241119/img_673c4c89d78d130.png)
Pyserini는 희박하고 조밀한 표현을 사용하여 재현 가능한 정보 검색 연구를 위한 Python 툴킷입니다. 희소 표현을 사용한 검색은 Lucene을 기반으로 하는 우리 그룹의 Anserini IR 툴킷과의 통합을 통해 제공됩니다. Facebook의 Faiss 라이브러리와의 통합을 통해 조밀한 표현을 사용한 검색이 제공됩니다.
Pyserini는 주로 다단계 순위 아키텍처에서 효과적이고 재현 가능하며 사용하기 쉬운 1단계 검색을 제공하도록 설계되었습니다. 우리의 툴킷은 표준 Python 패키지로 자체 포함되어 있으며 일반적으로 사용되는 많은 IR 테스트 컬렉션에 대한 쿼리, 관련성 판단, 사전 구축된 색인 및 평가 스크립트가 함께 제공됩니다. Pyserini를 사용하면 다양한 표준 IR 테스트 컬렉션에서 실행을 쉽게 재현할 수 있습니다!
자세한 내용은 SIGIR 2021의 논문에서 좋은 개요를 제공합니다.
새로운! TREC 2024 RAG 트랙용 MS MARCO 2.1 문서 코퍼스 작업 가이드입니다.
❗ Anserini는 v0.35.0 릴리스에 해당하는 커밋 272565
(2024/04/03)에서 JDK 11에서 JDK 21로 업그레이드되었습니다. 이에 따라 Pyserini는 커밋 b2f677
(2024/04/04)에서 JDK 21로 업그레이드되었습니다.
? 설치
PyPI를 통해 설치:
Pyserini는 Python 3.10(다른 버전은 작동할 수 있지만 YMMV) 및 Java 21(Anserini에 대한 종속성으로 인해)을 기반으로 구축되었습니다. pip
설치는 PyTorch와 같은 주요 종속성을 자동으로 가져옵니다. Transformers 및 ONNX 런타임.
툴킷에는 다음과 같은 다양한 선택적 종속성도 있습니다.
pip install 'pyserini[optional]'
특히 faiss-cpu
, lightgbm
및 nmslib
는 이러한 선택적 종속성에 포함됩니다. 이러한 패키지의 설치는 변덕스러울 수 있으므로 핵심 종속성에 포함되지 않습니다. 별도로 설치하는 것이 좋을 수도 있습니다.
소프트웨어 생태계는 빠르게 발전하고 있으며 잠재적인 불만의 원인은 기본 종속성의 다양한 버전 간의 비호환성입니다. 여기서는 추가로 자세한 설치 지침을 제공합니다.
Pyserini만 사용할 계획이라면 pip
명령(선택적 종속성 없이)이 좋을 것입니다. 그러나 코드베이스에 기여할 계획이거나 아직 출시되지 않은 최신 기능을 사용하려는 경우 개발 설치가 필요합니다. 여기에 지침이 제공됩니다.
? 어떻게 검색하나요?
Pyserini는 다양한 유형의 검색 모델을 지원합니다. 당사가 이미 구축한 색인을 사용하여 IR 및 NLP 연구(예: MS MARCO, NaturalQuestions, BEIR 등)에서 공통 말뭉치를 검색하는 방법에 대한 자세한 내용은 이 가이드를 참조하세요. 가이드에 대한 직접 링크는 다음과 같습니다.
- Lucene을 사용하는 전통적인 어휘 모델(예: BM25)
- Lucene을 사용하여 희소 검색 모델(예: uniCOIL, SPLADE 등)을 학습했습니다.
- Lucene 또는 Faiss를 사용하여 밀도 검색 모델(예: DPR, Contriever, BGE 등)을 학습했습니다.
- 하이브리드 검색 모델(예: 조밀-희소 융합)
상위 k 결과를 얻으면 실제로 문서 텍스트를 가져오고 싶을 것입니다. 방법은 이 가이드를 참조하세요.
? 내 코퍼스를 어떻게 색인화합니까?
글쎄, 검색하려는 검색 모델 유형에 따라 다릅니다.
- BM25 인덱스 구축(직접 Java 구현)
- BM25 인덱스 구축(내장형 Python 구현)
- 희소 벡터 인덱스 구축
- 조밀한 벡터 인덱스 구축
모델 클래스에 따라 단계가 다릅니다. 이 가이드(위 링크와 동일)에서 자세한 내용을 설명합니다.
? 추가 FAQ
- 검색을 어떻게 구성하나요? (인터랙티브 검색 안내)
- 색인을 수동으로 다운로드하려면 어떻게 해야 합니까? (인터랙티브 검색 안내)
- 고밀도 및 하이브리드 검색을 수행하려면 어떻게 해야 합니까? (인터랙티브 검색 안내)
- 색인 용어를 반복하고 용어 통계에 액세스하려면 어떻게 해야 합니까? (인덱스 리더 API)
- 게시물을 어떻게 탐색하나요? (인덱스 리더 API)
- 용어 벡터에 어떻게 액세스하고 조작합니까? (인덱스 리더 API)
- 문서의 tf-idf 또는 BM25 점수를 어떻게 계산합니까? (인덱스 리더 API)
- 기본 인덱스 통계에 어떻게 액세스합니까? (인덱스 리더 API)
- 기본 Lucene 분석기에 어떻게 액세스하나요? (분석기 API)
- 사용자 정의 Lucene 쿼리를 어떻게 작성합니까? (쿼리 빌더 API)
- 원시 컬렉션을 어떻게 반복합니까? (컬렉션 API)
⚗️ 재현성
Pyserini를 사용하면 다양한 표준 IR 테스트 컬렉션에서 실행을 쉽게 재현할 수 있습니다! 우리는 "즉시" 재현성을 직접 지원하는 사전 구축된 여러 인덱스를 제공합니다.
SIGIR 2022 논문에서는 누구나 단 두 번의 클릭(예: 복사 및 붙여넣기)만으로 실험 실행을 재현할 수 있는 "두 번의 클릭 재현"을 도입했습니다. 문서는 다양한 실험 조건과 쿼리 세트에 대한 요약을 제공하는 다양한 말뭉치에 대한 재현 매트릭스로 구성됩니다.
- MS MARCO V1 통로
- MS MARCO V1 문서
- MS MARCO V2 통로
- MS MARCO V2 문서
- 베이르
- Mr.TyDi
- 기적
- 오픈 도메인 질문 답변
- 시랄
자세한 내용은 학술 연구에서 재현성 문화 구축에 관한 논문을 참조하세요.
아래의 추가 재현 가이드에서는 자세한 단계별 지침을 제공합니다.
희소 검색
희소 검색
- 임시 검색을 위한 Robust04 기준 재현
- MS MARCO V1 Passage Ranking에 대한 BM25 기준선 재현
- MS MARCO V1 문서 순위에 대한 BM25 기준 재현
- Elasticsearch에서 MS MARCO V1 Document Ranking에 대한 다중 필드 BM25 기준 재현
- MS MARCO V2 컬렉션에서 BM25 기준 재현
- LTR 필터링 실험 재현: MS MARCO V1 Passage, MS MARCO V1 문서
- MS MARCO V1 컬렉션에 대한 IRST 실험 재현
- DeepImpact 재현: MS MARCO V1 Passage
- doc2query-T5로 uniCOIL 재현: MS MARCO V1, MS MARCO V2
- TILDE로 uniCOIL 재현: MS MARCO V1 통로, MS MARCO V2 통로
- SPLADEv2 재현: MS MARCO V1 Passage
- Mr. TyDi 실험 재현
- HC4에 대한 BM25 기준 재현
- NeuCLIR22에서 HC4에 대한 BM25 기준선 재현
- SLIM 실험 재현
- KILT 기준: 지식 집약적 언어 작업을 위한 벤치마크
- TripClick 기준: 건강 영역의 클릭 로그에 대한 대규모 데이터 세트
- FEVER(사실 추출 및 검증) 데이터 세트에 대한 기준선(Anserini)
밀집 검색
밀집 검색
- TCT-ColBERTv1 실험 재현: MS MARCO V1
- TCT-ColBERTv2 실험 재현: MS MARCO V1, MS MARCO V2
- DPR 실험 재현
- BPR 실험 재현
- ANCE 실험 재현
- DistilBERT KD 실험 재현
- DistilBERT 균형 잡힌 주제 인식 샘플링 실험 재현
- SBERT 밀집 검색 실험 재현
- ADORE 밀집 검색 실험 재현
- 벡터 PRF 실험 재현
- ANCE-PRF 실험 재현
- Mr. TyDi 실험 재현
- DKRR 실험 재현
하이브리드 희소 밀도 검색
하이브리드 희소 밀도 검색
- MS MARCO V2 컬렉션에서 uniCOIL + TCT-ColBERTv2 실험 재현
사용 가능한 말뭉치
사용 가능한 말뭉치
말뭉치 | 크기 | 체크섬 |
---|
MS MARCO V1 통과: uniCOIL(noexp) | 2.7GB | f17ddd8c7c00ff121c3c3b147d2e17d8 |
MS MARCO V1 통과: uniCOIL(d2q-T5) | 3.4GB | 78eef752c78c8691f7d61600ceed306f |
MS MARCO V1 문서: uniCOIL(noexp) | 11GB | 11b226e1cacd9c8ae0a660fd14cdd710 |
MS MARCO V1 문서: uniCOIL(d2q-T5) | 19GB | 6a00e2c0c375cb1e52c83ae5ac377ebb |
MS MARCO V2 통과: uniCOIL(noexp) | 24GB | d9cc1ed3049746e68a2c91bf90e5212d |
MS MARCO V2 통과: uniCOIL(d2q-T5) | 41GB | 1949a00bfd5e1f1a230a04bbc1f01539 |
MS MARCO V2 문서: uniCOIL(noexp) | 55GB | 97ba262c497164de1054f357caea0c63 |
MS MARCO V2 문서: uniCOIL(d2q-T5) | 72GB | c5639748c2cbad0152e10b0ebde3b804 |
? 추가 문서
- 사전 구축된 색인 안내
- 대화형 검색 안내
- 20Newsgroups 데이터 세트를 사용한 텍스트 분류 가이드
- 코로나19 공개 연구 데이터세트(CORD-19) 작업 가이드
- 엔터티 연결 작업 가이드
- spaCy 작업 가이드
- 분석기 API 사용
- 인덱스 리더 API 사용
- 쿼리 빌더 API 사용
- 컬렉션 API 사용
- Pyjnius를 통한 직접적인 상호작용
️ 출시 내역
- v0.43.0(Anserini v0.38.0 포함): 2024년 11월 11일 [출시 노트]
- v0.42.0(Anserini v0.38.0 포함): 2024년 11월 8일 [릴리스 노트] [알려진 문제]
- v0.41.0(Anserini v0.38.0 포함): 2024년 11월 7일 [릴리스 노트] [알려진 문제]
- v0.40.0(Anserini v0.38.0 포함): 2024년 10월 28일 [출시 노트]
- v0.39.0(Anserini v0.38.0 포함): 2024년 9월 27일 [출시 노트]
- v0.38.0(Anserini v0.38.0 포함): 2024년 9월 11일 [출시 노트]
- v0.37.0(Anserini v0.37.0 포함): 2024년 8월 26일 [출시 노트]
- v0.36.0(Anserini v0.36.1 포함): 2024년 6월 17일 [출시 노트]
- v0.35.0(Anserini v0.35.0 포함): 2024년 4월 4일 [출시 노트]
더 오래된... (그리고 역사적 기록)
- v0.25.0(Anserini v0.25.0 포함): 2024년 3월 31일 [출시 노트]
- v0.24.0(Anserini v0.24.0 포함): 2023년 12월 28일 [출시 노트]
- v0.23.0(Anserini v0.23.0 포함): 2023년 11월 17일 [출시 노트]
- v0.22.1(Anserini v0.22.1 포함): 2023년 10월 19일 [출시 노트]
- v0.22.0(Anserini v0.22.0 포함): 2023년 8월 31일 [출시 노트]
- v0.21.0(Anserini v0.21.0 포함): 2023년 4월 6일 [출시 노트]
- v0.20.0(Anserini v0.20.0 포함): 2023년 2월 1일 [출시 노트]
- v0.19.2(Anserini v0.16.2 포함): 2022년 12월 16일 [출시 노트]
- v0.19.1(Anserini v0.16.1 포함): 2022년 11월 12일 [출시 노트]
- v0.19.0(Anserini v0.16.1 포함): 2022년 11월 2일 [출시 노트] [알려진 문제]
- v0.18.0 (w/ Anserini v0.15.0): 2022년 9월 26일 [릴리스 노트] (Lucene 9 기반 첫 번째 릴리스)
- v0.17.1 (w/ Anserini v0.14.4): 2022년 8월 13일 [릴리스 노트] (Lucene 8 기반 최종 릴리스)
- v0.17.0(Anserini v0.14.3 포함): 2022년 5월 28일 [출시 노트]
- v0.16.1(Anserini v0.14.3 포함): 2022년 5월 12일 [출시 노트]
- v0.16.0(Anserini v0.14.1 포함): 2022년 3월 1일 [출시 노트]
- v0.15.0(Anserini v0.14.0 포함): 2022년 1월 21일 [출시 노트]
- v0.14.0(Anserini v0.13.5 포함): 2021년 11월 8일 [출시 노트]
- v0.13.0(Anserini v0.13.1 포함): 2021년 7월 3일 [출시 노트]
- v0.12.0(Anserini v0.12.0 포함): 2021년 5월 5일 [출시 노트]
- v0.11.0.0: 2021년 2월 18일 [출시 노트]
- v0.10.1.0: 2021년 1월 8일 [출시 노트]
- v0.10.0.1: 2020년 12월 2일 [출시 노트]
- v0.10.0.0: 2020년 11월 26일 [출시 노트]
- v0.9.4.0: 2020년 6월 26일 [출시 노트]
- v0.9.3.1: 2020년 6월 11일 [출시 노트]
- v0.9.3.0: 2020년 5월 27일 [출시 노트]
- v0.9.2.0: 2020년 5월 15일 [출시 노트]
- v0.9.1.0: 2020년 5월 6일 [출시 노트]
- v0.9.0.0: 2020년 4월 18일 [출시 노트]
- v0.8.1.0: 2020년 3월 22일 [출시 노트]
- v0.8.0.0: 2020년 3월 12일 [출시 노트]
- v0.7.2.0: 2020년 1월 25일 [출시 노트]
- v0.7.1.0: 2020년 1월 9일 [출시 노트]
- v0.7.0.0: 2019년 12월 13일 [출시 노트]
- v0.6.0.0: 2019년 11월 2일
️ 역사적 기록
⁉️ Lucene 8에서 Lucene 9로 전환. 2022년에 Pyserini는 Lucene 8에서 Lucene 9로 전환되었습니다. 사전 빌드된 인덱스의 대부분은 Lucene 9를 사용하여 재구축되었지만 여전히 Lucene 8을 기반으로 하는 인덱스도 몇 개 있습니다.
자세한 내용:
- PyPI v0.17.1(커밋
33c87c
, 2022/08/13 출시)은 Anserini v0.14.4를 기반으로 Lucene 8을 기반으로 구축된 마지막 Pyserini 릴리스입니다. 그 후 Anserini 트렁크가 Lucene 9로 업그레이드되었습니다. - PyPI v0.18.0(
5fab14
커밋, 2022/09/26 출시)은 Lucene 9를 사용하여 Anserini v0.15.0을 기반으로 구축되었습니다. 이후 Pyserini 트렁크는 Lucene 9로 발전했습니다.
설명:
어떤 영향이 있나요? Lucene 8로 구축된 인덱스는 Lucene 9 코드와 완전히 호환되지 않습니다(Anserini #1952 참조). 해결 방법은 Lucene 8 인덱스가 Pyserini에 의해 감지되면 자동으로 발생하는 일관된 타이 브레이킹을 비활성화하는 것입니다. 그러나 Lucene 8 인덱스에서 실행되는 Lucene 9 코드는 Lucene 8 인덱스에서 실행되는 Lucene 8 코드와 약간 다른 결과를 제공합니다. Lucene 8 코드는 Lucene 9로 빌드된 인덱스를 읽을 수 없습니다 .
이것이 왜 필요한가요? 파괴적이긴 하지만 Lucene의 HNSW 인덱스를 활용하려면 Lucene 9로 업그레이드해야 합니다. 이는 Pyserini의 기능을 향상시키고 조밀/희소 하이브리드의 설계 공간을 열어줍니다.
v0.11.0.0 이전의 Pyserini 버전은 XYZW 규칙을 채택했습니다. 여기서 XYZ는 Anserini 버전을 추적하고 W는 Python 끝에서 다른 릴리스를 구별하는 데 사용됩니다. Anserini v0.12.0부터 Anserini와 Pyserini 버전이 분리되었습니다.
Anserini는 JDK 11과 함께 작동하도록 설계되었습니다. 이번 호에 설명된 대로 pyjnius 1.2.0을 손상시키는 JDK 9 이상의 JRE 경로 변경이 있었고 여기 및 여기 Anserini에서도 보고되었습니다. 이 문제는 pyjnius 1.2.1(2019년 12월 출시)에서 해결되었습니다. 이전 오류는 이 노트북에 문서화되어 있으며 이 노트북에는 수정 사항이 문서화되어 있습니다.
참고자료
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)의 일부 지원을 받았습니다.