임베딩 모델은 문서의 청크(즉, 텍스트의 구절)를 숫자 표현 또는 벡터로 변환하는 트랜스포머 기반 신경망입니다. 의미나 의미론적으로 유사한 콘텐츠는 아래 이미지에서 보이는 것처럼 잠재 공간(latent space)에서 유사한 표현으로 매핑됩니다.
언어의 벡터화는 기존의 키워드(어휘 기반) 검색 대신 ‘문서와 대화하기’ 또는 의미 기반 검색과 같은 AI 기반 애플리케이션을 가능하게 합니다.
선택하는 임베딩 모델은 RAG 시스템의 검색 정확도, 지연 시간, 연산 비용에 큰 영향을 미칩니다. 임베딩 모델 선택은 주로 모델 크기에 영향을 받으며 이 크기는 두 가지 요소인 임베딩 차원 수와 모델 파라미터 수에 의해 결정됩니다.
더 큰 임베딩 모델은 일반적으로 검색 성능을 향상시키지만, 지연 시간 증가와 스토리지 사용 증가, 그리고 계산 비용(재정적 비용) 증가라는 대가가 따릅니다. 반대로 더 작은 임베딩 모델은 일반적으로 검색 성능은 낮지만, 더 적은 메모리를 사용하고 더 적은 계산 자원을 필요로 하며 실행 시 더 빠르게 동작합니다. 성능 요구 사항과 사용 가능한 리소스 사이에서 균형을 맞출 수 있는 임베딩 모델을 선택하세요.
일부 임베딩 모델은 언어별(예: 스페인어 고객을 위해 구축된 스페인어 임베딩 모델)이며 도메인별(예: 의료 파일에 대한 RAG를 가능하게 하기 위해 종양학 용어로 학습된 모델)입니다.
watsonx에 배포된 임베딩 모델을 사용하는 것이 권장됩니다. IBM이 개발한 slate 모델 또는 아래에 나열된 타사 모델입니다. 각 모델에 대한 자세한 내용은 해당 문서를 참고하세요. 청구 등급에 대한 자세한 내용은 watsonx 청구 플랜을 참고하세요.
IBM Slate 모델
| 모델명 | API model_id | 청구 등급 | 최대 입력 토큰 수 | 차원 수 | 자세한 정보 |
|---|---|---|---|---|---|
| slate-125m-english-rtrvr | ibm/slate-125m-english-rtrvr | Class C1 | 512 | 768 | 모델 카드 |
| slate-30m-english-rtrvr | ibm/slate-30m-english-rtrvr | Class C1 | 512 | 384 | 모델 카드 |
slate-125m-english-rtrvr 파운데이션 모델은 IBM에서 제공합니다. slate-125m-english-rtrvr 파운데이션 모델은 쿼리, 텍스트 구절, 문서와 같은 다양한 입력에 대한 임베딩을 생성합니다. 학습 목표는 쿼리와 텍스트 구절 간의 코사인 유사도를 최대화하는 것입니다. 이 과정에서는 두 개의 문장 임베딩이 생성되며, 하나는 질문을 나타내고 다른 하나는 텍스트 구절을 나타내며, 두 임베딩을 코사인 유사도를 통해 비교할 수 있습니다.
사용: slate-30m-english-rtrvr 모델보다 2~3배 느리지만 성능은 약간 더 우수합니다. 지원 언어: 영어
slate-30m-english-rtrvr 파운데이션 모델은 IBM이 제공하는 slate-125m-english-rtrvr의 증류 버전입니다. slate-30m-english-rtrvr 임베딩 모델은 두 텍스트 입력 간 코사인 유사도를 최대화하도록 학습되어 이후 유사도를 기반으로 임베딩을 평가할 수 있도록 합니다.
사용: slate-125m-english-rtrvr 모델보다 2~3배 빠르지만 성능 점수는 약간 낮습니다. 지원 언어: 영어
all-minilm-l12-v2 임베딩 모델은 오픈소스 자연어 처리(NLP) 및 컴퓨터 비전(CV) 커뮤니티에서 구축되었으며 HuggingFace에서 제공합니다.
지원 언어: 영어
사용: 영어 이외의 언어 텍스트에 대해 텍스트 임베딩을 생성하려는 사용 사례에 적합합니다.
지원 자연어: 최대 100개 언어 자세한 내용은 모델 카드를 참고하세요.
지원되는 임베딩 모델에 대한 자세한 내용은 watsonx 문서를 참고하세요.
ibm-watsonx-ai Python 라이브러리 설치
pip install -U ibm-watsonx-ai
watsonx 임베딩 API와 사용 가능한 임베딩 모델을 사용하여 텍스트 임베딩을 생성합니다.
from ibm_watsonx_ai.metanames import EmbedTextParamsMetaNames as EmbedParams
from ibm_watsonx_ai.foundation_models.utils.enums import EmbeddingTypes
from ibm_watsonx_ai.foundation_models import Embeddings
# Set the truncate_input_tokens to a value that is equal to or less than the maximum allowed tokens for the embedding model that you are using. If you don't specify this value and the input has more tokens than the model can process, an error is generated.
embed_params = {
EmbedParams.TRUNCATE_INPUT_TOKENS: 128,
EmbedParams.RETURN_OPTIONS: {
'input_text': True
}
}
embedding = Embeddings(
model_id=EmbeddingTypes.IBM_SLATE_30M_ENG,
credentials=credentials,
params=embed_params,
project_id=project_id,
space_id=None,
verify=False
)
q = [
"A foundation model is a large scale generative AI model that can be adapted to a wide range of downstream tasks.",
"Generative AI a class of AI algorithms that can produce various types of content including text, source code, imagery, audio, and synthetic data."
]
embedding_vectors = embedding.embed_documents(texts=q)
print(embedding_vectors)
watsonx Granite 모델 시리즈와 임베딩, Chroma, LangChain을 사용하여 질문에 답하기(RAG) 및 LangChain
업데이트: 2024년 11월 15일