1. 임베딩 소개
1.1. 임베딩이란
기계 학습 분야에서 특히 자연어 처리 (NLP) 문제를 해결하는 데 사용되는 임베딩은 텍스트 데이터를 숫자 벡터로 변환하는 기술입니다. 인간의 언어에서 단어와 구를 의미는 그들의 맥락과 사용에 의해 결정됩니다. 임베딩의 목표는 이러한 언어 단위의 의미를 포착하여 컴퓨터가 해당 단어를 이해하고 처리할 수 있도록 하는 것입니다.
임베딩의 핵심 아이디어는 유사한 의미를 가진 단어들을 수학적 공간에서 가까운 지점에 매핑하여 고차원 공간에서 단어를 점으로 나타내는 것입니다. 이렇게 함으로써 의미적으로 가까운 단어들 (예: "왕"과 "여왕")은 공간상에서 가까이 위치하게 됩니다. 임베딩은 일반적으로 부동 소수점 배열로 구성되어 있어 "개"와 "개류"와 같은 매우 다른 텍스트 조각들도 유사한 임베딩 표현을 가지게 합니다.
팁: 응용 프로그램 개발자로서 유사한 의미를 가진 두 텍스트 문장의 임베딩 벡터 유사도가 높다고 이해하시면 됩니다.
1.2. 임베딩의 적용
임베딩은 여러 시나리오에서 널리 사용되며, 여기에는 몇 가지 주요 사용 사례가 있습니다:
- 검색: 임베딩 기능을 사용하여 쿼리 텍스트와 관련성에 따라 검색 결과를 순위 지정합니다.
- 군집화: 임베딩은 의미적으로 유사한 텍스트 조각을 식별하고 범주화하는 데 도움이 될 수 있습니다.
- 추천 시스템: 유사성에 따라 항목을 추천하여 알려진 항목과 유사한 다른 항목을 발견하고 추천하는 데 도움이 될 수 있습니다.
- 이상 탐지: 임베딩은 주 데이터셋과 유별나게 다른 데이터 포인트를 식별하는 데 사용할 수 있습니다.
- 다양성 측정: 임베딩은 서로 다른 텍스트 간의 유사성 분포를 분석하는 데 사용될 수도 있습니다.
- 분류: 알려진 레이블 임베딩 세트와 텍스트를 비교하여 가장 유사한 범주로 분류하는 데 사용될 수 있습니다.
2. OpenAI 임베딩 소개
2.1. OpenAI 임베딩 모델 개요
OpenAI는 text-embedding-3-small
및 text-embedding-3-large
를 포함한 세 번째 세대의 임베딩 모델을 제공합니다. 이러한 모델은 OpenAI의 독특한 심층 학습 기술을 기반으로 구축되었으며 고다국어 성능을 제공하면서도 비용을 줄이려고 노력하고 있습니다.
이러한 모델은 임베딩을 처리할 때 고유한 특징들을 가지고 있습니다. 예를 들어 text-embedding-3-small
은 1536-차원의 임베딩 벡터를 제공하며, text-embedding-3-large
는 더 복잡한 텍스트 특징을 다루기 위해 3072-차원의 임베딩 벡터를 제공합니다. 매개변수를 조절하여 임베딩의 차원을 제어하여 특정 응용 시나리오의 요구 사항을 충족할 수 있습니다.
2.2. 모델 선택과 사용
적절한 임베딩 모델을 선택하는 것은 특정 응용의 요구 사항에 따라 달립니다. 다양한 응용 시나리오에서 선택하는 방법은 다음과 같습니다:
-
성능 중심 시나리오: 상세한 의미 정보를 캡처해야 하는 섬세한 추천 시스템이나 고정밀 텍스트 분류와 같은 경우에는 일반적으로
text-embedding-3-large
를 사용하는 것이 좋습니다. 더 작은 모델보다는 비싸지만 풍부한 텍스트 특징 표현을 제공할 수 있습니다. -
비용 중심 응용: 데이터를 처리해야 하지만 특별히 높은 정밀성 요구 사항이 없는 응용에는 초기 데이터 탐색이나 빠른 프로토타이핑과 같은 응용에는 비용을 크게 절감하면서도 상대적으로 높은 성능을 유지하는
text-embedding-3-small
이 더 경제적인 선택입니다. -
다국어 환경: 이러한 임베딩 모델은 다국어 환경에서 높은 다국어 성능을 제공하여 글로벌 응용에 특히 유용합니다.
적절한 임베딩 모델을 선택하는 것은 구체적인 요구 사항, 데이터 복잡성 및 성능과 비용 사이의 균형 지점에 대한 원하는 요구 사항에 따라 달라질 것입니다.
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와 같은 벡터 데이터베이스에 대해 알아야 합니다.
다음 벡터 데이터베이스 튜토리얼을 참조하세요: