BAAI/bge-m3
BAAI
Similitud de oraciones
En este proyecto, presentamos BGE-M3, destacado por su versatilidad en Multi-Funcionalidad, Multi-Lingualidad y Multi-Granularidad. Es capaz de realizar tres funcionalidades comunes de modelos de embeddings: recuperación densa, recuperación de múltiples vectores y recuperación dispersa. Soporta más de 100 idiomas de trabajo y es capaz de procesar entradas de diferentes granularidades, desde oraciones cortas hasta documentos largos de hasta 8192 tokens.
Como usar
Instalar:
git clone https://github.com/FlagOpen/FlagEmbedding.git
cd FlagEmbedding
pip install -e .
O:
pip install -U FlagEmbedding
Generar Embeddings para texto
from FlagEmbedding import BGEM3FlagModel
model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=True)
sentences_1 = ["¿Qué es BGE M3?", "Definición de BM25"]
sentences_2 = ["BGE M3 es un modelo de embedding que soporta recuperación densa, coincidencia léxica e interacción de múltiples vectores.", "BM25 es una función de recuperación de bolsa-de-palabras que clasifica un conjunto de documentos basándose en los términos de la consulta que aparecen en cada documento"]
embeddings_1 = model.encode(sentences_1, batch_size=12, max_length=8192)['dense_vecs']
embeddings_2 = model.encode(sentences_2)['dense_vecs']
similarity = embeddings_1 @ embeddings_2.T
print(similarity)
# [[0.6265, 0.3477], [0.3499, 0.678 ]]
Embeddings Dispersos (Peso Léxico)
from FlagEmbedding import BGEM3FlagModel
model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=True)
sentences_1 = ["¿Qué es BGE M3?", "Definición de BM25"]
sentences_2 = ["BGE M3 es un modelo de embedding que soporta recuperación densa, coincidencia léxica e interacción de múltiples vectores.", "BM25 es una función de recuperación de bolsa-de-palabras que clasifica un conjunto de documentos basándose en los términos de la consulta que aparecen en cada documento"]
output_1 = model.encode(sentences_1, return_dense=True, return_sparse=True, return_colbert_vecs=False)
output_2 = model.encode(sentences_2, return_dense=True, return_sparse=True, return_colbert_vecs=False)
# puedes ver el peso por cada token:
print(model.convert_id_to_token(output_1['lexical_weights']))
# [{'What': 0.08356, 'is': 0.0814, 'B': 0.1296, 'GE': 0.252, 'M': 0.1702, '3': 0.2695, '?': 0.04092},
# {'De': 0.05005, 'fin': 0.1368, 'ation': 0.04498, 'of': 0.0633, 'BM': 0.2515, '25': 0.3335}]
# calcula las puntuaciones a través de coincidencia léxica
lexical_scores = model.compute_lexical_matching_score(output_1['lexical_weights'][0], output_2['lexical_weights'][0])
print(lexical_scores)
# 0.19554901123046875
print(model.compute_lexical_matching_score(output_1['lexical_weights'][0], output_1['lexical_weights'][1]))
# 0.0
Multi-Vector (ColBERT)
from FlagEmbedding import BGEM3FlagModel
model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=True)
sentences_1 = ["¿Qué es BGE M3?", "Definición de BM25"]
sentences_2 = ["BGE M3 es un modelo de embedding que soporta recuperación densa, coincidencia léxica e interacción de múltiples vectores.", "BM25 es una función de recuperación de bolsa-de-palabras que clasifica un conjunto de documentos basándose en los términos de la consulta que aparecen en cada documento"]
output_1 = model.encode(sentences_1, return_dense=True, return_sparse=True, return_colbert_vecs=True)
output_2 = model.encode(sentences_2, return_dense=True, return_sparse=True, return_colbert_vecs=True)
print(model.colbert_score(output_1['colbert_vecs'][0], output_2['colbert_vecs'][0]))
print(model.colbert_score(output_1['colbert_vecs'][0], output_2['colbert_vecs'][1]))
# 0.7797
# 0.4620
Funcionalidades
- Recuperación densa
- Recuperación de múltiples vectores
- Recuperación dispersa
- Soporte para más de 100 idiomas
- Procesamiento de oraciones cortas y documentos largos hasta 8192 tokens
Casos de uso
- Recuperación de documentos
- Evaluación de similaridad de oraciones
- Generación de embeddings multilingües
- Filtrado de contenido relevante posterior a la recuperación inicial (re-rank) con modelos de cross-encoder
- Integración con herramientas como Vespa y Milvus para recuperación híbrida