Embedding 의 이해 및 활용

1. Embedding 이란?

Embedding 은 텍스트, 이미지, 오디오 등의 데이터를 고차원 벡터 공간 으로 변환하는 과정임.

Embedding 은 기계 학습과 자연어 처리(NLP) 에서 데이터 간의 관계를 숫자로 표현하여 유사도 계산, 검색, 추천 등의 작업을 가능하게 함.


2. Embedding 작동 원리

벡터 표현(Vector REpresentation)

Embedding 은 데이터를 고차원 벡터(숫자 배열) 로 변환함. 이 벡터는 데이터의 의미나 특징을 반영하며, 벡터 간의 거리는 데이터 간의 관계를 나타냄.

  • 유사도 계산

    • 벡터 간 거리가 가까울수록 데이터 간의 의미가 유사

    • 주요 거리 측정 방식:

      • Cosine Similarity : 두 벡터의 각 유사도

      • Euclidean Distance(L2) : 벡터 간 직선 거리


3. Embedding 의 주요 활용 사례

1. 유사도 검색

  • 입력 텍스트와 데이터베이스의 벡터 간 유사도를 계산하여 관련 데이터를 검색.

  • 예: "LangChain 이 무엇인가?" 를 검색하여 관련 문서를 반환.

2. 추천 시스템

  • 사용자와 아이템의 벡터를 비교하여 개인화된 추천 제공

  • 예 : 사용자가 좋아할 영화를 추천

3. 군집화(Clustering)

  • 데이터 벡터를 클러스터링하여 비슷한 그룹을 형성

  • 예 : 고객 세분화

4. 분류(Classification)

  • 벡터를 기반으로 텍스트 또는 데이터 분류

  • 예: 이메일을 스팸과 일반 메일로 분류

5. 검색 엔진 최적화

  • 입력 문장을 Embedding 으로 변환하여 가장 관련성 높은 결과를 반환.


4. Embedding 생성 방법

1. Pre-trained Embedding 모델

사전 학습된 모델을 사용하여 데이터를 Embedding 으로 변환.

OpenAI Embedding API

OpenAI 의 text-embedding-ada-002 모델은 고성능 Embedding 을 생성함.

import openai

openai.api_key = "your-api-key"

response = openai.Embedding.create(
    input=["What is LangChain?", "What is GPT?"],
    model="text-embedding-ada-002"
)

embeddings = response['data']
print(embeddings[0]['embedding'])  # 첫 번째 문장의 벡터

Hugging Face SentenceTransformer

Hugging Face 의 SentenceTransformer 를 사용하여 Embedding 생성.

from sentence_transformers import SentenceTransformer

model = SentenceTransformer('all-MiniLM-L6-v2')
sentences = ["What is LangChain?", "What is GPT?"]

embeddings = model.encode(sentences)
print(embeddings.shape)  # 벡터 크기

2. 사용자 정의 Embedding 모델

사용자 정의 데이터셋으로 Embedding 모델을 미세 조정(Fine-Tuning) 하여 특정 도메인에 최적화.

  • 방법:

    • Hugging Face 모델 로드

    • 사용자 정의 데이터로 학습.


5. Embedding 활용 사례

1. 유사도 계산

텍스트 벡터 간의 유사도를 계산

from sklearn.metrics.pairwise import cosine_similarity

similarity = cosine_similarity([embeddings[0]], [embeddings[1]])
print(f"Similarity: {similarity[0][0]:.4f}")

2. 벡터 검색

Milvus, Pinecone, Weaviate 같은 벡터 데이터베이스를 사용하여 Embedding 기반 검색 구현

from langchain.vectorstores import Milvus

# Milvus에 연결
vectorstore = Milvus(host="localhost", port="19530")
vectorstore.add_texts(["What is LangChain?", "What is GPT?"], embeddings)

# 검색
query_embedding = model.encode("Explain LangChain")
results = vectorstore.similarity_search(query_embedding, k=1)
print(results)

3. 추천 시스템

  • 사용자의 행동 데이터를 Embedding 으로 변환하고, 유사도가 높은 아이템 추천

Last updated

Was this helpful?