Javascript WebWorker中的TensorflowJS通用语句编码器
试图在webworker中运行USE以避免性能问题,但它缺少embed()方法 网络工作者 模型内部没有嵌入(),这是主线程的情况Javascript WebWorker中的TensorflowJS通用语句编码器,javascript,tensorflow,web-worker,tensorflow.js,Javascript,Tensorflow,Web Worker,Tensorflow.js,试图在webworker中运行USE以避免性能问题,但它缺少embed()方法 网络工作者 模型内部没有嵌入(),这是主线程的情况 甚至可以在webworker中运行USE吗?通用句子编码器(USE)可以在webworker中使用。请参见下面这个工作片段,其中包含从工作线程发送到主线程的结果 常量辅助函数=()=> { 进口文件('https://cdn.jsdelivr.net/npm/@张量流/tfjs@1.2.9/地区/运输署(民建联);; 进口文件('https://cdn.jsde
甚至可以在webworker中运行USE吗?通用句子编码器(USE)可以在webworker中使用。请参见下面这个工作片段,其中包含从工作线程发送到主线程的结果
常量辅助函数=()=>
{
进口文件('https://cdn.jsdelivr.net/npm/@张量流/tfjs@1.2.9/地区/运输署(民建联);;
进口文件('https://cdn.jsdelivr.net/npm/@张量流模型/通用句-encoder@1.1.1/dist/universal-station-encoder.min.js');
tf.倒退(“cpu”);
onmessage=message=>
{
console.log(“来自工作者”)
使用.load().then(模型=>
{
常量句子=[
“我喜欢我的手机。”,
“你的手机看起来很棒。”
];
嵌入(句子)。然后(异步嵌入=>
{
console.log(等待嵌入)
const vec=await embeddings.array();
常数余弦=tf损失余弦距离(向量[0],向量[1],0);
常量结果=等待余弦.data();
log(`${Math.round((1-result)*100)}%`);
postMessage({res:cosine.dataSync(),shape:cosine.shape})
});
});
};
}
如果(窗口!=self)
worker_函数();
const-worker=new-worker(URL.createObjectURL(新Blob([“(“+worker\u function.toString()+”)”),{type:'text/javascript'}));
worker.postMessage({});
worker.onmessage=(消息)=>{
console.log('来自主线程')
const{data}=消息
tensor(message.data.res,message.data.shape).print()
}
通用句子编码器(USE)可以在webworker中使用。请参见下面这个工作片段,其中包含从工作线程发送到主线程的结果
常量辅助函数=()=>
{
进口文件('https://cdn.jsdelivr.net/npm/@张量流/tfjs@1.2.9/地区/运输署(民建联);;
进口文件('https://cdn.jsdelivr.net/npm/@张量流模型/通用句-encoder@1.1.1/dist/universal-station-encoder.min.js');
tf.倒退(“cpu”);
onmessage=message=>
{
console.log(“来自工作者”)
使用.load().then(模型=>
{
常量句子=[
“我喜欢我的手机。”,
“你的手机看起来很棒。”
];
嵌入(句子)。然后(异步嵌入=>
{
console.log(等待嵌入)
const vec=await embeddings.array();
常数余弦=tf损失余弦距离(向量[0],向量[1],0);
常量结果=等待余弦.data();
log(`${Math.round((1-result)*100)}%`);
postMessage({res:cosine.dataSync(),shape:cosine.shape})
});
});
};
}
如果(窗口!=self)
worker_函数();
const-worker=new-worker(URL.createObjectURL(新Blob([“(“+worker\u function.toString()+”)”),{type:'text/javascript'}));
worker.postMessage({});
worker.onmessage=(消息)=>{
console.log('来自主线程')
const{data}=消息
tensor(message.data.res,message.data.shape).print()
}
这很奇怪,出于某种原因,我的model
只有两个属性(model和tokenizer)。你能告诉我你的模型
对象中有什么吗?模型有两个属性:模型和标记器,但是在原型上,我们可以看到有方法:加载
,嵌入
,加载模型
。如果使用的是typeScript,则错误与typeScript推断的类型有关,而不是与库有关。您可以考虑将<代码>模型对象转换为<代码> < < />代码>,错误将消失。或者你可以考虑给一个允许使用嵌入式感谢的模型,由于某种原因,我不能在WebWork中使用异步等待(用Webpack来回应App),不得不退回承诺。我想这是Weback特有的东西,但花了我一天的时间。也许你知道网络工作者这种行为的原因?这很奇怪,出于某种原因,我的模型
只有两个属性(模型和标记器)。你能告诉我你的模型
对象中有什么吗?模型有两个属性:模型和标记器,但是在原型上,我们可以看到有方法:加载
,嵌入
,加载模型
。如果使用的是typeScript,则错误与typeScript推断的类型有关,而不是与库有关。您可以考虑将<代码>模型对象转换为<代码> < < />代码>,错误将消失。或者你可以考虑给一个允许使用嵌入式感谢的模型,由于某种原因,我不能在WebWork中使用异步等待(用Webpack来回应App),不得不退回承诺。我想这是Weback特有的东西,但花了我一天的时间。也许你知道网络工作者这种行为的原因?
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)}%`);
});
});
}