AI 기초 시리즈다.
바로 간다 첫 번째
임베딩(Embeddings)
임베딩이 뭐임?
일단 영어로의 뜻
- 기본 뜻
- embed (동사): 꽂아 넣다, 박다, 묻다, 깊이 새기다
- 예: embed a nail in the wall (못을 벽에 박다)
- 파생된 형태
- embedding (동명사/명사): 박아 넣기, 끼워 넣기
- embedded (형용사): 박혀있는, 내장된
보다시피 그냥 박아 넣는다는 뜻이다.
뭐를요?
벡터요
벡터는 뭐임?
벡터를 모르면 임베딩 이해 불가능
숫자들을 모아둔 게 벡터임.
그리고 그 숫자들이 결국 하나의 정보를 표현함.
간단하게
2차원 지도. 좌표 [ 1, 1 ]에 피자집이 있다고 하면
[ 1, 1 ]이라는 숫자가 표현하는
하나의 정보 = 피자집 이 되는 거임
그리고 많이 들어봤을 벡터 DB가
여기서 2차원 지도임.
수많은 좌표가 들어있는 게 2차원 지도이듯
수많은 벡터가 들어있는 게 벡터 DB임.
지금은 2차원을 예시로 들어서 [1,1]이지만
사실 벡터는 기본으로 몇백 차원이 넘음
그러면 숫자가 [1,1,1,1,1,1,.....] 이렇게 몇백 개가 생기는 거임.
(실제로는 1이 아니라 여러 가지의 실수임)
차원의 수와 숫자의 개수가 정확히 1대 1 대응함.
사실 너무나 당연한 말임.
3차원에서 숫자 한 두 개로 어떻게 정확한 위치를 표시하겠음.
3개 초과되는 숫자도 마찬가지.
다시 임베딩으로 돌아와서.
임베딩
고차원 데이터(텍스트, 이미지 등) -> 변환 -> 저차원 벡터
이 과정이 임베딩 끝임.
텍스트(이미지, 오디오 등)를 숫자로 표현하는 거임.
그래서 이거 왜 하는 건데요.
왜냐면 컴퓨터는 지능이 없음. 빡통임.
컴퓨터는 텍스트의 "의미"를 이해 못 함.
임마는 숫자만 잘 다룸.
강아지랑 개랑 비슷한 뜻인걸 컴퓨터는 모름.
그래서 이걸 숫자로 바꿔서 컴터한테 알려주는 거임.
어떤 식으로 알려줌?
대충 가까운 값이면 비슷한 의미임.
개랑 강아지는 벡터값이 가까움.
개랑 정마담은 벡터값이 멈
그걸 어떻게 판별함?
1. 코사인 유사도 (Cosine Similarity) 기법
아래 예시를 보자.
"개" [0.2, 0.5]
"강아지" [0.21, 0.48] -> 유사도 0.99 (매우 비슷!)
"정마담" [-0.4, 0.1] -> 유사도 0.1 (많이 다름)
이는 코사인 유사도 (Cosine Similarity) 기법으로 유사도를 측정한 거임.
벡터 간의 각도를 측정하는 기법임.
값이 1에 가까울수록 유사하다는 거임.
값이 -1에 가까우면 정반대라는 뜻.
0 이면 그냥 관계없다는 뜻임.
2. 유클리드 거리
아래 예시를 보자.
점 A: [1, 2]
점 B: [2, 2] -> 거리 1 (가까움)
점 C: [5, 5] -> 거리 5 (더 멈)
이건 유클리드 거리
실제 물리적 거리처럼 벡터 간의 가깝고 멀고를 계산함
당연히 값이 작을수록 가까운 의미임.
피타고라스 정리를 고차원으로 확장한 개념이라고 함.
대충 이런 식으로 벡터 간의 멀고 가까움을 측정하고 판별함.
암튼 이런 식으로 유사도와 거리를 통해.
단어 간의 맥락을 컴퓨터가 찾을 수 있게 된 거임.
결론
임베딩 하는 이유 :
컴퓨터는 빡통이라 의미를 몬알아먹음.
그래서 알아들을 수 있게 숫자로 변환해줘야함.
+
차원의 수는 누가 결정하나요?
임베딩 모델이 결정함.
특정 임베딩 모델은 항상 같은 차원을 뱉음.
OpenAi text-embedding-ada-002 모델 : 1536차원
BERT 모델 : 768차원
이런 식임.