Information retrieval

Yezun Chung·2025년 2월 25일

Deep Learning

목록 보기
17/17
  1. Sparse retrieval : 빠름
    • idf : 얼마나 이 단어가 흔치 않게 등장하는가?
      * tf-idf : 그냥 tf 곱하기 idf
    • Doc2Query : document expansion
    • COIL : query 와 문서 공통 단어 유사도 이용
    • BM25
  2. Dense passage retrieval (DPR)
    • query 와 candidate 을 독립적으로 encoding 해서 score 구해서 K개 근처 candidate 찾기 (same with bi-encoder)
      - MIPS 를 사용하기 좋음
      - gold candidate 을 놓칠 수 있음 (거리로 유사도만 찾아서)
    • BERT encoder 로 문장 임베딩 얻는게 기본
    • BERT 말고 다른 sentence encoder를 쓸 순 없을까?
      - Sentence-transformers 허깅페이스에 많음(ex. T5-encoder)
    • Decoder-based language model 을 쓸 순 없을까? Generation 성능이 너무 좋으니까..
      - Llm2Vec (2024) : decoder llm 의 hidden state 를 가져와서 임베딩으로 써야지
      - Enabling bidirectional attention
      - Causal attention 을 bidirectional 로 바꾸기
      - Masked Next Token Prediction
      - MLM 처럼 masking 을 하고 단어를 예측
      - 하지만 차이점은, 다음 단어를 예측하고자 하기 때문에 (decoder 의 맛을 살리기 위해서) 전 output에 classifier 를 달아서 다음 단어를 예측함!
      - Unsupervised Contrastive Learning
      - masking 을 한 같은 문장들이 서로 비슷하게끔, 원래 다른 문장이었다면 다르게끔 embedding 을 학습
      - Details
      - Pooling : 단어가 아닌 "문장"의 임베딩을 얻기 위한 방법
      - EOS 의 hidden state, 모든 단어 hidden state 의 평균, 특정 단어에 가중치(attention에서 가져오거나 tf-idf) 를 둔 가중 평균 등을 사용함
      - 성능은 encoder 보다 좋은데, 좀 느린 것 같음
    • MIPS (Maximum Inner Product Search)
      - 이걸 통해서 좀 더 document search 를 빠르게 할 수 있음
      - FAISS(facebook) : layer 를 타고 들어가면서 가까운 애들을 빠르게 찾음
      - ScaNN(google)
  • Reranking
    - 나오게 된 배경 : DPR 가 정확하지 않을 때도 있음, 그래서 더 정확하게 multi-stage 로 reranking 하려 함
    - 종류
    - Cross-encoder : query 와 document 묶어서 encoding 후 score 구함
    - 좀 더 candidate 세밀히 볼 수 있음
    - 하지만 높은 비용 듬
    - ex)
    - monoT5 : 그냥 query & document 묶는 cross-encoder
    - DuoT5 : document 두개와 query 묶는 cross-encoder
    - Cross-encoder 는 너무 느리다..
    - ColBERT
    - DPR 처럼 query 랑 document 따로 해서 MaxSim을 구하는 방식 (bi-encoder 느낌)
    - MaxSim
    - Query의 모든 토큰들에 대해서, 모든 document 의 토큰의 embedding 과 dot product 해서 가장 높은 값을 가져오고, 이를 다 더해서 score 로 구함
    - cross-encoder 는 전부다 online 으로 매번 document 와 묶어 임베딩을 구해야 하지만, ColBERT 는 document encoder 부분은 offline 으로 미리 빠르게 구함
    - 성능은 비슷하지만 빠름
    - 대신 document 가 메모리를 많이 차지함
    - CMC (Comparing Multiple Candidates) - 종현님 논문
    - ColBERT 는 모든 document token 다가지고 있어 메모리를 많이 차지하지만 , cls 부분 token embedding 만 가지고 구할순 없을까?
    - Document indexing 속도를 최대한 빠르게
    - document 를 여러 개를 가져오지만(listwise reranking), 한 document 와 query embedding 은 cls 단 부분만 가져옴
    - query embedding CLS token 과 document embedding CLS token 들을 합쳐서 cross-encoder 처럼 self-attention 한 번 더 진행
    - 그냥 DPR 처럼 하지 않고 self-attention 한번 더 해서 성능 높임
    - Listwise reranking
    - 그냥 LLM 쓰기 : sliding window 로 봄
    - ListT5 - 소영님 논문
    - query 와 document 묶어서 encoding (cross-encoder) 하고, 각각 여러개 encoding 을 decoder 에 넣는 Fusion in decoder(FiD) 이용
    - decoder 는 sorted index of passage 을 뱉고, 이거를 학습함
    - LLM 기반 listwise 보다 빠르고, positional bias 에 강하며 zero-shot retrieval 에 성능이 좋음
    - context length 는 tournament sort 를 활용해서 해결
    - 학습을 잘하자는 방법이기 때문에, constraints 를 어길 수 있다는 단점 존재
    - Hallucination 가능
    - Ordering bias 문제
  • Benchmarks
    - MS-MARCO 로 training (BEIR 에 포함돼있음)
    - BEIR 의 다른 dataset 으로 zero-shot evaluation
    - MTEB 라는거도 씀
  • Evaluation metrics
    - precision & recall
    - @K 는 topK
    - Mean Average Precision : document 마다 precision 평균 내기
    - User feedbacks
    - DCG
    - usefulness
    - document 마다 relevance 를 정의
    - nDCG
    - normalized DCG
    - MRR (Mean Reciprocal Rank)
  • Evaluating with LLM
profile
CS undergraduate student, interested in ML, NLP, CV, RL, multi-modal AI

0개의 댓글