DMetaSoul/sbert-chinese-general-v2-distill

DMetaSoul
Similitud de oraciones

Este modelo es una versión destilada de un modelo de comparación semántica general previamente de código abierto (solo 4 capas BERT). Es adecuado para escenarios de comparación semántica general. Este modelo tiene una mejor capacidad de generalización y una velocidad de codificación más rápida en varias tareas. Los modelos grandes entrenados fuera de línea, si se utilizan directamente para inferencias en línea, requieren muchos recursos informáticos y es difícil cumplir con los requisitos de rendimiento del entorno corporativo, como la latencia y el rendimiento. Aquí utilizamos técnicas de destilación para aligerar el modelo grande. Tras destilar de 12 capas BERT a 4 capas, el número de parámetros del modelo se reduce al 44%, la latencia se reduce a la mitad, el rendimiento se duplica y la precisión disminuye en aproximadamente un 6% (vea la sección de evaluación para resultados específicos).

Como usar

1. Sentence-Transformers

Instalar el marco sentence-transformers:

pip install -U sentence-transformers

Luego usa el siguiente código para cargar el modelo y extraer vectores de representación textual:

from sentence_transformers import SentenceTransformer
sentences = ["我的儿子!他猛然间喊道,我的儿子在哪儿?", "我的儿子呢!他突然喊道,我的儿子在哪里?"]

model = SentenceTransformer('DMetaSoul/sbert-chinese-general-v2-distill')
embeddings = model.encode(sentences)
print(embeddings)

2. HuggingFace Transformers

Si no deseas usar sentence-transformers, también puedes cargar el modelo y extraer los vectores de texto utilizando HuggingFace Transformers:

from transformers import AutoTokenizer, AutoModel
import torch

# Promedio de la Pooling: tomar la máscara de atención en cuenta para un promediado correcto

def mean_pooling(model_output, attention_mask):
    token_embeddings = model_output[0] # Primer elemento de model_output contiene todas las representaciones de tokens
    input_mask_expanded = attention_mask.unsqueeze(-1).expand(token_embeddings.size()).float()
    return torch.sum(token_embeddings * input_mask_expanded, 1) / torch.clamp(input_mask_expanded.sum(1), min=1e-9)

# Oraciones para las cuales queremos obtener embeddings
sentences = ["我的儿子!他猛然间喊道,我的儿子在哪儿?", "我的儿子呢!他突然喊道,我的儿子在哪里?"]

# Cargar el modelo desde HuggingFace Hub

tokenizer = AutoTokenizer.from_pretrained('DMetaSoul/sbert-chinese-general-v2-distill')
model = AutoModel.from_pretrained('DMetaSoul/sbert-chinese-general-v2-distill')

# Tokenizar las oraciones
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')

# Calcular los embeddings de tokens
with torch.no_grad():
    model_output = model(**encoded_input)

# Realizar pooling. En este caso, pooling promedio
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])

print("Embeddings de oraciones:")
print(sentence_embeddings)

Funcionalidades

Reducción de parámetros del modelo al 44%
Latencia reducida a la mitad
Duplicación del rendimiento
Adecuado para escenarios de comparación semántica general
Velocidad de codificación más rápida

Casos de uso

Comparación semántica general
Búsqueda semántica
Extracción de características
Embeddings de texto