logo
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Readme
Files and versions

Updated 10 months ago

sentence-embedding

Sentence Embedding with Sentence Transformers

author: Jael Gu


Description

This operator takes a sentence or a list of sentences in string as input. It generates an embedding vector in numpy.ndarray for each sentence, which captures the input sentence's core semantic elements. This operator is implemented with pre-trained models from Sentence Transformers.


Code Example

Use the pre-trained model "all-MiniLM-L12-v2" to generate a text embedding for the sentence "This is a sentence.".

Write a pipeline with explicit inputs/outputs name specifications:

from towhee import pipe, ops, DataCollection

p = (
    pipe.input('sentence')
        .map('sentence', 'vec', ops.sentence_embedding.sbert(model_name='all-MiniLM-L12-v2'))
        .output('sentence', 'vec')
)

DataCollection(p('This is a sentence.')).show()


Factory Constructor

Create the operator via the following factory method:

text_embedding.sbert(model_name='all-MiniLM-L12-v2')

Parameters:

model_name: str

The model name in string. Supported model names:

Refer to SBert Doc. Please note that only models listed supported_model_names are tested. You can refer to Towhee Pipeline for model performance.

device: str

The device to run model, defaults to None. If None, it will use 'cuda' automatically when cuda is available.


Interface

The operator takes a sentence or a list of sentences in string as input. It loads tokenizer and pre-trained model using model name, and then returns text embedding in numpy.ndarray.

call(txt)

Parameters:

txt: Union[List[str], str]

​ A sentence or a list of sentences in string.

Returns:

Union[List[numpy.ndarray], numpy.ndarray]

​ If input is a sentence in string, then it returns an embedding vector of shape (dim,) in numpy.ndarray. If input is a list of sentences, then it returns a list of embedding vectors, each of which a numpy.ndarray in shape of (dim,).


supported_model_names(format=None)

Get a list of all supported model names or supported model names for specified model format.

Parameters:

format: str

​ The model format such as 'pytorch', defaults to None. If None, it will return a full list of supported model names.

from towhee import ops

op = ops.sentence_embedding.sbert().get_op()
full_list = op.supported_model_names()

Fine-tune

Get started

In this example, we fine-tune operator in Semantic Textual Similarity (STS) task, which assigns a score on the similarity of two texts. We use the STSbenchmark as training data to fine-tune.

We only need to construct an op instance and pass in some configurations to train the specified task.

import towhee
import os
from sentence_transformers import util

op = towhee.ops.sentence_embedding.sbert(model_name='nli-distilroberta-base-v2').get_op()

sts_dataset_path = 'datasets/stsbenchmark.tsv.gz'

if not os.path.exists(sts_dataset_path):
    util.http_get('https://sbert.net/datasets/stsbenchmark.tsv.gz', sts_dataset_path)

    
model_save_path = './output'
training_config = {
    'sts_dataset_path': sts_dataset_path,
    'train_batch_size': 16,
    'num_epochs': 4,
    'model_save_path': model_save_path
}
op.train(training_config)


### Load trained weights
### You just need to init a new operator with the trained folder under `model_save_path`.
model_path = os.path.join(model_save_path, os.listdir(model_save_path)[-1]) 
new_op = towhee.ops.sentence_embedding.sbert(model_name=model_path).get_op()

Dive deep and customize your training

You can change the training script in your customer way. Or your can refer to the original sbert training guide and code example for more information.

Jael Gu 42eecba8ae add benchmark 17 Commits
folder-icon benchmark add benchmark 10 months ago
file-icon .gitattributes
1.1 KiB
download-icon
Initial commit 1 year ago
file-icon README.md
4.1 KiB
download-icon
Remove dc2 for towhee1.0 1 year ago
file-icon __init__.py
699 B
download-icon
Add files 1 year ago
file-icon requirements.txt
27 B
download-icon
Add files 1 year ago
file-icon result.png
6.0 KiB
download-icon
Add files 1 year ago
file-icon s_bert.py
9.9 KiB
download-icon
enable accelerate 11 months ago
file-icon test_onnx.py
3.2 KiB
download-icon
Support onnx 1 year ago
file-icon train_sts_task.py
3.4 KiB
download-icon
refine train readme and script 1 year ago