FastEmbed é uma biblioteca Python leve e rápida construída para geração de incorporação. Oferecemos suporte a modelos de texto populares. Abra um problema no GitHub se desejar adicionar um novo modelo.
O modelo padrão de incorporação de texto ( TextEmbedding
) é Flag Embedding, apresentado no placar do MTEB. Suporta prefixos de "consulta" e "passagem" para o texto de entrada. Aqui está um exemplo de geração de incorporação de recuperação e como usar FastEmbed com Qdrant.
Leve: FastEmbed é uma biblioteca leve com poucas dependências externas. Não exigimos uma GPU e não baixamos GBs de dependências PyTorch e, em vez disso, usamos o ONNX Runtime. Isso o torna um ótimo candidato para tempos de execução sem servidor como o AWS Lambda.
Rápido: FastEmbed foi projetado para velocidade. Usamos o ONNX Runtime, que é mais rápido que o PyTorch. Também usamos paralelismo de dados para codificar grandes conjuntos de dados.
Preciso: FastEmbed é melhor que OpenAI Ada-002. Também oferecemos suporte a um conjunto cada vez maior de modelos, incluindo alguns modelos multilíngues.
Para instalar a biblioteca FastEmbed, o pip funciona melhor. Você pode instalá-lo com ou sem suporte de GPU:
pip install fastembed# ou com suporte de GPUpip install fastembed-gpu
from fastembed import TextEmbeddingfrom digitando import List# Exemplo de lista de documentosdocumentos: List[str] = [ "Isso foi criado para ser mais rápido e leve que outras bibliotecas de incorporação, por exemplo, Transformers, Sentence-Transformers, etc.", "fastembed é suportado e mantido por Qdrant.", ]# Isso acionará o download e a inicialização do modeloembedding_model = TextEmbedding()print("O modelo BAAI/bge-small-en-v1.5 está pronto para uso.")embeddings_generator = embedding_model.embed(documents) # lembrete que este é um Generatorembeddings_list = list(embedding_model.embed(documents)) # você também pode converter o gerador em uma lista, e isso em um numpy arraylen(embeddings_list[0]) # Vetor de 384 dimensões
Fastembed suporta uma variedade de modelos para diferentes tarefas e modalidades. A lista de todos os modelos disponíveis pode ser encontrada aqui
from fastembed import TextEmbeddingmodel = TextEmbedding(model_name="BAAI/bge-small-en-v1.5")embeddings = list(model.embed(documents))# [# array([-0.1115, 0.0097, 0.0052, 0.0195, . ..], dtype=float32),# array([-0.1019, 0.0635, -0.0332, 0.0522, ...], dtype=float32)# ]
SPLADE++
da importação fastembed SparseTextEmbeddingmodel = SparseTextEmbedding(model_name="prithivida/Splade_PP_en_v1")embeddings = list(model.embed(documents))# [# SparseEmbedding(indices=[ 17, 123, 919, ... ], valores=[0,71, 0,22, 0,39, ...]),# SparseEmbedding(índices=[ 38, 12, 91, ... ], valores=[0,11, 0,22, 0,39, ...])# ]
da importação fastembed LateInteractionTextEmbeddingmodel = LateInteractionTextEmbedding(model_name="colbert-ir/colbertv2.0")embeddings = list(model.embed(documents))# [# array([# [-0.1115, 0.0097, 0.0052, 0.0195, ... ],# [-0,1019, 0,0635, -0,0332, 0,0522, ...],# ]),# matriz([# [-0,9019, 0,0335, -0,0032, 0,0991, ...],# [-0,2115, 0,8097 , 0,1052, 0,0195, ...],# ]), # ]
de importação fastembed ImageEmbeddingimages = [ "./path/to/image1.jpg", "./path/to/image2.jpg", ]model = ImageEmbedding(model_name="Qdrant/clip-ViT-B-32-vision")embeddings = list(model.embed(images))# [# array([-0.1115, 0.0097, 0.0052, 0.0195, ... ], dtype=float32),# array([-0,1019, 0,0635, -0,0332, 0,0522, ...], dtype=float32)# ]
FastEmbed suporta execução em dispositivos GPU. Requer a instalação do pacote fastembed-gpu
.
pip instalar fastembed-gpu
Verifique nosso exemplo para obter instruções detalhadas, suporte CUDA 12.x e solução de problemas comuns.
da importação fastembed TextEmbeddingembedding_model = TextEmbedding( model_name="BAAI/bge-small-en-v1.5", provedores=["CUDAExecutionProvider"] )print("O modelo BAAI/bge-small-en-v1.5 está pronto para uso em uma GPU.")
Instalação com cliente Qdrant em Python:
pip instalar qdrant-client[fastembed]
ou
pip instalar qdrant-client[fastembed-gpu]
Talvez seja necessário usar aspas pip install 'qdrant-client[fastembed]'
no zsh.
from qdrant_client import QdrantClient# Inicialize o clientclient = QdrantClient("localhost", port=6333) # Para produção# client = QdrantClient(":memory:") # Para pequenos experimentos# Prepare seus documentos, metadados e IDsdocs = ["Qdrant tem integrações Langchain", "Qdrant também tem integrações Llama Index"]metadata = [ {"fonte": "Langchain-docs"}, {"fonte": "Lhama-index-docs"}, ]ids = [42, 2]# Se você deseja alterar o modelo:# client.set_model("sentence-transformers/all-MiniLM-L6-v2")# Lista de modelos suportados: https://qdrant.github. io/fastembed/examples/Supported_Models# Use o novo add() em vez de upsert()# Isso chama internamente embed() do modelo de incorporação configuradoclient.add( collection_name="demo_collection",documents=docs, metadata=metadata, ids= ids)search_result = client.query( collection_name="demo_collection", query_text="Este é um documento de consulta")print(search_result)