1. 임베딩 소개

1.1. 임베딩이란

기계 학습 분야에서 특히 자연어 처리 (NLP) 문제를 해결하는 데 사용되는 임베딩은 텍스트 데이터를 숫자 벡터로 변환하는 기술입니다. 인간의 언어에서 단어와 구를 의미는 그들의 맥락과 사용에 의해 결정됩니다. 임베딩의 목표는 이러한 언어 단위의 의미를 포착하여 컴퓨터가 해당 단어를 이해하고 처리할 수 있도록 하는 것입니다.

임베딩의 핵심 아이디어는 유사한 의미를 가진 단어들을 수학적 공간에서 가까운 지점에 매핑하여 고차원 공간에서 단어를 점으로 나타내는 것입니다. 이렇게 함으로써 의미적으로 가까운 단어들 (예: "왕"과 "여왕")은 공간상에서 가까이 위치하게 됩니다. 임베딩은 일반적으로 부동 소수점 배열로 구성되어 있어 "개"와 "개류"와 같은 매우 다른 텍스트 조각들도 유사한 임베딩 표현을 가지게 합니다.

팁: 응용 프로그램 개발자로서 유사한 의미를 가진 두 텍스트 문장의 임베딩 벡터 유사도가 높다고 이해하시면 됩니다.

1.2. 임베딩의 적용

임베딩은 여러 시나리오에서 널리 사용되며, 여기에는 몇 가지 주요 사용 사례가 있습니다:

  1. 검색: 임베딩 기능을 사용하여 쿼리 텍스트와 관련성에 따라 검색 결과를 순위 지정합니다.
  2. 군집화: 임베딩은 의미적으로 유사한 텍스트 조각을 식별하고 범주화하는 데 도움이 될 수 있습니다.
  3. 추천 시스템: 유사성에 따라 항목을 추천하여 알려진 항목과 유사한 다른 항목을 발견하고 추천하는 데 도움이 될 수 있습니다.
  4. 이상 탐지: 임베딩은 주 데이터셋과 유별나게 다른 데이터 포인트를 식별하는 데 사용할 수 있습니다.
  5. 다양성 측정: 임베딩은 서로 다른 텍스트 간의 유사성 분포를 분석하는 데 사용될 수도 있습니다.
  6. 분류: 알려진 레이블 임베딩 세트와 텍스트를 비교하여 가장 유사한 범주로 분류하는 데 사용될 수 있습니다.

2. OpenAI 임베딩 소개

2.1. OpenAI 임베딩 모델 개요

OpenAI는 text-embedding-3-smalltext-embedding-3-large를 포함한 세 번째 세대의 임베딩 모델을 제공합니다. 이러한 모델은 OpenAI의 독특한 심층 학습 기술을 기반으로 구축되었으며 고다국어 성능을 제공하면서도 비용을 줄이려고 노력하고 있습니다.

이러한 모델은 임베딩을 처리할 때 고유한 특징들을 가지고 있습니다. 예를 들어 text-embedding-3-small은 1536-차원의 임베딩 벡터를 제공하며, text-embedding-3-large는 더 복잡한 텍스트 특징을 다루기 위해 3072-차원의 임베딩 벡터를 제공합니다. 매개변수를 조절하여 임베딩의 차원을 제어하여 특정 응용 시나리오의 요구 사항을 충족할 수 있습니다.

2.2. 모델 선택과 사용

적절한 임베딩 모델을 선택하는 것은 특정 응용의 요구 사항에 따라 달립니다. 다양한 응용 시나리오에서 선택하는 방법은 다음과 같습니다:

  1. 성능 중심 시나리오: 상세한 의미 정보를 캡처해야 하는 섬세한 추천 시스템이나 고정밀 텍스트 분류와 같은 경우에는 일반적으로 text-embedding-3-large를 사용하는 것이 좋습니다. 더 작은 모델보다는 비싸지만 풍부한 텍스트 특징 표현을 제공할 수 있습니다.

  2. 비용 중심 응용: 데이터를 처리해야 하지만 특별히 높은 정밀성 요구 사항이 없는 응용에는 초기 데이터 탐색이나 빠른 프로토타이핑과 같은 응용에는 비용을 크게 절감하면서도 상대적으로 높은 성능을 유지하는 text-embedding-3-small이 더 경제적인 선택입니다.

  3. 다국어 환경: 이러한 임베딩 모델은 다국어 환경에서 높은 다국어 성능을 제공하여 글로벌 응용에 특히 유용합니다.

적절한 임베딩 모델을 선택하는 것은 구체적인 요구 사항, 데이터 복잡성 및 성능과 비용 사이의 균형 지점에 대한 원하는 요구 사항에 따라 달라질 것입니다.

3. 임베딩 사용 방법

3.1 Embeddings API를 호출하는 curl 사용하기

curl은 HTTP 요청을 보내는 데에 일반적으로 사용되는 커맨드 라인 도구입니다. 아래 예제는 텍스트의 임베딩 표현을 얻기 위해 curl을 사용하는 방법을 보여줍니다:

curl https://api.openai.com/v1/embeddings \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $OPENAI_API_KEY" \
    -d '{
        "input": "기계 학습은 인공 지능의 한 분야입니다.",
        "model": "text-embedding-3-small"
    }'

위 명령어에서 $OPENAI_API_KEY 변수에는 사용자의 OpenAI API 키가 포함되어 있으며, 실제 사용을 위해 유효한 키로 대체되어야 합니다.

이 명령을 실행한 후에는 OpenAI Embeddings API가 텍스트 임베딩 표현을 포함한 응답을 반환합니다. 다음은 API 호출 결과의 예시입니다:

{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "index": 0,
      "embedding": [  // 여기에 특징 벡터가 있습니다
        -0.006929283495992422,
        -0.005336422007530928,
        ...  // 나머지 숫자는 생략되었습니다
        -4.547132266452536e-05,
        -0.024047505110502243
      ]
    }
  ],
  "model": "text-embedding-3-small",
  "usage": {
    "prompt_tokens": 5,
    "total_tokens": 5
  }
}

3.2 Python 클라이언트를 사용하여 Embeddings API 호출하기

curl을 직접 명령줄에서 API를 호출하는 대신 Python 클라이언트를 사용할 수도 있습니다. 이를 위해서는 먼저 공식 openai 라이브러리를 설치해야 합니다. 아래는 Python을 사용하여 텍스트 임베딩을 얻는 예시입니다:

import openai

openai.api_key = 'YOUR_OPENAI_API_KEY'  # 여러분의 OpenAI API 키로 대체하세요

response = openai.Embedding.create(
  input="인공 지능이 세상을 변화시키고 있습니다.",
  model="text-embedding-3-small"
)

embedding_vector = response['data'][0]['embedding']
print(embedding_vector)

이 Python 스크립트를 실행하면 curl을 사용했을 때와 유사한 임베딩 벡터를 얻을 수 있습니다. 이 벡터는 입력 텍스트의 임베딩 공간에서의 수치적 표현을 나타내는 부동 소수점 숫자들의 리스트입니다.

호출 결과는 다음과 같습니다:

[-0.0032198824, 0.0022555287, ..., 0.0015886585, -0.0021505365]

3.2 임베딩 벡터 조작하기

OpenAI는 임베딩 텍스트 벡터화 계산 모델만을 제공합니다. 텍스트 유사성 검색과 같은 기능을 구현하려면 Qdrant, Chroma, Milvus와 같은 벡터 데이터베이스에 대해 알아야 합니다.

다음 벡터 데이터베이스 튜토리얼을 참조하세요: