Попытка запустить USE в веб-приложении, чтобы избежать проблем с производительностью, но в нем отсутствует метод embed ().
importScripts('https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.2.9/dist/tf.min.js'); importScripts('https://cdn.jsdelivr.net/npm/@tensorflow-models/universal-sentence-encoder@1.1.1/dist/universal-sentence-encoder.min.js'); tf.setBackend('cpu'); onmessage = message => { use.load().then(model => { const sentences = [ 'I like my phone.', 'Your cellphone looks great.' ]; /** model = { model, tokenizer } */ model.embed(sentences).then(async embeddings => { const vec = await embeddings.array(); const cosine = tf.losses.cosineDistance(vec[0], vec[1], 0); const result = await cosine.data(); console.log(`${Math.round((1 - result) * 100)}%`); }); }); }
В модели нет встроенной функции (), что имеет местодля основного потока Можно ли даже запустить USE в веб-рабочих?
Универсальный кодировщик предложений (USE) может использоваться веб-работником.Ниже приведен этот рабочий фрагмент с результатом, отправленным рабочим в основной поток
<head> <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.14.2/dist/tf.min.js"></script> <script> const worker_function = () => { importScripts('https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@1.2.9/dist/tf.min.js'); importScripts('https://cdn.jsdelivr.net/npm/@tensorflow-models/universal-sentence-encoder@1.1.1/dist/universal-sentence-encoder.min.js'); tf.setBackend('cpu'); onmessage = message => { console.log("from worker") use.load().then(model => { const sentences = [ 'I like my phone.', 'Your cellphone looks great.' ]; model.embed(sentences).then(async embeddings => { console.log(await embeddings) const vec = await embeddings.array(); const cosine = tf.losses.cosineDistance(vec[0], vec[1], 0); const result = await cosine.data(); console.log(`${Math.round((1 - result) * 100)}%`); postMessage({res: cosine.dataSync(), shape: cosine.shape}) }); }); }; } if (window != self) worker_function(); </script> <script> const worker = new Worker(URL.createObjectURL(new Blob(["(" + worker_function.toString() + ")()"], { type: 'text/javascript' }))); worker.postMessage({}); worker.onmessage = (message) => { console.log('from main thread') const {data} = message tf.tensor(message.data.res, message.data.shape).print() } </script> </head>