ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • "[SK TECH SUMMIT 2023] RAG를 위한 Retriever 전략" 영상 리뷰
    AI/NLP 2024. 4. 22. 10:40
    728x90

     

     

     

     

    "[SK TECH SUMMIT 2023] RAG를 위한 Retriever 전략" 영상 리뷰

     

     

     

    • 목차 
      • Retrieval Augmented Generation 
      • RAG가 왜 어려운가?
      • Document Parsing - Table
      • Retriever 전략 

     

     


     

     

    Retrieval Augmented Generation 

     

     

     

     

     

     

    • RAG가 처음 등장한 건 GPT-3 등장 때쯤, 이때는 Generator의 성능 자체가 그다지 좋지 못하다 보니까 ... 
      • 요즘엔 LLM의 등장으로 Generator 성능 향상 -> Retriever & Document Parsing 부분의 중요성 !

     

     

    • 아직도 기업 내부 문서를 가지고 RAG하기에는 Retriever & Document Parsing 이 부분에서 어려움이 있다 ....

     

     

     

     

    RAG가 왜 어려운가?

     

     

     

     

    • OpenAI API로 Retrieval 했을 때에도 숫자나 답변 내용이 맞지 않는 등 성능 그다지 좋지 못하다 
      • 왜 그럴까? -> 우리가 다루는 문서의 특징을 보자 

     

     

     

     

    • 기업 내부에서 많이 쓰는 문서 형식을 보면 아래와 같은 특징과 어려움 있다 
      • PDF의 경우,
        • 조판 시스템
        • 다단과 같은 경우에 글의 순서 순차적으로 적혀있지 않는 등 ... Layout 알 수 없음 
        • Table을 잘 인식하지 못함 
        • Header와 Footer 모름 
      • Word
        • 조판 시스템
      • CSV
        • Table이 Table이 아님 

     

     

     

    • OpenAI API와 Alli에서 생성한 답변 차이 

     

     

     

    1. Document Parsing - Table

     

     

    • 문서를 parsing할 때 가장 어려운 Table, 어떻게 다뤄야 할까? 
      • 1. Markdown
        • 작은 Table  넣었을 땐 잘 되지만, 조금만 더 커지면 잘 되지 않는다 
        • MD의 형식이 깨지는 경우: |나 엔터와 같은 특수문자 들어가면 ... 
      • 2. Natural Language 
        • Table의 Header등을 참고해서 자연어로 바꿔준다 ㅇㅇ 
        • Merged cell 등 어려운 형식의 Table이더라도 Header만 잘 잡을 수 있으면 잘 변환하더라 
        • Retriever에서도 잘 추출해내더라 

     

     

     

    • 요약하자면 ...

     

     

     

     

     

    2. Retriever 전략 

     

     

     

    • 1. Sparse Retriever 
      • Keyword 기반의 Search  
      • 문제 :
        • 꼭 답변이 Keyword가 언급된 곳에서 찾을 수 있는 것인가? 그렇지 않은 경우도 있잖아 -> 한계 

     

     

     

    • 2. Ensemble Retriever 
      • 아래 그림은 실제 고객 문서들로 Retrieve했을 때의 성능
      • 하지만 성능이 천차만별이다 .... ! 
        • 따라서, 고객 문서와 질문에 따라서 Weight를 자동으로 조절할 필요가 있다 

     

     

     

     

     

    • 3. Dense Retriever
      • 그럼 DPR (Dense Passage Retreival)을 학습을 하면 다 성능이 좋나? -> 실세계에 적용했을 때 문제가 발생 
      • 우선 Dense Retriever 학습 방법 
        • 1) Cross Encoder 
          • 얘는 성능은 좋으나, 사실상 쓸 수 없는 애
          • Context가 수십 만개인데, 실시간으로 질문 하나 들어올 때마다 하나씩 다 모델에 태우는 게 불가능하잖아 
        • 2) Bi Encoder  
          • 위와 비슷한 문제 발생 ... 
          • Data가 쌓일 때마다 또 학습하고 또 학습하고 ... 몇십만개의 Vector 학습 모두 하는 거 불가능 

     

     

     

     

    • 결국 아래와 같은 모습으로 Retriever 구성될 수밖에 없다 - input question만 학습하는 것! 
      • 그럼 저 Model을 학습할 데이터셋은 어떻게 구하나? 
        • Positive sample에 대해선 GPT등으로 생성할 수 있음 ㅇㅇ 
        • 하지만 현재까지는 Negative sample에 대해선 GPT 등의 모델로는 생성하기 어렵다 ... 
          • 그럼 뭐 1번 페이지의 Positive Sample을 2번 페이지의 Negative Sample로 사용할 수 있지 않을까? -> 그것도 불가능한 경우 많음 

     

     

    => 결국엔, Positive Sample만 구할 수 있으므로, Binary Cross Entropy같은 loss function을 사용할 수 없게 되고 Cosine Embedding Loss나 벡터끼리 비교하는 MSE만 가능하게 된다 ... 

     

     

     

     

     

    • OpenAI Embedding을 Baseline으로 위 방식 (MSE, Cosine) 실험해보았다 (이유: Context Window 제일 길어서 )
      • 왼쪽 그림을 봤을 때, 2D로 PCA 했을 때 질문 벡터(빨간색)와 문서 벡터(파란색) 분리되어 있음 ㅇㅇㅇ
      • 오른쪽의 모델 통과한 그림을 보면, 학습 후 질문 벡터(초록색)이 문서 벡터와 거의 맵핑됨 ㅇㅇㅇ 잘된다 !

     

     

     

    • 하지만 발표자 분의 말로는, 이게 왜 잘 되는지 의구심이 든다며 ... 호호 
      • 아래와 같이 잘 되지만, 또 데이터셋에 따라 성능이 달라지는 경향을 보인다 

     

     

     

     

    정리

     

     

     

     

    • 감상 
      • 양질의 영상, 재밌다 ... 이번 Tech Summit은 수료식 참가하느라 다른 강연들 못 들었는데 올해 열리면 꼭 참석해봐야겠다  
      • Retriever 관련 논문들 좀 더 읽어보고 싶다는 생각
      • Document Parsing할 때 OCR 중요하겠다, 좀 더 찾아보니 Huggingface 페이지에서 관련 아티클 볼 수 있었음 

     

     

     

     

    Ref.

     

     

    https://www.youtube.com/watch?v=sy2asT2c8FM&t=651s

     

    728x90
Designed by Tistory.