티스토리 뷰

 

개요

이 주제와 관련하여서는 어느정도 그림이 그려지는 수준인데 잘 정리된 이 그림을 보면서 순서를 되짚어본다. 출처는 이미지에 있다.

내용

비공개 정보를 가공하여 저장해두기

  1. 노션, PDF를 비롯한 비공개 정보들을 취합하여 적당한 덩어리로 나눈다.
    1. 비공개 정보들이기에 LLM은 이 정보를 학습할 수 없었을 것이며, 따라서 관련한 질문에 답을 할 수 없다.
    2. 적당한 덩어리로 나누는 것은 임베딩과 관련이 있다. 한 번에 임베딩 해주는 양의 한계가 있기 때문이기도 하고, 최적의 의미단위로 덩어리를 나눌 필요도 있어서이다.
  2. 임베딩 모델은 이렇게 나누어진 정보들을 임베딩하는데 그 결과로 나오는 값이 벡터이다.
    1. 벡터는 긴 실수들의 배열이라고 보면 된다. 대표적인 임베딩 모델인 OpenAI의 text-embedding-ada-002 는 한 덩어리의 문자를 받아서 1536개의 실수들로 되어 있는 벡터 하나를 뱉어낸다.
    2. 벡터는 입력받은 문자 덩어리의 핵심 정보들을 추출하여 숫자로 표현한 것이라 보면 되겠다.
  3. 이러한 벡터들은 나중에 찾아내기 쉽도록 인덱싱을 하여 벡터 데이터베이스에 저장을 한다.

가공한 정보를 검색하여 가져오기

  1. 사용자는 채팅을 통해 질의(query)를 한다(그림에서는 5로 되어 있다).
  2. 임베딩 모델은 이 문의 자체를 임베딩하며 벡터화한다.
  3. 질의를 가지고 벡터 데이터베이스에게 관련 정보를 달라고 하면
  4. 벡터 데이터베이스는 질문과 가장 관련이 있는 벡터들을 찾아낸다.
    1. 자동차와 관련한 질문이라면 자동차 제조사, 엔진 등과 관련한 문자 덩어리를 벡터화 한것이 여성 화장품 관련 문자 덩어리를 벡터화 한 것보다 더 관련이 있는(더 가까운) 벡터로 찾아진다.
    2. 이러한 근접성, 유사도를 판단하는 기준은 대표적으로 코사인, 유클리디안, 내적 등이 있다.
  5. 벡터 데이터베이스는 이렇게 찾아낸 정보의 원본 문자 덩어리를 회신해준다(그림에서는 9로 되어있다.)

LLM을 이용하여 답변하기

  1. 프롬프트 엔지니어링을 하여 LLM에게 질문을 던진다.
    1. 애초의 질의(query)에 대한 정보
    2. 벡터 데이터베이스를 검색하여 가져온 질의와 관련이 있는 비공개 지식 정보
    3. 위 둘을 조합하되 비공개 지식 정보만을 기반으로 하여 답을 달라고 한다.
  2. LLM은 원하는 답을 줄 것이다. 그리고 그 답변의 기반이 되는 비공개 지식의 출처도 함께 반환할 것이다.

개인적 생각의 정리

  1. 순서가 있거나 시계열적인 정보들은 그러한 의미를 어떻게 벡터화할 수 있을까? 예를 들어 예전의 정보와 최신의 개정 정보가 함께 있다면 혼선이 생길 것이다. 이미 되어 있는 것으로 보이지는 않아 보인다.
  2. 지식을 덩어리로 나눌 때에 그 크기가 무조건 크다고 좋은 것은 아니다. 최선은 하나의 의미있는 단위로 묶어서 벡터화가 되어야 할 것이다. 혹은 미시적, 거시적인 층위로 나누어 복합적인 벡터화가 될 수 도 있겠다. 미래에는 기술적인 입력 크기(=토큰 크기)의 제약은 많이 풀릴 것이니, 이러한 벡터화를 위한 덩어리를 나누는 것 조차 인공지능이 판단하여 나눌지도 모르겠다.

반응형
반응형
잡학툰 뱃지
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함