텍스트 유사도

OpenAI API로 시작하는 임베딩 Introduction

Emmanuel Pire

Senior Software Engineer, DataCamp

복습...

 

  • 의미적으로 유사한 텍스트는 벡터 공간에서 더 가깝게 임베딩됩니다
  • 거리 측정을 통해 유사도를 측정할 수 있습니다
  • 임베딩 활용 사례:
    • 시맨틱 검색
    • 추천
    • 분류

 

동일한 감정과 주제를 가진 리뷰가 벡터 공간에서 더 가깝게 매핑된 2D 벡터 공간 플롯.

OpenAI API로 시작하는 임베딩 Introduction

유사도 측정

 

코사인 거리

from scipy.spatial import distance

distance.cosine([0, 1], [1, 0])
1.0
  • 범위: 0에서 2
  • 값이 작을수록 = 더 높은 유사도

 

두 벡터 사이에 직선이 그려진 그림.

OpenAI API로 시작하는 임베딩 Introduction

예시: 헤드라인 유사도 비교

헤드라인과 해당 임베딩이 포함된 딕셔너리 목록.

OpenAI API로 시작하는 임베딩 Introduction

예시: 헤드라인 유사도 비교

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']]
print(create_embeddings(["Python is the best!", "R is the best!"]))

print(create_embeddings("DataCamp is awesome!")[0])
[[0.0050565884448587894, ..., , -0.04000323638319969],
 [-0.0018890155479311943, ..., -0.04085670784115791]]

[0.00037010075175203383, ..., -0.021759100258350372]
OpenAI API로 시작하는 임베딩 Introduction

예시: 헤드라인 유사도 비교

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'])
Tech Company Launches Innovative Product to Improve Online Accessibility
OpenAI API로 시작하는 임베딩 Introduction

연습해 봅시다!

OpenAI API로 시작하는 임베딩 Introduction

Preparing Video For Download...