목차
1. 임베딩(Embedding)
정의 : 임베딩은 단어, 문장, 이미지 등과 같은 데이터를 숫자 벡터(연속된 실수 공간)로 표현하는 방식
단어나 문장을 임베딩 모델(BERT, GPT 등)을 통해 고정된 차원의 실수 벡터로 바꾸면, 각각의 벡터가 해당 단어(또는 문장)의 의미 정보를 함축적으로 담게 된다.
이때, 데이터는 의미가 유사한 두 벡터는 사이가 가깝도록 만든다.
2. 임베딩 모델
주된 학습 목적은 의미가 유사한 문장은 유사한 벡터로, 의미가 다른 문장은 다른 벡터로 매핑하도록 하는 것
생성 모델과 달리, 토큰을 문장으로 생성하는 것이 아니라 문장을 하나의 벡터로 표현하는 데 집중
2.1. 고전적인 모델
고전적인 모델에는 Word2vec이 유명하다.
Word2vec 모델은 단어 자체를 벡터로 매핑하는 방식이다.
2.2. Transformer 기반 모델
최근에는 Transformer 기반의 LLM 모델을 임베딩 모델로 사용한다.
결국 Retriever의 검색 성능은
임베딩 모델의 성능이 아주 중요하다고 할 수 있다.
Langchain에서 지원하는 모델에는 어떤 것들이 있는지 보자
OpenAI : text-embedding-3-small, text-embedding-3-ada-002, text-embedding-3-large
Ollama : llama3
Google : text-embedding-004
오픈소스 : BAAI/bge-m3
예시코드 (Openai 모델 사용)
import getpass
import os
from langchain_openai import OpenAIEmbeddings
if not os.environ.get("OPENAI_API_KEY"):
os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter API key for OpenAI: ")
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
유료 모델은 api 형식으로 지원하며, 많이 비싸지 않아서
많은 양을 벡터화 하지 않는다면 서버 비용 없이 저렴하고 간단하게 사용할 수 있다.
오픈소스 모델은 프로젝트 상황에 맞게
파인튜닝(Fine-tunning)을 할 수 있다는 장점이 있다.
각 임베딩 모델에 대한 설명은
논문 요약 포스팅에서 다루도록 하겠다.
2. 유사도 검색 방법
Retriever는 어떻게 유사한 텍스트를 검색할까?
가장 많이 사용되는 방법은 코사인(Cosine) 유사도 이다.
$$
\cos(a,b) = \frac{a \cdot b}{\|a\|\cdot \|b\|}
$$
위 식은 두 점 사이의 거리를 나타낸다.
비슷한 의미의 단어가 가까워지는 이유는
임베딩 모델이 방대한 텍스트 학습을 통해, 비슷한 맥락(의미)을 가진 단어가 서로 인접한 벡터 좌표를 갖도록 조정하기 때문
'자연어처리 > Langchain' 카테고리의 다른 글
[langchain] 유저 채팅 토픽 분석 with BERTopic (1) | 2025.03.08 |
---|---|
[Langchain] RAG 성능 평가 with Regas (0) | 2025.03.07 |
[Langchain] Retriever 사용하기 (3) | 2025.03.05 |
[langchain] 채팅 히스토리와 메모리 (History, Memory) (2) | 2025.02.05 |
[langchain] Message 다루기 (9) | 2024.10.04 |