OpenAI 임베딩으로 유사한 문장 찾기 실습

Sue·2025년 6월 9일
0
post-thumbnail

Part 3. 임베딩으로 텍스트 유사도 비교하기

7. 텍스트 유사도 측정

임베딩의 핵심 활용 중 하나는 문장 간 의미적 유사성을 계산하는 것이다. 이를 위해 흔히 사용되는 방식은 코사인 유사도(Cosine Similarity)이다.

코사인 거리(Cosine Distance)

두 벡터 사이의 각도를 기준으로 유사도를 측정하며, 값은 0(완전 동일)에서 2(완전히 반대) 사이의 범위를 가진다.

from scipy.spatial import distance

distance.cosine([0, 1], [1, 0])  # 결과: 1.0

작을수록 유사성이 크다는 뜻이다.

8. 실습 예제: 기사 헤드라인 유사도 비교

임베딩 생성 함수

def create_embeddings(texts):
    response = client.embeddings.create(
        model="text-embedding-3-small",
        input=texts
    )
    response_dict = response.model_dump()
    return [data['embedding'] for data in response_dict['data']]

특정 키워드와 유사한 기사 찾기

from scipy.spatial import distance
import numpy as np

search_text = "computer"
search_embedding = create_embeddings(search_text)[0]

distances = []
for article in articles:
    dist = distance.cosine(search_embedding, article["embedding"])
    distances.append(dist)

min_dist_ind = np.argmin(distances)
print(articles[min_dist_ind]['headline'])

예를 들어 "computer"라는 단어를 입력하면, 가장 유사한 기사로 "Tech Company Launches Innovative Product to Improve Online Accessibility" 같은 헤드라인이 반환된다.

9. 결론

임베딩은 텍스트의 의미를 수치적으로 표현해 다양한 NLP 작업을 가능하게 만든다. 벡터 간의 거리 계산을 통해 다음과 같은 활용이 가능하다:

  • 시맨틱 검색: 의도 기반의 검색 구현
  • 추천 시스템: 의미 유사 기반 추천
  • 분류 및 클러스터링: 주제, 감정, 유형 등의 자동 분류

OpenAI의 임베딩 API는 이러한 작업을 빠르게 실험하고 적용할 수 있게 해준다. 특히, 고차원 벡터를 다루는 작업에서도 복잡한 수학적 이해 없이 실용적인 결과를 얻을 수 있다는 점이 강점이다.


지금까지 임베딩의 개념부터 실습까지 세 단계에 걸쳐 살펴보았습니다.

Part 1에서는 임베딩의 이론과 기본 구조를,
Part 2에서는 다중 입력 처리 및 시각화를,
Part 3에서는 유사도 계산을 통한 실제 활용을 다루었습니다.

임베딩은 단지 고차원 벡터일 뿐이지만, 이를 통해 텍스트의 의미를 수치화하고 활용하는 방식은 무궁무진합니다.

이 시리즈가 임베딩과 자연어 처리에 대한 실질적인 이해를 높이는 데 도움이 되었기를 바랍니다. 앞으로 더 다양한 응용도 도전해보세요.

profile
AI/ML Engineer

0개의 댓글