Spaces:
Runtime error
A newer version of the Gradio SDK is available:
5.6.0
title: NetsPresso_QA
app_file: run_ralm_netspresso_doc.py
sdk: gradio
sdk_version: 3.41.2
Text retrieval inference (indexing, search)
Installation
- ์ ์ฅ์ ๋ค์ด๋ก๋
git clone https://github.com/nota-github/np_app_text_retrieval_inference
- ๋ชจ๋ธ ํ๊ฒฝ์ด ์ ์๋ ๋์ปค ์ด๋ฏธ์ง ์์ฑ ๋ฐ ์คํ
cd np_app_semantic_search_inference
docker build --cache-from notadockerhub/np_app_text_retrieval_inference:latest -t notadockerhub/np_app_text_retrieval_inference:latest -f ./Dockerfile .
docker run --name {container_name} --shm-size=8g -it --gpus '"device=0"' -v {your_code_dir}:/root/np_app_text_retrieval_inference -v /{your_data_dir}:/workspace/datasets notadockerhub/np_app_text_retrieval_inference:latest
retrieval์์๋ gpu๊ฐ BERT ๊ธฐ๋ฐ์ query encoding์์๋ง ์ฌ์ฉ๋ฉ๋๋ค. ์ ์ฒด ์๊ฐ์์๋ ์ ์ ๋น์จ์ ์ฐจ์งํ๋ฏ๋ก cpu๋ง ์ฌ์ฉํด๋ ์๋์์ ํฐ ์ฐจ์ด๋ ์์ต๋๋ค.
์ํ๋ ๋ฌธ์๋ค์ indexingํ๋ ๊ฒฝ์ฐ BERT๋ฅผ ์ด์ฉํ์ฌ ์ผํ์ฑ์ผ๋ก encodingํ๋๋ฐ, ์ด ๊ฒฝ์ฐ๋ gpu๋ฅผ ์ฌ์ฉํ๋ฉด cpu๋ณด๋ค ๋ง์ ์๊ฐ์ ์ ์ฝํ ์ ์์ต๋๋ค.
- ํ์ฌ ๊ตฌํ์์๋ single gpu ์ฌ์ฉ๋ง์ ์ง์ํ๊ณ ์์ผ๋ฉฐ, multi gpu ์ฌ์ฉ์ ์ํด์๋ individual process๋ฅผ ๋ง๋ค์ด์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
๋๋ถ๋ถ์ ์ฝ๋๋ pyserini์ ๊ธฐ๋ฐํ๊ณ ์์ต๋๋ค.
Dataset
datasets
|-- dataset_name
| |-- collection.jsonl
| |-- queries.tsv
| |-- qrels.txt (optional, ์ ๋ํ๊ฐ๋ฅผ ์ํ ๊ฒฝ์ฐ)
- collection.jsonl: each line is
{"id": "PASSAGE_ID", "contents": "CONTENTS"}
. - queries.tsv: each line is
QUERY_ID\tCONTENTS
. - qrels.txt: each line is
QUERY_ID QUERY_TYPE PASSAGE_ID RELEVANCE_SCORE
.
Recommended retriever
- sparse model: BM25
- dense model
- multi-lingual: mDPR, mContriever
- multi-vector: colBERT
- hybrid model: sparse (first-pass) + dense (reranking)
- ๋ค๊ตญ์ด๋ฅผ encodeํ๋ baseline ๋ชจ๋ธ์
castorini/mdpr-question-nq
์ ์ฌ์ฉ. - ์ธ์ด๋ณ ๋ค์ํ pre-trained ๋ชจ๋ธ์ HuggingFace model hub์์ ๊ฒ์ ํด๋ณผ ์ ์์.
Sample dataset
- mrtydi-korean
- 11๊ฐ ์ธ์ด๋ฅผ ํฌํจํ ๋ค๊ตญ์ด ๊ฒ์์ ์ํ benchmark dataset
- ํ๊ตญ์ด์ ๊ฒฝ์ฐ 1496126๊ฐ์ passage์ 421๊ฐ์ test query๋ฅผ ์ ๊ณตํจ
title
๊ณผtext
๋ฅผ ํฌํจํ multi-field๋ฅผ ํ์ฉํ ์ ์์ (์ผ๋ฐ์ ์ผ๋ก๋text
๋ง ์ฌ์ฉ ๊ฐ๋ฅ)
- data hub์์ ์๋ณธ ๋ฐ์ดํฐ ๋ฐ indexing๋ ๊ฒฐ๊ณผ๋ฌผ์ ๋ค์ด๋ฐ์ ์ ์์.
- @data_hub:/ssd2/np_app/Dataset_Hub/Semantic_Search/{corpus,indexes}
Procedure
1. Indexing
Fast retrieval์ ์ํด์ collection์ passage์ ๋ํ indexing์ ๋ฏธ๋ฆฌ ๊ณ์ฐํจ
indexing ๊ณผ์ ์ ๋ฏธ๋ฆฌ ๋ง๋ค๋๊ฒ์ ์ฌ์ฉํด๋ ๋จ
- mrtydi-korean์ ๊ฒฝ์ฐ data hub์ ์กด์ฌ
- pre-built indexes for benchmark corpus/model
dense model
python -m pyserini.encode \
input --corpus /path/to/dataset/collection.jsonl \
--fields text \
output --embeddings indexes/dataset_name/dense \
--to-faiss \
encoder --encoder huggingface_model_name_or_checkpoint_path \
--fields text \
--max-length $MAX_LENGTH \
--batch $BATCH_SIZE \
--fp16
huggingface_model_name_or_checkpoint_path: huggingface model hub์์ ์ ๊ณตํ๋ ๋ชจ๋ธ ์ด๋ฆ ๋๋ checkpoint path
- e.g., mrtydi์ ๊ฒฝ์ฐ:
castorini/mdpr-passage-nq
์ฌ์ฉ (retrieval์์ query encoding:castorini/mdpr-question-nq
) - tied(vs. split)์ ๊ฒฝ์ฐ passage/query encoder๊ฐ ๊ฐ์(vs. ๋ค๋ฆ)
- e.g., mrtydi์ ๊ฒฝ์ฐ:
sparse model
python -m pyserini.index.lucene \
--collection JsonCollection \
--input datasets/dataset_name/collection.jsonl \
--index /path/to/indexing/sparse \
--fields text \
--generator DefaultLuceneDocumentGenerator \
--language $LANG_CODE \
--threads $NUM_THREADS \
--storePositions --storeDocvectors --storeRaw
language code์ ๊ฒฝ์ฐ ISO 639-1 ๋ฐฉ์์ ๋ฐ๋ฆ (e.g., en, ko, ja, zh)
multifield๋ฅผ ํ์ฉํ ๊ฒฝ์ฐ collection์ "contents"์ ํ ์คํธ๋ด์ field๋ค์ \n์ผ๋ก ๊ตฌ๋ถํ๊ณ , --fields์ field ์ด๋ฆ๋ค(i.e., --fields title text)์ ๋ฃ์ด์ค.
- mrtydi์ ๊ฒฝ์ฐ delimiter๋ฅผ '\n\n'์ผ๋ก ์ฌ์ฉํจ
{"id": "5#1", "contents": "์ง๋ฏธ ์นดํฐ\n\n์ง๋ฏธ ์นดํฐ๋ ์กฐ์ง์์ฃผ ์ฌํฐ ์นด์ดํฐ ํ๋ ์ธ์ค ๋ง์์์ ํ์ด๋ฌ๋ค. ์กฐ์ง์ ๊ณต๊ณผ๋ํ๊ต๋ฅผ ์กธ์
ํ์๋ค. ๊ทธ ํ ํด๊ตฐ์ ๋ค์ด๊ฐ ์ ํจยท์์๋ ฅยท์ ์ํจ์ ์น๋ฌด์์ผ๋ก ์ผํ์๋ค. 1953๋
๋ฏธ๊ตญ ํด๊ตฐ ๋์๋ก ์ํธํ์๊ณ ์ดํ ๋
์ฝฉยท๋ฉดํ ๋ฑ์ ๊ฐ๊ฟ ๋ง์ ๋์ ๋ฒ์๋ค. ๊ทธ์ ๋ณ๋ช
์ด \"๋
์ฝฉ ๋๋ถ\" (Peanut Farmer)๋ก ์๋ ค์ก๋ค."}
MAX_LENGTH: positional embedding์ ์ต๋ ๊ธธ์ด (e.g., BERT: 512, DPR: 256)
๊ฒฐ๊ณผ๋ฌผ (dir: /path/to/indexing)
- docid: sets of passage id
- index: concatenation of (compressed) index vectors, binary file
2. Search
- Indexing๋ collection์ ๋ํ์ฌ query์ ๋ํ ranking ์ํ
online
- with sparse indexing
export QUERY="์ต์ด๋ก ์ ๊ธฐ ์๋์ฐจ๋ฅผ ๊ฐ๋ฐํ ๊ธฐ์
์ ์ด๋์ธ๊ฐ?"
python search_online.py --index_type sparse --index /path/to/indexing/sparse --query "$QUERY" --lang_abbr $LANG_CODE
๊ฒฐ๊ณผ ์์
1 1830196#0 21.52590
{
"id" : "1830196#0",
"contents" : "์ฐฝ์ ์๋์ฐจ(, )๋ ์คํ์ธ๋ฏผ๊ณตํ๊ตญ์ ์๋์ฐจ ์ ์กฐ ๊ธฐ์
์ด๋ค. ๋ณธ์ฌ๋ ์ถฉ์นญ ์์ ์๋ค. ๋์ด ์๋์ฐจ, ๋ฅํ ์๋์ฐจ, ์ํ์ด ์๋์ฐจ, ์ฒด๋ฆฌ ์๋์ฐจ์ ํจ๊ป ์คํ์ธ๋ฏผ๊ณตํ๊ตญ์ 5๋ ์๋์ฐจ ์ ์กฐ ๊ธฐ์
์ผ๋ก ์ฌ๊ฒจ์ง๋ค. ์คํ์ธ๋ฏผ๊ณตํ๊ตญ์ ์๋์ฐจ ์ ์กฐ ๋ฐ ํ๋งค, ์๋์ฐจ ์์ง ์ ํ ์ ์กฐ ์
์ฒด์ด๋ค. 1862๋
์ํ์ด ์์์ ์ดํ์ฅ์ ์ํด ์ค๋ฆฝ๋์์ผ๋ฉฐ 1950๋
๋ ๋ง์ ์งํ๋ฅผ ์ต์ด๋ก ์์ฐํ๋ฉด์ ์๋์ฐจ ์ ์กฐ ๊ธฐ์
์ด ๋์๋ค. 1996๋
10์ 31์ผ ๋ฒ์ธ์ค๋ฆฝ๋์๊ณ ๋ํ์๋ ์ฅ ๋ฐ์ค๋ฆฐ์ด๋ค. 1984๋
์๋ ์ผ๋ณธ์ ์๋์ฐจ ์ ์กฐ ๊ธฐ์
์ธ ์ค์ฆํค์ ์ ํด ๊ด๊ณ๋ฅผ ์๋ฆฝํ๊ณ 2001๋
์๋ ํฌ๋ ๋ชจํฐ ์ปดํผ๋๋ฅผ ํฉ๋ณํ๋ฉด์ ์ฐฝ์ ํฌ๋ ์๋์ฐจ(้ทๅฎ็ฆ็นๆฑฝ่ป)๊ฐ ์ค๋ฆฝ๋์๋ค. 2009๋
์๋ ํํ์ด ์๋์ฐจ(ๅ้ฃๆฑฝ่ป), ์ฐฝํ ์๋์ฐจ(ๆๆฒณๆฑฝ่ป)๋ฅผ ํฉ๋ณํ๋ค. ์ถฉ์นญ ์๋์ฐจ ์์ฐ์ ํ๋ฐ์ ์ฐฝ์์๋์ฐจ๊ฐ ๋ด๋นํ๊ณ ์๋ค. ์ฐฝ์์ 1959๋
์ดํ ์ฐจ๋ฅผ ๋ง๋ค์ด์จ ๊ตญ์ ๊ธฐ์
์ผ๋ก 2์ฐจ๋์ ์ ๋ฏธ๊ตฐ์ฉ ์งํ๋ฅผ ๋ณธ๋ ๋ง๋ ๊ตฐ์ฉํธ๋ญ์ด ์๋ฐ์ ์ด์๋ค. ์ค๋๋ ๋ผ์ธ์
์ ์ ๊ธฐ์ฐจ ํ๋๋ฅผ ๋น๋กฏํ 17๊ฐ ๋ชจ๋ธ๋ก ํ๋๋๋ค. 7๊ฐ ์กฐ๋ฆฝ๊ณต์ฅ๊ณผ 1๊ฐ ์์ง๊ณต์ฅ์ ํตํด ํํด ์ฝ 100๋ง ๋๋ฅผ ๋ง๋ ๋ค. ์ฌ๊ธฐ์๋ค๊ฐ ์ฐฝ์์ ํฌ๋, ํธ์กฐ์ ์ค์ฆํค์๋ ํฉ์ํ๊ณ ์์ด ํํด ์์ฐ๋์ 300๋ง ๋์ ์ด๋ฅธ๋ค. ์ฐฝ์์๋์ฐจ๋ ๊ธ๋ก๋ฒ์ฐ๊ตฌ๊ฐ๋ฐ์์คํ
์ ๊ฐ๋์ค์ ์๋ค. ํ์ฌ ์ถฉ์นญ, ๋ฒ ์ด์ง, ํ๋ฒ ์ด, ํํ์ด, ์ดํ๋ฆฌ์ ํ ๋ฆฌ๋
ธ, ์ผ๋ณธ ์์ฝํ๋ง, ์๊ตญ ๋ฒ๋ฐ์, ๋ฏธ๊ตญ ๋ํธ๋ก์ดํธ ๋ฑ์ง์ ์ฐ๊ตฌ๊ฐ๋ฐ์ผํฐ๋ฅผ ์ค๋ฆฝํ์๋ค. ์ฐ๋ฆฌ๋๋ผ ํ์จ์์คํ
์ ๋
์ผ ํดํฌ์ค๋ฐ๊ฒ, ์ค๊ตญ ์ฐฝ์์๋์ฐจ ๋ฑ์ ์นํ๊ฒฝ์ฐจ์ฉ ์ ๋์ ์ปดํ๋ ์
๋ฅผ ๋ฉํํ๊ณ ์๋ค."
}
2 128660#8 19.02320
{
"id" : "128660#8",
"contents" : "1990๋
๋์ ๋ค์ด์ ์งํ ๊ฐ์๋ฆฐ์๋์ฐจ์ ์ํ ํ๊ฒฝ์ค์ผ๋ฌธ์ ๊ฐ ๋๋๋์๋ค. 1996๋
์ ๋๋ด ๋ชจํฐ์ค(GM)์ฌ๋ ์์ฐ ์ ๊ธฐ์ฐจ 1ํธ๋ก ๋ณผ ์ ์๋ 'EV1' ์ ๊ธฐ์๋์ฐจ๋ฅผ ๊ฐ๋ฐํ๋ค. ์ด ์ ๊ธฐ์๋์ฐจ๋ ๋ฏธ๊ตญ ์บ๋ฆฌํฌ๋์ ์ง์ญ์์ ์๋ํ์์ผ๋ก ๋ณด๊ธ๋๋ค. ๊ทธ๋ฌ๋ GM์ฌ๋ ์์๊ฐ ํฌ์ง ์์ ์์ต์ฑ์ด ๋ฎ๋ค๋ ์ด์ ๋ก 1๋
๋ง์ ์ ๊ธฐ์๋์ฐจ 'EV1'์ ์กฐ๋ฆฝ๋ผ์ธ์ ํ์ํ๋ค."
}
3 320611#0 18.99790
{
"id" : "320611#0",
"contents" : "๊ธฐ์ ๊ทธ๋ํ (Kia Granto) ๋๋ ์์์ ๊ทธ๋ํ (Asia Granto)๋ 1995๋
์ ์์์์๋์ฐจ๊ฐ ์์ฐํ ๋ํ ํธ๋ญ์ด๋ค. ๊ธฐ์์ฐจ๊ฐ ์ผ๋ณธ ํ๋
ธ ์๋์ฐจ์ ๊ธฐ์ ์ ํดํด์ ํ๋
ธ ํ๋กํผ์์ ์ฐจ์ฒด๋ก ๊ฐ๋ฐํ ๋ํ ํธ๋ญ์ด๋ค. ๊ธฐ์กด์ AM ํธ๋ญ์ ํ์ ์ฐจ์ข
์ผ๋ก ๊ฐ๋ฐํ ํธ๋ญ์ผ๋ก, ์์์์๋์ฐจ๊ฐ ์ฐฝ์ฌ 30์ฃผ๋
์ ๊ธฐ๋
ํด์ ๊ฐ๋ฐํ ํธ๋ญ์ด๋ค. ์ ํ ์ฌ์์ผ๋ก ABS ๋ธ๋ ์ดํฌ, ์๋ ์ ํ ์ฅ์น, ๋ธ๋ ์ดํฌ ๋ผ์ด๋ ๊ฐ๊ทน ์๋ ์กฐ์ ์ฅ์น, ์คํ ๊ทธ๋ฆฌ์ค, ํ๋ธํ ๋ธ๋ ์ดํฌ ํ์ดํ, ์ ๊ธฐ์ ๋ณ์๊ธฐ ์ ํ ์ฅ์น ๋ฑ์ ํ์ฌํ์๋ค. 1997๋
์ ๋ํ๋ฏผ๊ตญ์ฐ ํธ๋ญ ์ต์ด๋ก U์ํ ์ ์ฌํจ์ ํ์ฌํ์์ผ๋ฉฐ, ์ต๊ณ ์ถ๋ ฅ 430๋ง๋ ฅ์ FY(8ร4) 23ํค ๋คํ ํธ๋ญ์ ์ถ์ํ์๋ค. 1999๋
์ ์์์์๋์ฐจ๊ฐ ๊ธฐ์์๋์ฐจ์๊ฒ ํก์ ํฉ๋ณ๋์์ผ๋ฉฐ, ์ดํ ๊ธฐ์์๋์ฐจ์์ ์์ฐํ๋ค๊ฐ 2000๋
8์์ ๋ฐฐ๊ธฐ ๊ฐ์ค ๊ท์ ๋ฅผ ์ถฉ์กฑ์ํค์ง ๋ชปํ์ฌ ํ์ ์ฐจ์ข
์์ด ๋จ์ข
๋๋ฉด์, ๊ธฐ์์๋์ฐจ๋ ๋ํ ํธ๋ญ ์ฌ์
์ ์ค์นด๋์ ์ฝ๋ฆฌ์์ ์๋ํจ์ ๋ฐ๋ผ ๋ํ ํธ๋ญ์ ์์ฅ์์ ์์ ํ ์ฒ ์ํ์๋ค."
}
4 1226703#1 18.78540
{
"id" : "1226703#1",
"contents" : "1845๋
์ ํ์ฌ๋ฅผ ์ฐฝ๋ฆฝ ํ์ผ๋ฉฐ ๋
์ผ์ ์ ์งํ ๊ธฐ์ค๊ธฐ ์์ฐํ๋ ๊ธฐ์
์ค ๊ฐ์ฅ ์ค๋๋์๋ค. 1868๋
์ ๋ง์ด ๋๋ ์๋ฐฉ์ฐจ๋ฅผ ๊ฐ๋ฐํ์ผ๋ฉฐ 1890๋
์ ์ต์ด๋ก ์ฆ๊ธฐ ์๋ฐฉ ์ฐจ๋์ ์์ฐํ๋ค. 1914๋
์ ์ต์ด๋ก ํธ๋ญ๊ณผ ํน์ ์ฐจ๋์ ์ ์ํ๋ค. 1918๋
์ ์์ค๋ฐํ ์๋์ฐจ ๊ณต์ฅ๊ณผ ๋๋ฅด๋ฒ ๋ฅดํฌ ์๋์ฐจ ๊ณต์ฅ์ ํฉ๋ณํ๋ค. 1937๋
์ 3์ถ ํธ๋ญ์ ์์ฐ ํ์ผ๋ฉฐ 1943๋
์ ์ 2์ฐจ ์ธ๊ณ๋์ ์ผ๋ก ๊ธฐ์กด ๊ณต์ฅ์ด ํ๊ดด๋๋ฉด์ ์๋ก์ด ๊ณต์ฅ์ ๊ฑด์คํ๋ค. 1956๋
์ ๊ตฐ์ฌ ๋ชฉ์ ์ ์ํด ๋ํ ํธ๋ ฅ๊ณผ ์ฅ๋น๋ฅผ ๊ฐ๋ฐํ๋ค. 1960๋
๋์ ์ต์ด๋ก ๊ธฐ์ค๊ธฐ๋ฅผ ์ ์ํ๊ธฐ ์์ ํ์ผ๋ฉฐ 1970๋
๋๋ถํฐ 1980๋
๋๊น์ง ๊ฐ๋ฐํ๋ค. 1985๋
์ ์ต๋ 50ํค ์ฉ๋์ ๊ฐ์ง ์ ์งํ ๊ธฐ์ค๊ธฐ๋ฅผ ๊ฐ๋ฐํ๋ค. 1990๋
์ผ๋ณธ์ ๊ธฐ์ค๊ธฐ ํ์ฌ์๋ ํ๋ค๋
ธ์ ์ธ์ ๋์๋ค. 1991๋
์ ์ผ๋ณธ ์์ถ์ ์ํด ์ ์งํ ๊ธฐ์ค๊ธฐ๋ฅผ ์์ฐํ๋ค. 1995๋
์ ํ์ฌ ์ฐฝ๋ฆฝ 150์ฃผ๋
์ด ๋์๋ค. 2004๋
์ ์ต์ด๋ก ํ์งํ ๊ธฐ์ค๊ธฐ๋ฅผ ์ ์ํ๋ฐ ์ด์ด 2009๋
์ ํธ๋ญ ๊ธฐ์ค๊ธฐ๋ฅผ ์ ์ํ๋ค. 2013๋
์ ๊ณต์ฅ์ ํ์ฅ ๋ฐ ์ด์ ํ๋ฉด์ ํ์ฌ์ ์ด๋ฅด๊ณ ์๋ค."
}
5 1045157#14 18.30410
{
"id" : "1045157#14",
"contents" : "2010๋
3์ ์ธ๊ณ์ต์ด์ 2000cc๊ธ ์๋์ฐจ๋ฅผ ์ํ 15Kw๊ธ BLDC๋ฐ์ ๊ธฐ ๊ฐ๋ฐ, ์ ๊ธฐ์๋์ฐจ์ ์ฃผํ๊ฑฐ ๋ฆฌ ์ ํ ๊ทน๋ณต ์ธ๊ณ์ต์ด์ ๋๊ธ ๋ด์ฐ์ด๋ฅ์ฐจ์ ์ฑ๋ฅ์ ๋ฅ๊ฐํ๋ ์ ๊ธฐ์ค์ฟ ํฐ ํ๋ฆฌ์ค ๋ชจ๋ธ์ถ์ ๋ฐ ์ ์ฐจ๋ฐํํ EV์ ์์ฅ ์คํ"
}
6 128661#7 17.92510
{
"id" : "128661#7",
"contents" : "1991๋
11์ 21์ผ ํ๋์๋์ฐจ๋ ํ๊ตญ๋ด์์๋ ์ต์ด์ ์ ๊ธฐ์๋์ฐจ๋ฅผ ๋
์๊ฐ๋ฐํ๋ค๊ณ ๋ฐํํ๋ค."
}
7 1312657#1 17.78780
{
"id" : "1312657#1",
"contents" : "1939๋
์ ์ดํ๋ฆฌ์ ๋ํด๋ฆฌ ์ถ์ ์ธ ๋น์ผ์กฐ ์ํฌ๋ ์ค ๊ฒ๋ฅด๋ฐ์ง์ค()์ ํ์๋ ์ค ๋ํด๋ฆฌ()์ ์ํด ์ค๋ฆฝํ๋ค. ์ 2์ฐจ ์ธ๊ณ๋์ ๋น์ ์คํ์ธ์์ ํธ๋ญ์ ์์ฐํ๊ธฐ ์ํด ์ฐจ์ฒด ๋ฐ ์ฉ์ ์ ํ์ผ๋, ์ดํ ์ค์์ ํน์ฅ ํธ๋ญ ์บก ๋์์ธ์ ๊ฐ๋ฐํ๋ค. 1958๋
์ ์ต์ด๋ก ๊ณต์ฅ์ด ์ด์ ๋๋ฉด์ ๋ฒ์ค๋ฅผ ์์ฐํ๊ธฐ ์์ํ๋ค. 1960๋
์ ์ธ๊ณ ์ต์ด๋ก 2์ธต ๋ฒ์ค๋ฅผ ์์ฐํ๋ค. 1962๋
์ ์์ฐ ๊ณต์ฅ์ด ์ฌ์ด์ ๋๋ฉด์ ํฉํ ๋ฆฌ์์ค ๋ํด๋ฆฌ์ค SA()์ ์ธ์๋์๋ค. ์ด ํ์ฌ๋ ์์ฉ์ฐจ๋ฅผ ์์ฐํ ์
์ฒด๋ก ์ฃผ๋ก ๋ฒ์ค์ ํธ๋ญ์ ์์ฐํ๋ค. 1966๋
์ ๋ฐํค์ด๋ก์ค ๋์ ค SA()์ ๋งค๊ฐํ๋ค. 1969๋
์ ๋ค์ ํฌ๋ผ์ด์ฌ๋ฌ์ ๋ง๊ฐ์ด ๋์์ง๋ง ๋ฒ์ค ์ ์กฐ ๋ถ๋ฌธ์ ๊ฒฝ์ฐ 1971๋
์ ๋ฒจ๊ธฐ์์ ์๋์ฐจ ์ ์กฐ ๊ธฐ์
์ธ ๋ฐํธ๋ฅด์ ๋งค๊ฐ๋์๋ค. 1983๋
์ ๋ฐํธ๋ฅด๊ฐ ์ต๋ ์ฃผ์ฃผ๊ฐ ๋์๊ณ ์ธ์ ์ต๊ธฐ์ ๋ฐํธ๋ฅด์ ๋ธ๋๋๋ก ์ฐจ๋ ์์ฐ์ ํ์ง๋ง ์ดํ ์ด์คํ๋
ธ ์นด๋ก์ธ๋ผ SAL()๋ก ์ฌ๋ช
์ด ๋ณ๊ฒฝ๋์๋ค. 1997๋
์ ์ดํ๋ฆฌ์์ ์๋์ฐจ ์ ์กฐ ๊ธฐ์
์ธ ํผ๋ํ๋ผ๋()์ ์ ํด๋ฅผ ๋งบ๊ณ ์๋ด๋ฒ์ค ๋ชจ๋ธ์ธ ์๋นํ ์ ๊ณ ์๋ฒ์ค ๋ชจ๋ธ์ธ ๋๋ณด๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์์ํ๋ค. 2000๋
9์์ ๋ชจ๋ก์ฝ์ ์๋ ์นด์ฌ๋ธ๋์นด์ ๊ณต์ฅ์ ์ค๋ฆฝํ๋ค. 2005๋
์ ์ธ๋์ ์๋์ฐจ ์ ์กฐ ๊ธฐ์
์ธ ํํ์๋์ฐจ๊ฐ 21%์ ์ง๋ถ์ ํ๋ํ๋ฐ ์ด์ด 2009๋
์ ์ง๋ถ 79%๋ฅผ ์ธ์ํ๋ฉด์ ์ํ์ฌ๊ฐ ๋์๋ค. 2010๋
์ ํ์ฌ์ ์ฌ๋ช
์ผ๋ก ๋ณ๊ฒฝ์ด ๋์๋ค. 2013๋
9์์ ํํ์๋์ฐจ๋ ์ฌ๋ผ๊ณ ์ฌ ๊ณต์ฅ ํ์๋ฅผ ๋ฐํํ๋ค. ๋งค์ถ ํ๋ฝ๊ณผ ๋ฏธ๋ ์ ๋ง์ด ๋ถํฌ๋ช
์ผ๋ก ํ์ ๊ฒฐ์ ์ ๋ด๋ ธ๋ค."
}
8 128660#63 17.71300
{
"id" : "128660#63",
"contents" : "ํ์ง์ค๊ณต์
๊ณผ ๋ง์ธ ๋น์ ์๋์ฐจ๋ 2005๋
8์์ ์ ๊ธฐ์๋์ฐจ์ ๊ฐ๋ฐ ๊ณํ์ ๋ฐํํ์๋ค. ์ด 2๊ฐ ํ์ฌ๊ฐ ๊ฑฐ์ ์ค์ง ์ํ์๋ ์ ๊ธฐ์๋์ฐจ์ ๊ฐ๋ฐ์ ์ฌ๊ฐํ๊ณ ์๋ค. 2008๋
์ ๋ค์ด ๋์ฐ-๋ฅด๋
ธ ์ฐํฉ์ด ์ ๊ธฐ์๋์ฐจ๋ก ๋ณธ๊ฒฉ ์ฐธ์ฌ ๋ฐฉ์นจ์ ํ๋ช
ํ์๊ณ , ๋์ํ๋ 2010๋
๋ ์ด๋ฐ์ ์ ๊ธฐ์๋์ฐจ๋ฅผ ์ถ์ํ๊ธฐ๋ก ๋ฐํํ๋ ๋ฑ ์ ๊ธฐ ์๋์ฐจ๊ฐ ํ์ฑํ ์กฐ์ง์ ๋ณด์ด๊ณ ์๋ค."
}
9 126891#2 17.63640
{
"id" : "126891#2",
"contents" : "2007๋
, ์ค์จ๋ด์ ๋ํ ์๋์ฐจ ๋ฉ์ด์ปค์ธ ๋ณผ๋ณด๋ ์ธ๊ณ ์ต์ด๋ก ์ํ์ฌ ์๋์ฐจ๋ฅผ ์ ์ํด์ ์๋์ฐจ ๊ฒฝ์ฃผ์ ์ฐธ๊ฐํ๋ค. ์ค์จ๋ด์์๋ ๊ฐ์๋ฆฐ ์๋์ฐจ์ ๋์๋ด ์ฌ์ฉ์ ์ค์ด๊ณ , ์๋ฏผ๋ค์ด ์์ ๊ฑฐ๋ก ์ํํ ์ ์๊ฒ๋ ์ ๋ํ๊ณ ์๋ค. ๋ํ ๋ณผ๋ณด์์ ์นํ๊ฒฝ ์๋์ฐจ๋ฅผ ์ ๊ทน์ ์ผ๋ก ๊ฐ๋ฐํ๊ฒ ํ๊ณ , ์๋ฏผ๋ค์๊ฒ๋ ์นํ๊ฒฝ ์๋์ฐจ ๊ตฌ์
๋น์ 150๋ง ์์ ๋ณด์กฐ๊ธ์ ์ง๊ธํ๋ฉฐ, ์ฐ๋ฃ๋น๋ ๊ฐ์๋ฆฐ์ 70% ๊ฐ๊ฒฉ์ ์ฃผ์ ํ ์ ์๊ฒ ํ๋ ๋ฑ ์ ๊ทน์ ์ธ ํ์์ ์ ์ฑ
์ ์ํํ๊ณ ์๋ค."
}
10 128660#3 17.29680
{
"id" : "128660#3",
"contents" : "์ ๊ธฐ์๋์ฐจ๋ ๋์ ค ์์ง, ๊ฐ์๋ฆฐ ์์ง์ ์ฌ์ฉํ๋ ์คํ ์ฌ์ดํด(์ ์ ์ฌ์ดํด)๋ฐฉ์์ ์๋์ฐจ๋ณด๋ค ๋จผ์ ๊ณ ์ ๋์๋ค. 1830๋
๋ถํฐ 1840๋
์ฌ์ด์ ์๊ตญ ์ค์ฝํ๋๋์ ์ฌ์
๊ฐ ์ค๋์จ์ด ์ ๊ธฐ์๋์ฐจ์ ์์ด๋ผ๊ณ ํ ์ ์๋ ์ธ๊ณ ์ต์ด์ ์์ ์ ๊ธฐ๋ง์ฐจ๋ฅผ ๋ฐ๋ช
ํ๋ค. 1835๋
์ ๋ค๋๋๋ ํฌ๋ฆฌ์คํ ํผ ๋ฒ ์ปค๋ ์์ ํฌ๊ธฐ์ ์ ๊ธฐ์๋์ฐจ๋ฅผ ๋ง๋ ๋ค."
}
- with dense indexing
python search_online.py --index_type dense --index /path/to/indexing/dense --query "$QUERY" --encoder huggingface_model_name_or_checkpoint_path --device $DEVICE
DEVICE: 'cpu' or 'cuda:$GPU_ID'
- search๋ ํ์ฌ๋ single gpu๋ง ์ง์๋ฉ๋๋ค. multi gpu๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด individual process๋ฅผ ๋ง๋ค์ด์ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
with hybrid (first-pass: sparse, reranking: dense) indexing
python search_online.py --index_type hybrid --index /path/to/indexing/sparse,/path/to/indexing/dense --query "$QUERY" --encoder huggingface_model_name_or_checkpoint_path --device $DEVICE --alpha $ALPHA_MULTIPLIED_ON_SPARSE_SCORE --normalization --lang_abbr $LANG_CODE
- ALPHA_MULTIPLIED_ON_SPARSE_SCORE๋ (0,2)์์ line search๋ฅผ ํ๋ฉด์ ์ต์ ์ ๊ฐ์ ์ฐพ์ผ๋ฉฐ 0.5๊ฐ ๊ธฐ๋ณธ๊ฐ์ ๋๋ค.
batch
- with dense indexing
python -m pyserini.search.faiss \
--encoder huggingface_model_name_or_checkpoint_path \
--index /path/to/indexing_dense \
--topics datasets/dataset_name/queries.tsv \
--output /path/to/runfile --batch $BATCH_SIZE --threads $NUM_THREADS \
--hits $TOPK --remove-query --device $DEVICE
BATCH_SIZE, NUM_THREADS๋ ๊ธฐ๋ณธ๊ฐ์ 64, 16์ผ๋ก ์ฌ์ฉํฉ๋๋ค.
with sparse indexing
python -m pyserini.search.lucene --bm25 \
--topics datasets/dataset_name/queries.tsv \
--index /path/to/indexing_sparse \
--hits $TOPK \
--language $LANG_CODE \
--output /path/to/runfile
- hybrid model
python -m pyserini.search.hybrid \
dense --index /path/to/indexing_dense \
--encoder huggingface_model_name_or_checkpoint_path \
--device $DEVICE \
sparse --index /path/to/indexing_sprase \
fusion --alpha $ALPHA_MULTIPLIED_ON_SPARSE_SCORE \
run --topics datasets/dataset_name/queries.jsonl \
--output /path/to/runfile \
--threads $NUM_THREADS \
--batch-size $BATCH_SIZE \
--hits $TOPK
python -m pyserini.search.hybrid \
dense --index path/to/indexing/dense \
--encoder huggingface_model_name_or_checkpoint_path \
--device $DEVICE \
sparse --index /path/to/indexing/sprase \
fusion --alpha $ALPHA_MULTIPLIED_ON_SPARSE_SCORE \
run --topics datasets/dataset_name/queries.tsv \
--output runs/hybrid.run \
--threads $NUM_THREADS \
--batch-size $BATCH_SIZE \
--hits 1000
- ๊ฒฐ๊ณผ๋ฌผ (dir: /path/to/runfile)
format: qid q_type pid topK score retrieval_type
example:
46 Q0 271267 1 2.134944 Faiss 46 Q0 63734 2 2.118700 Faiss 46 Q0 174045 3 2.110519 Faiss ...
3. Evaluation (optional)
- qrels ํ์ผ์ ์ ๋ํ๊ฐ๋ฅผ ์ํ ground truth ํ์ผ๋ก, qid q_type pid relevance_score ํ์์ผ๋ก ๊ตฌ์ฑ๋์ด ์์.
- runfile์ batch๋ก ๊ฒ์ํ ๊ฒฐ๊ณผ๋ก, qid q_type pid topK score retrieval_type ํ์์ผ๋ก ๊ตฌ์ฑ๋์ด ์์.
- ์๋ ์คํฌ๋ฆฝํธ๋ qrels ํ์ผ๊ณผ runfile์ ๋น๊ตํ์ฌ nDCG@10, MRR@100, Recall@100 ๋ฑ์ ์งํ๋ฅผ ๊ณ์ฐํจ.
python -m pyserini.eval.trec_eval -c -mndcg_cut.10 -mrecip_rank -mrecall.100 /path/to/qrels /path/to/runfile
recip_rank all 0.3628
recall_100 all 0.7158
ndcg_cut_10 all 0.3805