Skip to main content
Version: Next

useTextEmbeddings

Text Embedding is the process of converting text into a numerical representation. This representation can be used for various natural language processing tasks, such as semantic search, text classification, and clustering.

caution

It is recommended to use models provided by us, which are available at our Hugging Face repository. You can also use constants shipped with our library.

Reference

import {
useTextEmbeddings,
ALL_MINILM_L6_V2,
ALL_MINILM_L6_V2_TOKENIZER,
} from 'react-native-executorch';

const model = useTextEmbeddings({
modelSource: ALL_MINILM_L6_V2,
tokenizerSource: ALL_MINILM_L6_V2_TOKENIZER,
});

try {
const embedding = await model.forward('Hello World!');
} catch (error) {
console.error(error);
}

Arguments

modelSource A string that specifies the location of the model binary. For more information, take a look at loading models page.

tokenizerSource A string that specifies the location of the tokenizer JSON file.

preventLoad? - Boolean that can prevent automatic model loading (and downloading the data if you load it for the first time) after running the hook.

Returns

FieldTypeDescription
forward(input: string) => Promise<number[]>Executes the model's forward pass, where input is a text that will be embedded.
errorstring | nullContains the error message if the model failed to load.
isGeneratingbooleanIndicates whether the model is currently processing an inference.
isReadybooleanIndicates whether the model has successfully loaded and is ready for inference.
downloadProgressnumberRepresents the download progress as a value between 0 and 1.

Running the model

To run the model, you can use the forward method. It accepts one argument, which is a string representing the text you want to embed. The function returns a promise, which can resolve either to an error or an array of numbers representing the embedding.

Example

import {
useTextEmbeddings,
ALL_MINILM_L6_V2,
ALL_MINILM_L6_V2_TOKENIZER,
} from 'react-native-executorch';

const dotProduct = (a: number[], b: number[]) =>
a.reduce((sum, val, i) => sum + val * b[i], 0);

const cosineSimilarity = (a: number[], b: number[]) => {
const dot = dotProduct(a, b);
const normA = Math.sqrt(dotProduct(a, a));
const normB = Math.sqrt(dotProduct(b, b));
return dot / (normA * normB);
};

function App() {
const model = useTextEmbeddings({
modelSource: ALL_MINILM_L6_V2,
tokenizerSource: ALL_MINILM_L6_V2_TOKENIZER,
});

// ...

try {
const helloWorldEmbedding = await model.forward('Hello World!');
const goodMorningEmbedding = await model.forward('Good Morning!');

const similarity = cosineSimilarity(
helloWorldEmbedding,
goodMorningEmbedding
);

console.log(`Cosine similarity: ${similarity}`);
} catch (error) {
console.error(error);
}

// ...
}

Supported models

ModelLanguageMax TokensEmbedding DimensionsDescription
all-MiniLM-L6-v2English254384All-round model tuned for many use-cases. Trained on a large and diverse dataset of over 1 billion training pairs.
all-mpnet-base-v2English382768All-round model tuned for many use-cases. Trained on a large and diverse dataset of over 1 billion training pairs.
multi-qa-MiniLM-L6-cos-v1English509384This model was tuned for semantic search: Given a query/question, it can find relevant passages. It was trained on a large and diverse set of (question, answer) pairs.
multi-qa-mpnet-base-dot-v1English510768This model was tuned for semantic search: Given a query/question, it can find relevant passages. It was trained on a large and diverse set of (question, answer) pairs.
clip-vit-base-patch32-textEnglish74512CLIP (Contrastive Language-Image Pre-Training) is a neural network trained on a variety of (image, text) pairs. CLIP allows to embed images and text into the same vector space. This allows to find similar images as well as to implement image search. This is the text encoder part of the CLIP model. To embed images checkout clip-vit-base-patch32-image.

Max Tokens - the maximum number of tokens that can be processed by the model. If the input text exceeds this limit, it will be truncated.

Embedding Dimensions - the size of the output embedding vector. This is the number of dimensions in the vector representation of the input text.

info

For the supported models, the returned embedding vector is normalized, meaning that its length is equal to 1. This allows for easier comparison of vectors using cosine similarity, just calculate the dot product of two vectors to get the cosine similarity score.

Benchmarks

Model size

ModelXNNPACK [MB]
ALL_MINILM_L6_V291
ALL_MPNET_BASE_V2438
MULTI_QA_MINILM_L6_COS_V191
MULTI_QA_MPNET_BASE_DOT_V1438
CLIP_VIT_BASE_PATCH32_TEXT254

Memory usage

ModelAndroid (XNNPACK) [MB]iOS (XNNPACK) [MB]
ALL_MINILM_L6_V285100
ALL_MPNET_BASE_V2390465
MULTI_QA_MINILM_L6_COS_V1115130
MULTI_QA_MPNET_BASE_DOT_V1415490
CLIP_VIT_BASE_PATCH32_TEXT195250

Inference time

warning

Times presented in the tables are measured as consecutive runs of the model. Initial run times may be up to 2x longer due to model loading and initialization.

ModeliPhone 16 Pro (XNNPACK) [ms]iPhone 14 Pro Max (XNNPACK) [ms]iPhone SE 3 (XNNPACK) [ms]Samsung Galaxy S24 (XNNPACK)OnePlus 12 (XNNPACK) [ms]
ALL_MINILM_L6_V21522233631
ALL_MPNET_BASE_V27196101112105
MULTI_QA_MINILM_L6_COS_V11522233631
MULTI_QA_MPNET_BASE_DOT_V17195100112105
CLIP_VIT_BASE_PATCH32_TEXT3147485549
info

Benchmark times for text embeddings are highly dependent on the sentence length. The numbers above are based on a sentence of around 80 tokens. For shorter or longer sentences, inference time may vary accordingly.