bkai-foundation-models/vietnamese-bi-encoder
Este es un modelo de sentence-transformers: Mapea oraciones y párrafos a un espacio vectorial denso de 768 dimensiones y puede ser utilizado para tareas como la agrupación o la búsqueda semántica. Entrenamos el modelo en un conjunto de datos de entrenamiento fusionado que consta de MS Macro (traducido al vietnamita), SQuAD v2 (traducido al vietnamita) y el 80% del conjunto de entrenamiento del desafío Legal Text Retrieval Zalo 2021. Utilizamos phobert-base-v2 como la columna vertebral pre-entrenada. Aquí están los resultados en el 20% restante del conjunto de entrenamiento del desafío Legal Text Retrieval Zalo 2021.
Como usar
Uso (Sentence-Transformers)
Usar este modelo se vuelve fácil cuando tienes sentence-transformers instalado:
pip install -U sentence-transformers
Luego puedes usar el modelo así:
from sentence_transformers import SentenceTransformer
# ¡EL TEXTO DE ENTRADA DEBE ESTAR YA SEGMENTADO EN PALABRAS!
sentences = ["Cô ấy là một người vui_tính .", "Cô ấy cười nói suốt cả ngày ."]
model = SentenceTransformer('bkai-foundation-models/vietnamese-bi-encoder')
embeddings = model.encode(sentences)
print(embeddings)
Uso (Widget HuggingFace)
El widget usa una pipeline personalizada sobre la pipeline predeterminada agregando un segmentador de palabras antes de PhobertTokenizer. Así que no necesitas segmentar palabras antes de usar la API:
Puedes ver un ejemplo en la API de inferencia alojada.
Uso (HuggingFace Transformers)
Sin sentence-transformers, puedes utilizar el modelo así: Primero, pasas tu entrada a través del modelo transformer, luego tienes que aplicar la operación de pooling correcta sobre los embeddings de palabras contextualizadas.
from transformers import AutoTokenizer, AutoModel
import torch
# Mean Pooling - Considerar la máscara de atención para un promedio correcto
def mean_pooling(model_output, attention_mask):
token_embeddings = model_output[0] # El primer elemento de model_output contiene todos los embeddings 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 a las que queremos obtener embeddings, podríamos usar pyvi, underthesea, RDRSegment para segmentar palabras
sentences = ['Cô ấy là một người vui_tính .', 'Cô ấy cười nói suốt cả ngày .']
# Cargar modelo del HuggingFace Hub
tokenizer = AutoTokenizer.from_pretrained('bkai-foundation-models/vietnamese-bi-encoder')
model = AutoModel.from_pretrained('bkai-foundation-models/vietnamese-bi-encoder')
# Tokenizar oraciones
encoded_input = tokenizer(sentences, padding=True, truncation=True, return_tensors='pt')
# Calcular embeddings de tokens
with torch.no_grad():
model_output = model(**encoded_input)
# Realizar pooling. En este caso, avg pooling.
sentence_embeddings = mean_pooling(model_output, encoded_input['attention_mask'])
print("Embeddings de oraciones:")
print(sentence_embeddings)
Funcionalidades
- Proporciona embeddings de oraciones de 768 dimensiones.
- Capacidades de búsqueda semántica.
- Entrenado con conjuntos de datos traducidos al vietnamita.
- Utiliza phobert-base-v2 como modelo pre-entrenado.
- Resultados superiores en tareas de búsqueda de texto legal.
Casos de uso
- Clustering de oraciones
- Búsqueda semántica
- Extracción de características
- Clasificación de textos legales
- Optimización de motores de búsqueda