수 많은 우문은 현답을 만든다

생성형 AI 구축에 필요한 개념 본문

인공지능/생성형AI (LLM)

생성형 AI 구축에 필요한 개념

aiden.jo 2024. 1. 8. 15:20

안녕하세요, 조영호입니다.

요즘 LLM이 핫하죠~ LLM을 가지고 생성형 AI 서비스를 개발해보고 있는데요, 관련하여 필요한 개념들을 우선 정리해 공유드리고자합니다. 하나씩 알아보겠습니다.

  1. LM (언어 모델, Language Model)
    인간의 언어를 이해하고 생성하도록 훈련된 일종의 인공지능 모델로, 주어진 언어 내에서 패턴이나 구조, 관계를 학습하여 텍스트 번역과 같은 좁은 AI 작업에서 주로 활용됩니다.

  2. LLM (거대 언어 모델, Large Language Model)
    LLM은 사전에 대규모의 언어 데이터를 학습하여 문장 구조나 문법, 의미 등을 이해하고 생성할 수 있습니다. 예를 들어, 주어진 문맥에서 다음 단어를 예측하는 문제에서 LLM은 문장 내의 단어들 사이의 유사성과 문맥을 파악하여 다음 단어를 생성할 수 있습니다.

  3. 환상효과(Hallucination)
    잘못된 정보를 학습하여, 잘못된 답을 내놓는 경우

  4. RAG(Retrieval Augmented Generation)
    환상효과를 해결할 수 있는 방안중에 하나.
    데이터베이스에 지식을 저장해놓고, LLM이 답을 할 수 없는 경우 데이터 베이스를 검색하여 알맞은 지식을 찾아내서 LLM 응답으로 가공하여 답하는 방법.
    RAG는 두가지 핵심 기술이 필요 (벡터 데이터베이스, 임베딩)
    1. 임베딩
      1. 텍스트 데이터를 벡터로 변환해 저장.
      2. 벡터는 실수 값의 배열로, 벡터의 각 값은 단어나 문장의 특정 특성을 나타낸다.
      3. 텍스트 문서도 벡터화(임베딩) 해서 벡터디비에 저장하면 유사도로 검색할 수 있다.
    2. 벡터 데이터베이스 (파이스 - FAISS
      1. 양자화, 압축, 색인 등의 최적화 기법들을 사용해 대량의 고차원 벡터에서 유사 벡터를 빠르게 찾는다.
      2. 검색, 인덱싱 2개의 주요 컴포넌트로 구성
      3. 파시스는 벡터 간 유사성을 계산하는 기능에 집중해, 텍스트 같은 비벡터형 데이터에 대해서는 직접적으로 처리할 수 없다는 한계 존재함.
      4. 한계 극복을 위해 워드임베딩(word embedding)이나 원-핫 인코딩(one-hot encoding)을 직접 구현해야함
      5. 동작원리
        1. 데이터를 양자화하여 인덱스를 생성
        2. 인덱스를 사용하여 유사성 검색을 수행
        3. 복잡한 벡터 공간을 작은 ‘클러스터’로 분할
        4. 각 클러스터는 그 안의 벡터들이 서로 유사하며 클러스터링은 원본 벡터 공간을 더 작고, 이해하기 쉽고, 계산하기 편한 공간으로 변환하는 역할을 함
        5. 검색을 수행할 때는 쿼리 벡터를 입력으로 받고 이와 가장 유사한 벡터들을 인덱스에서 찾아 반환
          (가장 유사도가 높은 클러스터가 반환 결과임)
      6. 사용방법
        1. 필요한 벡터 데이터를 로드
        2. 파이스 인덱스 생성
        3. 인덱스를 학습 (전역 클러스터링, 로컬 클러스터링)
        4. 유사성 검색을 수행
        5. 파이스 인덱스 종류
          1. 플랫(flat) 인덱스
            모든 벡터 간의 거리를 계산하는 방식이나 비효율적
          2. 계층적(hierarchical) 인덱스
            벡터 공간을 여러 계층으로 나누어 검색을 최적화
          3. 제품(product) 인덱스
            여러 벡터를 조합하여 더 복잡한 벡터를 생성하고 이를 인덱스화
    3. 기본 용어
      1. 양자화
        벡터 데이터를 압축하고 저장하기위해 사용
      2. 유사도검색
        1. 유클리안 거리
          두 벡터간의 거리를 피타고라스 정리를 이용하여 측정한다.
          차원이 높아질수록 성능이 저하될 수 있다.
        2. 코사인 유사도
          두 벡터간의 각도를 이용하여 유사도를 측정한다.
          터의 크기를 고려하지 못하기 때문에 벡터의 크기가 다른 벡터간의 유사도를 측정하기 어렵다.
        3. 내적 기반 유사도
          벡터의 내적(곱)으로 벡터간의 방향성과 크기 양쪽을 모두 고려하기 때문에, 벡터의 크기가 달라도 유사도 측정이 가능
        4. ANN(Approximate Nearest Neighbors)
          다차원 임베딩 벡터를 대용량으로 검색할때 사용한다.
      3. Vertex AI Vector Search
        1. 구글에서 제공하는 벡터 데이터 베이스
        2. ScaNN (Scalable Nearest Neighbors) 알고리즘을 사용하는데, ANN 알고리즘들에 비해서, 많은 데이터가 있을 경우 더 빠른 서치 성능을 보인다.
      4. LLM 서비스 구현시 (RAG)Embedding DB와 LLM 으로의 조건 분기처리 하는 방법
        1. langchain agent 에서 특정 문장이 들어오면 RAG를 수행하도록 설정한다.
          예제는 링크 참고
        2. 자원이 부족하다면 상대적으로 가벼운 sentence-transformers을 사용한다.
      5. 프롬프트 엔지니어링이란?
        블로그 참고

 




감사합니다.