ONNX Runtime Web (ORT Web) предоставляет возможность запускать модели машинного обучения, экспортированные в формат ONNX, непосредственно в браузере или в среде Node.js с использованием JavaScript. Библиотека оптимизирована для работы с WebAssembly (WASM) и WebGL, что обеспечивает высокую производительность даже на устройствах с ограниченными ресурсами. Основные компоненты ORT Web включают:
Модели типа BERT и DistilBERT предназначены для задач обработки естественного языка, таких как классификация текста, выделение эмбеддингов и анализ сентимента. Для работы с ними в ORT Web необходимо:
import * as ort from 'onnxruntime-web';
const session = await ort.InferenceSession.create('bert_model.onnx', {
executionProviders: ['wasm', 'webgl']
});
BERT и DistilBERT требуют специфической подготовки текста:
Пример подготовки входных данных:
import { BertTokenizer } from '@huggingface/tokenizers';
const tokenizer = await BertTokenizer.fromOptions({ vocabFile: 'vocab.txt' });
const text = "Пример текста для классификации";
const encoded = tokenizer.encode(text);
const inputIds = new ort.Tensor('int64', encoded.ids, [1, encoded.ids.length]);
const attentionMask = new ort.Tensor('int64', encoded.attentionMask, [1, encoded.ids.length]);
После подготовки входов можно выполнить инференс, используя метод
run:
const feeds = {
input_ids: inputIds,
attention_mask: attentionMask
};
const results = await session.run(feeds);
const logits = results.logits.data;
Ключевым моментом является соответствие имен входов и выходов модели
тем, которые использовались при экспорте в ONNX. Для BERT и DistilBERT
это обычно input_ids, attention_mask и
token_type_ids (для BERT).
Для задач встраивания текста (text embedding) DistilBERT чаще
используется для генерации векторных представлений. В этом случае
интерес представляет выход последнего скрытого слоя
(last_hidden_state):
const embeddings = results.last_hidden_state.data;
// Вектор размерности [batch_size, sequence_length, hidden_size]
Эти эмбеддинги можно использовать для:
Для больших моделей BERT и DistilBERT критично снизить задержки:
Выбор движка осуществляется через executionProviders при
создании InferenceSession.
ORT Web поддерживает асинхронное выполнение инференса, что позволяет
не блокировать основной поток браузера. Использование
Web Worker позволяет вынести вычисления на отдельный
поток:
const worker = new Worker('inferenceWorker.js');
worker.postMessage({ text: "Пример текста" });
worker.onmess age = (e) => {
const embeddings = e.data;
console.log(embeddings);
};
Эмбеддинги и логиты, полученные с помощью ORT Web, обычно хранятся в виде массивов Float32Array или Int64Array. Их можно:
ORT Web поддерживает как стандартные BERT, так и облегчённые DistilBERT модели. Отличие заключается в количестве слоёв и размере скрытых состояний, что влияет на производительность и точность:
Использование DistilBERT оправдано для приложений, где критична скорость отклика и ограничены ресурсы клиента.
ORT Web позволяет интегрировать BERT и DistilBERT в:
Главная особенность — возможность выполнения модели полностью на клиенте без обращения к серверу, что повышает скорость отклика и защищает конфиденциальность данных.