Sentence Similarity
sentence-transformers
PyTorch
ONNX
xlm-roberta
feature-extraction
text-embeddings-inference
Instructions to use p0x0q-dev/bge-m3-sparse-experimental with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- sentence-transformers
How to use p0x0q-dev/bge-m3-sparse-experimental with sentence-transformers:
from sentence_transformers import SentenceTransformer model = SentenceTransformer("p0x0q-dev/bge-m3-sparse-experimental") sentences = [ "That is a happy person", "That is a happy dog", "That is a very happy person", "Today is a sunny day" ] embeddings = model.encode(sentences) similarities = model.similarity(embeddings, embeddings) print(similarities.shape) # [4, 4] - Notebooks
- Google Colab
- Kaggle
| from typing import Dict, List, Any | |
| # from optimum.onnxruntime import ORTModelForSequenceClassification | |
| # from transformers import pipeline, AutoTokenizer | |
| from FlagEmbedding import BGEM3FlagModel | |
| import time | |
| class EndpointHandler(): | |
| def __init__(self, path="."): | |
| # load the optimized model | |
| # モデルの準備 | |
| self.model = BGEM3FlagModel(path, use_fp16=True) | |
| def __call__(self, data: Any) -> List[List[Dict[str, float]]]: | |
| """ | |
| Args: | |
| data (:obj:): | |
| includes the input data and the parameters for the inference. | |
| Return: | |
| A :obj:`list`:. The object returned should be a list of one list like [[{"label": 0.9939950108528137}]] containing : | |
| - "label": A string representing what the label/class is. There can be multiple labels. | |
| - "score": A score between 0 and 1 describing how confident the model is for this label/class. | |
| """ | |
| inputs = data.pop("inputs", data) | |
| parameters = data.pop("parameters", None) | |
| # encodeメソッドの実行前に時間を記録 | |
| start_time = time.time() | |
| result = self.model.encode(inputs, return_dense=False, return_sparse=True, max_length=1024) | |
| # encodeメソッドの実行後に時間を記録 | |
| end_time = time.time() | |
| # print(result) | |
| # dense_vectors = result["dense_vecs"] | |
| # 経過時間を計算 | |
| elapsed_time = end_time - start_time | |
| print(f"Encoding took {elapsed_time:.4f} seconds") | |
| sparse_vectors = result["lexical_weights"] | |
| # defaultdict(<class 'int'>, {'6': 0.09546, '192661': 0.3323}) | |
| # pass inputs with all kwargs in data | |
| # if parameters is not None: | |
| # prediction = self.pipeline(inputs, **parameters) | |
| # else: | |
| # prediction = self.pipeline(inputs) | |
| # postprocess the prediction | |
| # レスポンスをの型をkey=str, value=floatのdictにする。なお、numpy.float16はjsonに変換できないので、floatに変換する。 | |
| sparse_vectors = {str(k): float(v) for k, v in sparse_vectors.items()} | |
| # レスポンスの型をnumpy.ndarrayから、通常のarrayに変更する | |
| # dense_vectors = dense_vectors.tolist() | |
| return [ | |
| [ | |
| { "outputs": sparse_vectors} | |
| ] | |
| ] | |