TIL
  • Main
  • TIL : ML
    • AI News
      • AI-powered coding, free of charge with Colab
    • Paper
      • Retrieval-augmented generation for knowledge-intensive nlp tasks
        • reference 정리
      • Sequence to Sequence
    • Generative AI
      • LLM
        • 기본 개념
    • Boostcamp
      • Daily Report
        • 2021
          • 09
            • week4
            • week5
          • 10
            • week1
            • week2
            • week3
            • week4
          • 11
            • week1
            • week2
            • week3
            • week4
            • week5
          • 12
            • week1
            • week2
            • week3
      • Final Project
        • 프로젝트 기획
          • 🌟최종 프로젝트 기획
          • 최종 프로젝트 Version
          • 아이디어 수집
          • 욕설, 혐오발언 감지
          • 라이브 커머스 레포팅 프로젝트
        • 프로젝트 진행
          • week1
          • week2
          • week3
      • Competition
        • 1. [NLP] 문장 내 개체간 관계 추출
          • Day1 (9.27, 월)
          • Day2-3 (9.28~29, 화~수)
          • Day4 (9.30, 목)
          • Day5 (10.1, 금)
          • Day6~7 (10.2~3, 토~일)
          • Day8 (10.4, 월)
          • Day9 (10.5, 화)
          • Day10 (10.6, 수)
          • Day 11 (10.7 목)
        • 2. [NLP] MRC 프로젝트
          • Day1 (10.25, 월)
          • Day2 (10.26, 화)
          • Day3 (10.27, 수)
          • Day4-5 (10.28-29, 목-금)
          • Day6 (11.1, 월)
          • Day7 (11.2, 화)
          • Day8 (11.3, 수)
          • Day9 (11.4, 목)
        • 🔨3. [NLP] 데이터 제작
          • Day1
        • 🔨4. [공통] 모델 경량화
      • [U Stage] - DL basic
        • (01강) 딥러닝 기본 용어 설명 - Historical Review
        • (02강) 뉴럴 네트워크 - MLP (Multi-Layer Perceptron)
        • (03강) Optimization
        • 🔨(04강) Convolution은 무엇인가?
        • 🔨(05강) Modern CNN - 1x1 convolution의 중요성
        • 🔨(06강) Computer Vision Applications
        • (07강) Sequential Models - RNN
        • (08강) Sequential Models - Transformer
        • Page 2
      • [U Stage] - PyTorch
        • (01강) Introduction to PyTorch
        • (02강) PyTorch Basics
        • (03강) PyTorch 프로젝트 구조 이해하기
        • (04강) AutoGrad & Optimizer
        • (05강) Dataset & Dataloader
        • (06강) 모델 불러오기
        • (07강) Monitoring tools for PyTorch
        • (08강) Multi-GPU 학습
        • (09강) Hyperparameter Tuning
        • (10강) PyTorch Troubleshooting
      • [U Stage] - NLP
        • (01강) Introduction to NLP, Bag-of-Words
        • (02강) Word Embedding
        • (03강) Recurrent Neural Network and Language Modeling
        • (04강) LSTM and GRU
        • (05강) Sequence to Sequence with Attention
        • (06강) Beam Search and BLEU score
        • (07-08강) Transformer
        • (09강) Self-supervised Pre-training Models
      • [P Stage] - KLUE
        • (1강) 인공지능과 자연어 처리
        • (2강) 자연어의 전처리
        • (3강) BERT 언어모델 소개
        • (4강) 한국어 BERT 언어 모델 학습
        • (5강) BERT 기반 단일 문장 분류 모델 학습
        • (6강) BERT 기반 두 문장 관계 분류 모델 학습
        • (7강) BERT 언어모델 기반의 문장 토큰 분류
        • 오피스아워 (9.30, 목)
        • (8강) GPT 언어 모델
        • (9강) GPT 언어모델 기반의 자연어 생성
        • (10강) 최신 자연어처리 연구
      • [P Stage] - MRC
        • Before Study
        • (1강) MRC Intro & Python Basics
        • (2강) Extraction-based MRC
        • (3강) Generation-based MRC
        • (4강) Passage Retrieval - Sparse Embedding
        • (5강) Passage Retrieval - Dense Embedding
        • 오피스아워
        • (6강) Scaling up with FAISS
        • (7강) Linking MRC and Retrieval
        • (8강) Reducing Training Bias
        • (9강) Closed-book QA with T5
        • (10강) QA with Phrase Retrieval
        • 마스터클래스
      • [P Stage] - 데이터제작(NLP)
        • (1강) 데이터 제작의 A to Z
        • (2강) 자연어처리 데이터 기초
        • (3강) 자연어처리 데이터 소개 1
        • (4강) 자연어처리 데이터 소개 2
        • (5강) 원시 데이터의 수집과 가공
        • 오피스아워 (11.10, 수)
        • (6강) 데이터 구축 작업 설계
        • (7강) 데이터 구축 가이드라인 작성 기초
        • (8강) 관계 추출 과제의 이해
        • (9강) 관계 추출 관련 논문 읽기
        • (10강) 관계 추출 데이터 구축 실습
      • [P Stage] - 모델 최적화
        • (1강) 최적화 소개 및 강의 개요
        • (2강) 대회 및 데이터셋 소개
        • (3강) 작은 모델, 좋은 파라미터 찾기: AutoML 이론
        • 🔨(4강) 작은 모델, 좋은 파라미터 찾기: AutoML 실습
        • (5강) 작은 모델, 좋은 파라미터 찾기: Data Augmentation & AutoML 결과 분석
        • 🔨오피스아워 -Baseline 코드에 모듈 작성하기(신종선 멘토님)
      • [P Stage] - Product Serving
        • Part 1: Product Serving 개론
          • 1.1 강의 진행 방식
          • 1.2 MLOps 개론
          • 1.3 Model Serving
          • 1.4 머신러닝 프로젝트 라이프 사이클
        • Part 2: 프로토타입부터 점진적으로 개선하기
          • 2.1 프로토타이핑 - Notebook 베이스(Voila)
          • 2.2 프로토타이핑 - 웹 서비스 형태(Streamlit)
          • 2.3 Linux & Shell Command
          • 2.4 Cloud
          • 2.5 Github Action을 활용한 CI/CD
        • Part 3: 더 완성화된 제품으로
          • 3.1.1 FastAPI
          • 3.1.2 Fast API
          • 3.1.3 Fast API
          • 3.2 Docker
          • 3.3 Logging
          • 3.4 MLFlow
        • Part 4: 심화 소재
          • 4.1 BentoML
          • 4.2 Airflow
          • 4.3 머신러닝 디자인 패턴
          • 4.4 앞으로 더 공부하면 좋을 내용
      • 특강
        • (특강) 김상훈 - 캐글 그랜드마스터의 노하우 대방출
        • (특강) 이활석 - 서비스 향 AI 모델 개발하기
        • (특강) 구종만 - AI + ML과 Quant Trading
        • (특강) 문지형 - 내가 만든 AI 모델은 합법일까, 불법일까
        • (특강) 이준엽 - Full Stack ML Engineer
        • (특강) 박은정 - AI 시대의 커리어 빌딩
        • (특강) 오혜연 - AI Ethics
    • Competition
      • (DACON)한국어 문장 관계 분류 경진대회
        • Day1(2.14, 월)
        • Day2(2.15, 화)
        • Day3(2.16, 수)
        • Day4(2.17, 목)
      • 2021 인공지능 데이터 활용 경진대회
        • 역량평가
          • Day1 (9.28, 화)
          • Day2 (9.29, 수)
          • Day3 (9.30, 목)
        • 예선
          • Data 분석
          • NSML
          • What We Have Done?
    • ETC
      • 인터뷰 대비
        • Computer Science
        • ML/DL
      • Poetry로 dependency 관리
        • window에서 설치하기
      • code block
      • 공부할 것 임시보관
      • Transformer to T5
      • Hugging Face Tutorial
        • Ch1. Transformer models
        • Ch2. Using Transformers
        • Ch3. Fine-tuning a model with the Trainer API
      • KLUE
      • Pandas
  • TIL : Ops
    • AWS
      • SageMaker
  • TIL : Computer (CS)
    • Error
      • TextEncodeInput must be Union[TextInputSequence, Tuple[InputSequence, InputSequence]]
    • Algorithm
      • Theory
      • Programmers
        • 기능개발
    • ETC
      • Github 커밋 히스토리 삭제
Powered by GitBook
On this page
  • 1. passage retrieval and similarity search
  • 1.1. review
  • 1.2. MIPS(Maximum Inner Product Search)
  • 1.3. Tradeoffs of similarity search
  • 1.4. Increasing search space by bigger corpus
  • 2. Approximation Similarity Search
  • 2.1. Compression - Scalar Quantization (SQ)
  • 2.2. Pruning - Inverted File (IVF)
  • 3. Introduction to FAISS
  • 3.1. FAISS
  • 3.2. 활용방법
  • 4. Scaling up with FAISS
  • 실습코드 Link

Was this helpful?

  1. TIL : ML
  2. Boostcamp
  3. [P Stage] - MRC

(6강) Scaling up with FAISS

Previous오피스아워Next(7강) Linking MRC and Retrieval

Last updated 3 years ago

Was this helpful?

  • scale이 커진 상황에서 효율적인 검색을 수행하기 위한 방법

  • similarity search의 개념 복습

  • approximate search 이해

    • faiss 활용법

[Reference & Further Reading]

  • FAISS blog

  • FAISS github

  • FAISS tutorial

  • Getting started with Faiss

1. passage retrieval and similarity search

1.1. review

실시간으로 유사도를 측정하기 위한 검색 기법에 대해 알아본다

1.2. MIPS(Maximum Inner Product Search)

주어진 질문(query) 벡터 q에 대해 passage 벡터 v들 중 가장 질문과 관련된 벡터를 찾아야함 -> 여기서 관련성을 내적(inner product)이 가장 큰 것

4,5 강에서는 brute-force(exhaustive) search를 사용하였다. 이는 저장해둔 모든 sparse/ dense 임베딩에 대해 일일히 내적값을 계산하여 가장 값이 큰 passage를 추출하는 것으로 passage 갯수가 방대해짐에 따라 원하는 속도를 얻을 수 없게 된다.

하여 passage를 indexing하여 벡터를 저장하고, 인덱싱된 벡터들 중 질문벡터와 가장 내적값이 큰 상위 k개의 벡터를 찾는 과정을 거친다.

argmaxvi∈V(qTvi) \underset{v_i\in V}{argmax} (q^Tv_i)vi​∈Vargmax​(qTvi​)

하지만 인덱싱을 함에도 실제로 검색해야하는 데이터는 훨씬 방대하다. 5백만 개의 위키피티아 데이터 뿐만 아니라 수십억, 조 단위로 커질 수 있다.

1.3. Tradeoffs of similarity search

  • Search speed

    • 쿼리당 유사한 벡터를 k개 찾는데 얼마나 걸리는지

    • Pruning

  • Memory Usage

    • RAM에 모두 올려둘 수 있으면 빠르지만, 많은 RAM 용량을 요구함

    • Compression

  • Accuracy

    • brute-force 검색 결과와 얼마나 비슷한지?

    • 속도를 위해 정확도를 포기하는 경우도 있음

    • Exhaustice search

1.4. Increasing search space by bigger corpus

Corpus의 크기가 커질수록 탐색공간이 커지고, 검색이 어려워지며, Memory Space가 많이 필요하다. 또한 Sparse Embedding의 경우는 용량 문제가 더 크다고 볼 수 있다.

2. Approximation Similarity Search

용량과 속도측면의 문제를 해결하기 위한 방법에 대해 알아본다.

2.1. Compression - Scalar Quantization (SQ)

  • vector를 압축하여, 하나의 vector가 적은 용량을 차지하도록 한다.

  • 이를 통해 압축량은 증가하고, 사용되는 메모리 감소하지만 정보 손실이 증가한다.

  • ex) Scalar quantization: 4-byte floating point -> 1-byte unsigned integer로 압축

💭 sparse 대신 dense를 쓰는 것 같은 느낌?

2.2. Pruning - Inverted File (IVF)

Search space를 줄여 search 속도 개선 (dataset의 subset만 방문)

-> Clustering + Inverted file을 활용한 search

  • Clustering: 전체 vector space를 k개의 cluster로 나눔(k-means clustering)

  • Inverted File (IVF)

    • Vector의 index => inverted list structure

    • 각 cluster의 centroid id 와 해당 cluster의 vector들 이 연결되어있는 형태

💭 단순히 index를 주는 것과 군집형태로 하는 것이 가지는 차이가 무엇인가..?? 결국 해당하는 군집을 찾는다는 개념이면 데이터 양이 커짐에 따라 같은 문제가 발생하는게 아닌가??

  • 주어진 query vector에 근접한 centroid 벡터를 찾고,

  • 찾은 clusterd의 inverted list내 vector들에 대해 서치를 수행한다.

💭 mrc 할 때보면 우선 passage를 찾고 그 안에서 정답을 찾는것처럼 일단 군집을 찾고 그 안에서 vector를 찾는 개념

3. Introduction to FAISS

3.1. FAISS

  • Facebook에서 만든 속도향상을 위한 오픈소스 라이브러리

  • 인덱싱쪽에 도움을 줌

3.2. 활용방법

Train index and map vectors

  • 데이터 분포를 보고 Cluster를 나누기 위한 학습이 필요함. index.train()

  • Scalar Quantization 과정에서도 어느정도로 할 지를 정하기 위해 학습이 필요하다.

  • 그 후 cluster안에 vector들을 넣어주게 된다.

    • 보통은 train과 add를 동일한 데이터로 하지만, 데이터양이 너무 크다면 1/40로 하는 경우도 있음.

Search based on FAISS index

nprobe: 몇개의 가장 가까운 cluster를 방문하여 search 할것이지

4. Scaling up with FAISS

💭 Gitbook 패치하더니 python code block 쓰는게 안된다.... 화가 난다...

이상은 생략하고 실습 코드로 보기로한다.

실습코드 Link

MRC Practice 6 - Scaling up with FAISS.ipynbGoogle Docs
Logo