Jabiseo / Jabiseo-Docs

jabiseo docs
0 stars 0 forks source link

분석 시스템 #3

Open morenow98 opened 1 week ago

morenow98 commented 1 week ago

기술

태깅, 벡터 임베딩

기획 의도

기술적인 챌린지가 되면서도 사용자에게 유용한 기능을 고민하면서 산타토익, 수학대왕 등 많은 서비스를 탐색 문제를 추천하는 기능이 사용자에게 제일 도움이 되는 것 같았고, 멘토님께 관련 기술 자문을 구함

설명

  1. 문제마다 가중치가 있는 태그(ex - #UML, #Python 등)를 가중치를 부여해 단다.
    • 예를 들어, 1번 문제는 #UML에 대해 0.2점, #Python에 대해 0점, #Agile에 대해 0점 등등...
  2. 사용자가 문제를 풀 때마다 데이터를 모두 로깅한다.
  3. 로그 데이터를 기반으로 취약한 과목 및 문제들을 실시간으로 제공할 수 있다.
  4. 추가로 문제들끼리의 유사도를 측정가능해 유사 문제 추천 기능도 가능하다.

기능

  1. 사용자가 문제를 푸는 데이터를 모두 로깅

    1. 문제, 시간, 고른 선지를 로깅해서 분석에 사용
  2. 유사한 문제 추천 기능

    1. 공부모드 문제 페이지 혹은 결과 페이지 에서 제공
    2. 리스트로 10개 정도 제공
  3. 내가 취약한 과목/태그

    1. 무엇 기준으로 학습을 시키게 할 건가?
      1. 태그별: 내가 맞았던 문제들 중 태그별로 태깅 점수가 가장 높은 놈부터 주어진 개수만큼 준다.
      2. 과목별: 과목이 한정된 나를 위한 모의고사
  4. 나를 위한 모의고사

    1. 100문제 (과목별 20문제)
    2. 태깅 + 기존 과목 합쳐서
    3. 과목당 약한 태그들의 문제들 20개씩?
  5. 태그별/과목별 복습 시스템

    1. 틀렸던문제를 대상으로 한다.
    2. 무엇 기준으로
      1. 태그별: 내가 맞았던 문제들 중 태그별로 태깅 점수가 가장 높은 놈부터 주어진 개수만큼 준다.
      2. 과목별: 과목이 한정된 나를 위한 모의고사같은 느낌

종류

FAISS

  1. 장점 대규모 벡터 데이터셋에 특화된 도구. 상대적으로 고성능이다. (In-memory, GPU가속 등)
  2. 단점 Python혹은 C++로 구현되어 있어 다른 서버를 하나 더 띄워서 구현해야 할 것 같다. 대규모 벡터 데이터셋을 생각하고 설계된 서비스이다.

Elastic Search의 vecter search

  1. 장점 텍스트 검색, 벡터 검색을 모두 지원하고 하이브리드 검색도 가능하다. 분산 시스템으로 설계되어서 클러스터를 통해 확장성이 높다.

  2. 단점 벡터 검색에 특화되어 있지 않다. KNN 방식을 사용하는데, 데이터가 많을수록 성능이 너무 느려져 많은 설정과 튜닝이 필요할 수 있다. FAISS에 비해 복잡할 수 있다.


문제점

  1. 태그를 뽑아내는 과정

    • 우선, 800문제로 방대한 이론에 대한 적절한 태그를 뽑아내는 것이 너무 어렵다.
    • 게다가 자격증 시험의 대부분의 문제들이 유형에 대한 응집도가 높다. 즉 특정 단원 문제는 다른 단원과는 전혀 상관없는 내용이어서 여러 단원에 얽혀있지 않아 여러 태그에 걸쳐 있는 문제가 없다는 것이다. 예를 들어, java 코드 문제는 #java 이외에는 달 태그가 없다.
    • 즉 자격증 시험 문제들에 대해서는 벡터 기반의 문제들의 유사도보다 상세 유형별로 문제를 푸는 게 낫다.
    • 따라서 새로운 태그를 생성해 가중치(점수)를 태깅을 하는 것보다 차라리 상세 유형을 태깅하는 것이 나을 수 있다.
  2. 정확도

    • 예를 들어, Python 코드 문제를 주고 #UML, #Agile, #Python 등의 태그를 주고 각 태그에 점수를 매겨달라는 요청을 했을 때 전혀 연관이 없는 #UML 에도 점수가 높게 나왔다. 아마도 Agile 보다는 그래도 유사하다는 것 같아서 그런 것 같다.
    • 또한 점수를 주는 기준도 매 요청마다 달라진다.
  3. 랭체인

    • 제일 큰 문제는 위에서 말한 것들이 이미 랭체인 기술로 다 나와있다는 것이다. 이미 생성형 AI로 최근에 다 나온 기술을 위와 같은 방식으로 구현하는 것은 이상해 보인다.

      PEFT

    • LLM을 내 데이터로 파인튜닝하는 것이 어려워서, 특정 파라미터에 대해서만 파인튜닝을 하는 기술이다.
    • GPU를 이용해 파인튜닝을 하는 것만 해도 굉장히 굉장히 어려워 보인다... 백엔드 개발자가 할 것은 분명히 아니다.

      RAG

    • LLM에 문서를 넣고, 그 데이터를 기반으로 검색을 할 수 있는 기술이다. 문제를 넣고 어떤 사람이 뭐가 취약한지, 유사 문제는 뭔지 검색하고 받아오기만 하면 되니까 우리의 상황에 가장 어울린다.
    • 단점 1. 기존에는 미리 GPT와 대화해서 데이터베이스에 넣어놨지만, 이건 실시간으로 통신해야 한다. 비용은 둘째치고 그 과정에서 나오는 할루시네이션과 에러 처리, 데이터 파싱 등에 너무 힘을 들여야 할 것 같다.
    • 단점 2. RAG는 실제 검색 전에 전처리로 AI 개발자가 다음을 생각해야 한다.
      1. Document Loader 2. Text Splitter 3. Emdedding 4. Vector Store 5. Retriever
    • 5개 모두를 선택해놓아야 한다. 조합은 360,000,000 가지 정도다.
    • 발전되고 있는 분야라서 어떤 것이 어떤 상황에 제일 잘 어울린다 할 게 없다. 자료가 많이 없다.
    • 2주동안 이러한 것들을 많이 공부해보려고 시도해보았지만, AI에 아는 것이 없어 머리에 들어오지도 않고, 백엔드 개발자로서 성장과 취업에 도움도 전혀 안 될 것 같다는 생각만 들었다.
    • 랭체인은 사용하지 않는 편이 적절할 것 같다.

정리

  1. 태그 기능은 자격증 시험같이 문제마다 유형에 대한 응집도가 높은 경우에 대해서는 적절하지 않은 것 같다.
  2. 랭체인은 백엔드 개발자로서 지금 시기에 도전하기 어려운 과제다.
  3. 사용자 로그 기반으로 분석을 해줄 수 있는 어떤 다른 것이 필요하다.

팀원들 피드백

내 생각: 예를 들어 "메시지 큐" 태그가 달려있는 2개 문제가 다른 과목에 있다면 유사하지 않은 것. 이러한 생각이 사용자 관점이다. 애초에 vector 기반으로 유사도를 측정한다면 이 사례는 유사하다고 나와도 된다.

-> 맞는 것 같다... 그럼 태그 종류, 점수의 적절함은 얼마나 신경써야 하는 것일까..?