본문 바로가기
IT/정보

엘라스틱서치(Elasticsearch)에 벡터 임베딩(Vector Embedding) 하기

by bamcong 2025. 3. 28.
728x90
반응형

안녕하세요! 오늘은 엘라스틱서치(Elasticsearch)에서 벡터 임베딩을 사용하는 방법에 대해 포스팅해보겠습니다. 벡터 임베딩은 자연어 처리(NLP)에서 주로 사용되는 기술로, 단어, 문장, 이미지 등을 고차원의 벡터 형태로 변환하여 머신러닝 모델이 더 효과적으로 학습할 수 있게 도와줍니다.

엘라스틱서치 벡터 임베딩

1. 엘라스틱서치 소개

엘라스틱서치는 오픈소스 분산 검색 및 분석 엔진입니다. 대량의 데이터에서 빠르게 검색하고 분석할 수 있도록 설계되었습니다. 최근에는 자연어 처리와 관련된 다양한 기능을 지원하며 벡터 임베딩을 사용한 검색 기능도 그중 하나입니다.

예를 들어, 우리가 '강아지'라는 단어를 벡터로 변환하면, 이 벡터는 '강아지'와 비슷한 의미를 가진 단어들과의 거리를 수치적으로 표현할 수 있습니다.

2. 벡터 임베딩을 위한 사전 준비

먼저, 환경을 설정하기 위해 엘라스틱서치를 설치해야 합니다. 공식 웹사이트에서 설치 방법을 확인할 수 있습니다. 엘라스틱서치의 최신 버전을 추천하며, Kibana와 함께 사용하면 관리와 시각화가 훨씬 용이합니다.

3. 데이터 인덱스 생성

먼저 벡터를 저장할 인덱스를 생성해보겠습니다. 아래의 코드를 사용하여 'my_index'라는 이름의 인덱스를 생성합니다.

PUT /my_index
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0
  },
  "mappings": {
    "properties": {
      "content": {
        "type": "text"
      },
      "vector": {
        "type": "dense_vector",
        "dimension": 3  // 벡터의 차원수, 예를 들어 단어 임베딩의 경우 보통 300차원
      }
    }
  }
}

4. 벡터 데이터 삽입

이제 인덱스에 데이터를 삽입해보겠습니다. 벡터는 단순 예제로 3차원으로 설정했습니다.

POST /my_index/_doc/1
{
  "content": "강아지",
  "vector": [0.1, 0.2, 0.3]
}
"강아지"라는 단어와 해당 벡터를 인덱스에 저장하였습니다.

5. 벡터 기반 검색

이제 임베딩된 벡터를 사용하여 유사한 데이터를 검색해봅시다. 우리는 사용자가 '강아지'를 검색했을 때 해당 단어와 가장 가까운 벡터를 가진 데이터들을 찾을 수 있습니다.

POST /my_index/_search
{
  "size": 5,
  "query": {
    "script_score": {
      "query": {
        "match_all": {}
      },
      "script": {
        "source": "cosineSimilarity(params.query_vector, 'vector') + 1.0",
        "params": {
          "query_vector": [0.1, 0.2, 0.3]
        }
      }
    }
  }
}

위 코드는 검색 쿼리로, 요청한 벡터와 인덱스에 있는 벡터들과의 코사인 유사도를 계산하여 가장 유사한 결과들을 반환합니다.

6. 마무리

엘라스틱서치에 벡터 임베딩을 활용하여 효과적이고 빠른 데이터 검색을 구현하는 방법에 대해 알아보았습니다. 이 기술은 자연어 처리 외에도 다양한 분야에서 활용될 수 있습니다. 벡터 임베딩을 통해 비슷한 의미를 가진 데이터들을 효율적으로 처리할 수 있는 가능성을 열어줍니다.

더 자세한 정보가 필요하다면 엘라스틱서치 공식 문서를 참고해주시기 바랍니다.

728x90
반응형