벡터 임베딩 - 모든 데이터를 표현하다

Posted on September 13, 2023
벡터 임베딩 - 모든 데이터를 표현하다

우리가 매일 접하는 웹과 모바일에는 문서, 이미지, 음성, 영상, 숫자 등 다양한 형태의 데이터가 존재합니다. 각각 표현되는 방식이 다르고, 이에 따라 저장하는 방식이 달라지죠. 그렇다면 서로 다른 종류의 데이터들은 반드시 다른 방식으로 저장해야 할까요? 동일한 형태로 저장하여 비교 할 방법은 없을까요?

다른 형태의 데이터를 동일한 형태로 변환하여 비교가능한 상태로 만들어주기 위해 벡터임베딩이라는 개념이 등장합니다. 벡터임베딩은 [1, 4, 0]과 같이 숫자의 배열로 표현된 데이터 입니다. 즉, 이미지나 문서, 영상과 같은 모든 데이터를 숫자배열로 표현 할 수 있다는 것 이죠. 쉽게 설명하기 위해 색깔을 예로 들어보도록 하겠습니다.

모든 색은 빨간색, 초록색, 파란색의 수준을 조합한 RGB 형식으로 나타 낼 수 있습니다. 3가지 색깔을 0 에서부터 255까지 나타낼 수 있고 이를 조합하여 여러가지 색깔을 표현할 수 있습니다:

  • 빨간색: [255, 0, 0]
  • 초록색: [0, 255, 0]
  • 파란색: [0, 0, 255]

즉, 색깔 데이터는 3개의 숫자로 표현된 3차원 벡터데이터로 나타낼 수 있습니다. 이것도 하나의 벡터임베딩입니다. 이렇게 숫자 배열로 표현된 벡터데이터는 데이터간 거리계산이 가능하고, 거리가 가까울수록 서로 유사한 개념이 되는 것입니다. (벡터의 거리계산을 하는 방법은 여러가지가 있습니다.)

정리하면 벡터임베딩은 사람들이 인식하는 대상(혹은 개념)들의 유사성을 벡터공간내의 근접성으로 치환하여 얼마나 유사한지 정량적인 측정을 가능하게 해줍니다. 자연어처리, 추천알고리즘의 핵심으로 머신러닝에서 가장 유용한 개념인 것이죠. 모든 데이터들은 각각의 Transformer 모델을 통해 벡터임베딩으로 변환 할 수 있습니다.

  • 텍스트 데이터: 자연어 처리 작업에 주로 사용되며, 워드 임베딩을 통해 단어와 문장, 문서를 벡터로 변환합니다. Word2Vec이 가장 대표적인 임베딩 변환모델입니다.
  • 이미지 데이터: 이미지를 고차원 벡터로 임베딩하여 유사성 및 패턴을 찾는 데 활용 할 수 있습니다.
  • 음성 데이터: 음성신호를 음성임베딩으로 변환하여 음성 명령을 인식하거나 화자를 식별하는 데 사용할 수 있습니다.
  • 영상 데이터: 영상프레임을 벡터로 변환하여 움직임, 객체 감지, 추적, 영상 검색을 할 수 있습니다.

한 가지 예를 더 살펴보겠습니다. 강아지, 고양이, 딸기, 수박 사진을 어떻게 분류 할 수 있을까요? 당연히 호랑이와 사자는 동물로, 수박과 딸기는 과일로 분류 할 수 있을 것입니다.

4개의 이미지를 2차원 벡터로 표현된다고 가정해보겠습니다:

  • 고양이: [1, 1]
  • 강아지: [1, 2]
  • 딸기: [3, 4]
  • 수박: [4, 3]

2차원 평면에 위의 숫자를 나타낼 경우 강아지와 고양이를 나타내는 점, 딸기와 수박을 나타내는 점 사이의 거리가 가깝게 표현된 것을 알 수 있습니다. 점 사이의 거리를 계산할 수 있고 이 거리를 기준으로 분류할 수 있는 것이죠.

vector embedding

위에서는 이미지라는 동일한 형태의 데이터를 벡터데이터로 변환하여 비교하는 것을 설명하였습니다. 그렇다면 서로 다른 형태의 데이터도 비교가 가능할까요? "고양이" 단어와, 고양이 사진을 벡터로 표현하여 서로 유사성을 측정 할 수 있을까요? 물론입니다! 텍스트와 이미지를 벡터 공간이라는 공통 공간에 임베딩하여 거리측정을 할 수 있습니다. 오로지 이미지 파일(태그, 설명이 전혀 없는)만 있더라도 검색문을 입력하여 원하는 이미지를 찾아낼 수 있죠.

Aeca Demo에서 직접 해볼까요? "강아지가 달리는 사진"을 입력해 보겠습니다.

running dogs

사진에는 아무런 설명이 없는데, 검색어에 가장 적합한 이미지를 찾은 것입니다. 이렇게 텍스트로 이미지를 검색 하는 것 뿐만 아니라 영상에서 특정 이미지를 찾는 것도 가능하고, 반대로 이미지를 표현하는 문서도 찾아낼 수 있습니다. 이렇게 거리가 가장 가까운 벡터임베딩을 찾는 것이 벡터검색이고, 벡터임베딩을 저장하여 벡터검색을 가능하게 해주는 것이 벡터데이터베이스 입니다.

Copyright © 2024 Aeca, Inc.

Made with ☕️ and 😽 in San Francisco, CA.