FastembedTextEmbedder
FastembedTextEmbedder
FastEmbed가 지원하는 임베딩 모델을 사용해 문자열의 임베딩을 계산하는 컴포넌트예요.
출처: 문서
본문
- 파이프라인에서의 일반적인 위치: 쿼리/RAG 파이프라인에서 임베딩 리트리버 앞에 사용해요.
- 필수 실행 변수:
text(문자열) - 출력 변수:
embedding(float 숫자 리스트, 벡터)
이 컴포넌트는 간단한 문자열(예: 쿼리)을 벡터로 임베딩할 때 사용해요. 문서 리스트를 임베딩할 때는 계산된 임베딩(벡터라고도 해요)으로 문서를 보강하는 FastembedDocumentEmbedder를 사용하세요.
개요 (Overview)
FastembedTextEmbedder는 FastEmbed가 지원하는 임베딩 모델을 사용해 문자열을 그 의미를 담은 벡터로 변환해요.
임베딩 검색을 수행할 때 먼저 이 컴포넌트로 쿼리를 벡터로 변환하세요. 그런 다음 임베딩 리트리버가 이 벡터를 사용해 유사하거나 관련 있는 문서를 검색해요.
호환 모델 (Compatible models)
원본 모델은 FastEmbed 문서에서 찾을 수 있어요.
현재 MTEB(Massive Text Embedding Benchmark) 리더보드의 대부분 모델이 FastEmbed와 호환돼요. 지원되는 모델 목록에서 호환성을 확인할 수 있어요.
설치 (Installation)
이 통합을 Haystack에서 사용하려면 패키지를 설치하세요.
pip install fastembed-haystack
지침 (Instructions)
MTEB에서 찾을 수 있는 일부 최신 모델은 검색을 더 잘 하기 위해 텍스트 앞에 지침(instruction)을 붙여야 해요. 예를 들어 [BAAI/bge-large-en-v1.5](https://huggingface.co/BAAI/bge-large-en-v1.5#model-list) 모델을 사용한다면, 쿼리 앞에 instruction: “passage:”를 붙여야 해요.
FastembedTextEmbedder에서는 이렇게 동작해요.
instruction = "passage:"
embedder = FastembedTextEmbedder(
model="BAAI/bge-large-en-v1.5",
prefix=instruction,
)
파라미터 (Parameters)
모델이 저장될 경로를 캐시 디렉터리로 설정할 수 있어요. 단일 onnxruntime 세션이 사용할 스레드 수를 설정할 수도 있어요.
cache_dir = "/your_cacheDirectory"
embedder = FastembedTextEmbedder(
model="BAAI/bge-large-en-v1.5",
cache_dir=cache_dir,
threads=2,
)
데이터 병렬 인코딩을 사용하려면 parallel과 batch_size 파라미터를 설정할 수 있어요.
parallel> 1이면 데이터 병렬 인코딩을 사용해요. 대규모 데이터셋의 오프라인 인코딩에 권장돼요.parallel이 0이면 사용 가능한 모든 코어를 사용해요.- None이면 데이터 병렬 처리를 사용하지 않고 기본
onnxruntime스레딩을 사용해요.
tip
같은 모델 기반의 Text Embedder와 Document Embedder를 만들면, Haystack은 뒤에서 같은 리소스를 사용해 리소스를 아껴요.
사용법 (Usage)
단독 사용 (On its own)
from haystack_integrations.components.embedders.fastembed import FastembedTextEmbedder
text = """It clearly says online this will work on a Mac OS system.
The disk comes and it does not, only Windows.
Do Not order this if you have a Mac!!"""
text_embedder = FastembedTextEmbedder(model="BAAI/bge-small-en-v1.5")
embedding = text_embedder.run(text)["embedding"]
파이프라인에서 사용 (In a pipeline)
from haystack import Document, Pipeline
from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack_integrations.components.embedders.fastembed import (
FastembedDocumentEmbedder,
FastembedTextEmbedder,
)
document_store = InMemoryDocumentStore(embedding_similarity_function="cosine")
documents = [
Document(content="My name is Wolfgang and I live in Berlin"),
Document(content="I saw a black horse running"),
Document(content="Germany has many big cities"),
Document(content="fastembed is supported by and maintained by Qdrant."),
]
document_embedder = FastembedDocumentEmbedder()
documents_with_embeddings = document_embedder.run(documents)["documents"]
document_store.write_documents(documents_with_embeddings)
query_pipeline = Pipeline()
query_pipeline.add_component("text_embedder", FastembedTextEmbedder())
query_pipeline.add_component(
"retriever",
InMemoryEmbeddingRetriever(document_store=document_store),
)
query_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")
query = "Who supports FastEmbed?"
result = query_pipeline.run({"text_embedder": {"text": query}})
print(result["retriever"]["documents"][0]) # noqa: T201
# Document(id=...,
# content: 'fastembed is supported by and maintained by Qdrant.',
# score: 0.758..)
추가 자료 (Additional References)
🧑🍳 Cookbook: RAG Pipeline Using FastEmbed for Embeddings Generation