임베딩(Embedding)은 단어, 문장, 이미지 등 고차원 데이터를 저차원 밀집 벡터로 표현하는 기법이다. 의미적으로 유사한 데이터가 벡터 공간에서 가깝게 위치한다.
단어 임베딩 (Word2Vec)
python
# 왕 - 남자 + 여자 ≈ 여왕
# 벡터 연산으로 의미 관계 표현
from gensim.models import Word2Vec
sentences = [["나는", "밥을", "먹는다"], ["너는", "밥을", "좋아한다"]]
model = Word2Vec(sentences, vector_size=100, window=5)
vector = model.wv["밥"] # 100차원 벡터
similar = model.wv.most_similar("밥") # 유사 단어
문장 임베딩
python
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')
sentences = ["강아지가 귀엽다", "개가 사랑스럽다", "고양이가 졸고 있다"]
embeddings = model.encode(sentences)
# 유사한 의미의 문장끼리 cosine similarity 높음
벡터 검색
python
import numpy as np
def cosine_similarity(a, b):
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
# RAG에서의 활용
query_vec = model.encode("강아지 건강 관리")
doc_vecs = [model.encode(doc) for doc in documents]
similarities = [cosine_similarity(query_vec, dv) for dv in doc_vecs]
most_relevant = documents[np.argmax(similarities)]
관련 개념
참고문헌
- •Mikolov et al. (2013). Word2Vec: Distributed Representations of Words