자연어 처리에서 텍스트를 어떻게 ‘이해’할 수 있을까?
임베딩(Embedding)은 단어나 문장을 숫자로 바꿔 의미를 벡터로 표현하는 기법이다. 이 시리즈에서는 임베딩이 무엇인지, 어디에 쓰이는지, 그리고 OpenAI API를 통해 어떻게 실제로 활용할 수 있는지를 단계별로 소개한다.
실습 가능한 예제와 함께, 검색, 추천, 분류 등에 임베딩이 어떻게 쓰이는지 직접 확인해보자.
임베딩(Embedding)은 자연어 처리(NLP)에서 사용되는 개념으로, 텍스트를 수치화하여 고차원 공간에 매핑하는 방식이다. 쉽게 말해, 단어나 문장을 벡터로 변환해 의미 간 유사성을 수치적으로 비교할 수 있도록 만든다. 이 과정을 통해 기계는 텍스트의 의미와 맥락을 보다 정교하게 이해할 수 있다.
임베딩은 단어 혹은 문장을 다차원 벡터 공간에 위치시킨다. 이 벡터는 모델이 텍스트를 이해한 결과물로, 위치(숫자)의 조합으로 표현된다.
유사한 의미의 단어는 벡터 공간에서 가까운 위치에 존재한다.
서로 관련 없는 단어는 멀리 떨어진 위치를 가진다.
즉, 이 벡터 간의 거리로 의미상의 유사성을 파악할 수 있다.
기존 검색 엔진은 키워드 일치를 기반으로 작동했기 때문에 문맥을 이해하지 못하거나 단어 표현이 다르면 결과가 누락될 수 있었다. 반면, 임베딩 기반 검색은 텍스트의 의도와 맥락을 파악해 보다 정확한 검색 결과를 제공한다.
예시:
“Which way is it to the supermarket?”
“Could I have directions to the shop?”
두 문장은 표현은 다르지만 의미가 유사하다. 임베딩은 이런 관계를 포착한다.
예: 사용자에게 추천할 직업 게시글을 임베딩으로 분석하여, 기존에 열람한 글과 의미적으로 유사한 게시글을 추천할 수 있다. 이 방식은 직책 표현 방식의 다양성(예: “Data Scientist” vs “ML Engineer”)을 효과적으로 극복한다.
임베딩을 사용하면 감정 분석, 뉴스 분류, 클러스터링 등의 분류 작업에 활용 가능하다. 예를 들어, 뉴스 헤드라인을 주제별로 자동 분류할 수 있다.
OpenAI API는 텍스트 임베딩을 손쉽게 생성할 수 있도록 지원한다.
Python 예제:
from openai import OpenAI
client = OpenAI(api_key="<OPENAI_API_KEY>")
response = client.embeddings.create(
model="text-embedding-3-small",
input="Embeddings are a numerical representation of text that can be used to measure the relatedness between two pieces of text."
)
response_dict = response.model_dump()
응답 구조 예시:
{
'object': 'list',
'data': [
{
"embedding": [0.0023, ..., -0.0028],
"index": 0,
"object": "embedding"
}
],
'model': 'text-embedding-3-small',
'usage': {
"prompt_tokens": 24,
"total_tokens": 24
}
}
임베딩 추출 코드:
print(response_dict['data'][0]['embedding'])
이렇게 생성된 벡터는 후속 분석, 유사도 비교, 분류 등에 바로 활용 가능하다.