Node JS 调用模型Xenova_all-MiniLM-L6-v2实战

本篇通过将句子数组转换为句子的向量表示,并通过平均池化和归一化处理,生成适合机器学习或深度学习任务使用的特征向量为例,演示通过NodeJS 的方式调用Xenova/all-MiniLM-L6-v2 的过程。

关于 all-MiniLM-L6-v2 的介绍,可以参照上一篇:

一篇吃透模型:all-MiniLM-L6-v2

可以访问 Hugging Face的状况

Hugging 的站点是:

https://huggingface.co/

如果可以访问该站点的话,则直接安装 Hugging Face 的 Transformers 库。

npm i @huggingface/transformers

之后就可以编写代码:

import { pipeline } from '@huggingface/transformers';// Create a feature-extraction pipeline
const extractor = await pipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2');// Compute sentence embeddings
const sentences = ['This is an example sentence', 'Each sentence is converted'];
const output = await extractor(sentences, { pooling: 'mean', normalize: true });
console.log(output);

上面代码作用就是加载模型,将语句转换为向量,细节的部分下面再介绍,执行的效果如下:

到此,就成功的运行了。

但是如果无法访问Hugging Face 的化, 运行就会出现如下错误:

PS D:\devworkspace\vs\ai_ency\ai_nodejs_ency> node .\src\llm\minilm\huggingface-minilm.js
node:internal/deps/undici/undici:12502Error.captureStackTrace(err, this);^TypeError: fetch failedat node:internal/deps/undici/undici:12502:13at processTicksAndRejections (node:internal/process/task_queues:95:5)at runNextTicks (node:internal/process/task_queues:64:3)at process.processImmediate (node:internal/timers:449:9)at async getModelFile (file:///D:/devworkspace/vs/ai_ency/ai_nodejs_ency/node_modules/@huggingface/transformers/dist/transformers.mjs:31325:24)at async getModelJSON (file:///D:/devworkspace/vs/ai_ency/ai_nodejs_ency/node_modules/@huggingface/transformers/dist/transformers.mjs:31427:18)at async Promise.all (index 0)at async loadTokenizer (file:///D:/devworkspace/vs/ai_ency/ai_nodejs_ency/node_modules/@huggingface/transformers/dist/transformers.mjs:24731:18)at async AutoTokenizer.from_pretrained (file:///D:/devworkspace/vs/ai_ency/ai_nodejs_ency/node_modules/@huggingface/transformers/dist/transformers.mjs:29020:50)at async Promise.all (index 0) {[cause]: ConnectTimeoutError: Connect Timeout Errorat onConnectTimeout (node:internal/deps/undici/undici:6635:28)at node:internal/deps/undici/undici:6587:50at Immediate._onImmediate (node:internal/deps/undici/undici:6617:37)at process.processImmediate (node:internal/timers:478:21) {code: 'UND_ERR_CONNECT_TIMEOUT'}
}

因为默认会从Hugging Face下载模型文件,无法下载,报上面的fetch 获取错误, 有解决方法吗?

答案就是从ModelScope 下载模型文件。

从 ModelScope 下载模型文件

ModelScope上面也维护了 Xenova/all-MiniLM-L6-v2 的模型文件, 地址是:

https://www.modelscope.cn/models/Xenova/all-MiniLM-L6-v2/files

但是,ModelScope提供了Python的库,却没有NodeJS的库,所以无法直接通过ModelScope的来下载,但是可以下载模型的文件,下载方式就是先安装ModelScope,然后用ModelScope 的命令行下载模型文件:

modelscope download --model Xenova/all-MiniLM-L6-v2

下载后的文件目录如下图:

下载后,将这个目录中的内容复制到NodeJS 项目的node_modules 目录下的 node_modules@huggingface\transformers.cache 目录下, 这也是Hugging Face下载模型文件的目录,结构如下图:

复制完成之后,就可以正常运行了。

补充介绍: Transformers 是什么?

Transformers 是由 Hugging Face 团队开发的开源 库,专注于提供基于 Transformer 架构 的预训练模型和工具。它简化了自然语言处理(NLP)任务的实现流程,支持文本生成、翻译、分类、问答等场景,并兼容 PyTorch、TensorFlow 等深度学习框架。

Transformers 有Python 和 NodeJS 两个版本。

如果Hugging Face无法访问

  • Python 版本可以使用ModelScope提供的库
  • NodeJS

补充介绍: 代码详细解释

const extractor = await pipeline(...) 是使用 Hugging Face Transformers.js 库的核心方法之一,用于创建一个 预训练模型的推理管道。通过 pipeline,可以轻松加载模型并执行各种任务(如文本分类、特征提取、问答等)。


pipeline 的作用是:

  1. 加载模型:从本地或远程加载预训练模型和分词器。
  2. 封装推理逻辑:将模型的输入预处理、推理和后处理逻辑封装成一个简单的接口。
  3. 执行任务:根据任务类型(如 feature-extractiontext-classification 等),对输入数据进行处理并返回结果。

参数详解

pipeline 方法的完整签名如下:

const pipeline = await transformers.pipeline(task, model, options);
1. task(必需)

指定要执行的任务类型。常见的任务包括:

  • feature-extraction:特征提取(生成句子或词的嵌入向量)。
  • text-classification:文本分类。
  • question-answering:问答任务。
  • translation:翻译任务。
  • text-generation:文本生成。
  • 其他任务:如 summarizationfill-mask 等。

示例

const extractor = await pipeline('feature-extraction');

2. model(可选)

指定要加载的模型。可以是以下之一:

  • 模型名称:从 Hugging Face Hub 加载的模型名称(如 Xenova/all-MiniLM-L6-v2)。
  • 本地路径:本地模型文件的路径(如 ./custom_model)。
  • 未指定:如果不提供,库会加载默认模型。

示例

// 从 Hugging Face Hub 加载模型
const extractor = await pipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2');// 从本地路径加载模型
const extractor = await pipeline('feature-extraction', './custom_model');

3. options(可选)

一个配置对象,用于自定义模型加载和推理行为。常见选项包括:

选项类型描述
local_files_onlyboolean是否仅从本地加载模型(默认 false)。设置为 true 可禁用网络请求。
revisionstring模型版本(如 main 或特定 commit hash)。
cache_dirstring缓存目录路径。设置为 null 可禁用缓存。
quantizedboolean是否加载量化模型(默认 false)。
progress_callbackfunction加载模型时的进度回调函数。
devicestring推理设备(如 cpugpu)。
poolingstring特征提取时的池化方式(如 meanmax)。
normalizeboolean是否对特征向量进行归一化(默认 false)。

示例

const extractor = await pipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2', {local_files_only: true, // 仅从本地加载revision: 'main',       // 使用主分支版本pooling: 'mean',        // 使用均值池化normalize: true,        // 对输出向量归一化
});

返回值

pipeline 返回一个 推理函数,可以直接用于处理输入数据。具体返回值类型取决于任务类型。

示例

// 特征提取任务
const extractor = await pipeline('feature-extraction');// 使用推理函数
const sentences = ['This is an example sentence'];
const embeddings = await extractor(sentences, { pooling: 'mean' });
console.log(embeddings);


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/71402.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++学习篇】智能指针

目录 1. 智能指针的使用场景分析 2. RAII和智能指针的设计思路 3. C标准库智能指针的使用 4.shared_ptr和weak_ptr 4.1shared_ptr的循环引用问题 4.2 weak_ptr 1. 智能指针的使用场景分析 下⾯程序中我们可以看到,new了以后,我们也delete了&#xff0c…

IntelliJ IDEA集成MarsCode AI

IntelliJ IDEA集成MarsCode AI IDEA中安装插件 安装完毕之后登录自己的账号 点击链接,注册账号 https://www.marscode.cn/events/s/i5DRGqqo/ 可以选择不同的模型

日期格式与字符串不匹配bug

异常特征:java.lang.IllegalArgumentException: invalid comparison: java.time.LocalDateTime and java.lang.String ### Error updating database. Cause: java.lang.IllegalArgumentException: invalid comparison: java.time.LocalDateTime and java.lang.Str…

C++中的无锁编程

引言 在当今多核处理器普及的时代,并发编程已成为高性能应用程序开发的关键技术。传统的基于锁的同步机制虽然使用简单,但往往会带来性能瓶颈和死锁风险。无锁编程(Lock-Free Programming)作为一种先进的并发编程范式&#xff0c…

FastGPT 引申:借鉴 FastGPT 基于MySQL + ES 实现知识库(含表结构以及核心代码)

文章目录 FastGPT 引申:借鉴 FastGPT 基于MySQL ES 实现知识库(含表结构以及核心代码)一、整体思路二、存储结构2.1 MySQL 表结构(1) knowledge_base_dataset(2) knowledge_base_data(3) knowledge_base_index(4) ai_kb_relation 2.2 Elasti…

Python学习(十四)pandas库入门手册

目录 一、安装与导入二、核心数据结构2.1 Series 类型(一维数组)2.2 DataFrame 类型(二维数组) 三、数据读取与写入3.1 读取 CSV 和 Excel 文件3.2 写入数据 四、数据清洗与处理4.1 处理缺失值4.2 数据筛选4.3 数据排序 五、数据分…

【Python 数据结构 4.单向链表】

目录 一、单向链表的基本概念 1.单向链表的概念 2.单向链表的元素插入 元素插入的步骤 3.单向链表的元素删除 元素删除的步骤 4.单向链表的元素查找 元素查找的步骤 5.单向链表的元素索引 元素索引的步骤 6.单向链表的元素修改 元素修改的步骤 二、Python中的单向链表 ​编辑 三…

第1章:项目概述与环境搭建

第1章:项目概述与环境搭建 学习目标 了解YunChangAction灵感记录应用的整体架构和功能掌握SwiftUI开发环境的配置方法创建项目基础结构并理解文件组织方式实现应用的启动屏幕和基本主题设置 理论知识讲解 灵感记录应用概述 灵感记录应用是一种专门设计用来帮助…

2025.3.3总结

周一这天,我约了绩效教练,主要想了解专业类绩效的考核方式以及想知道如何拿到一个更好的绩效。其他的岗位并不是很清楚,但是专业类的岗位,目前采取绝对考核,管理层和专家岗采取相对考核,有末尾淘汰。 通过…

FastGPT 源码:基于 LLM 实现 Rerank (含Prompt)

文章目录 基于 LLM 实现 Rerank函数定义预期输出实现说明使用建议完整 Prompt 基于 LLM 实现 Rerank 下边通过设计 Prompt 让 LLM 实现重排序的功能。 函数定义 class LLMReranker:def __init__(self, llm_client):self.llm llm_clientdef rerank(self, query: str, docume…

LeetCode 1745.分割回文串 IV:动态规划(用III或II能直接秒)

【LetMeFly】1745.分割回文串 IV:动态规划(用III或II能直接秒) 力扣题目链接:https://leetcode.cn/problems/palindrome-partitioning-iv/ 给你一个字符串 s ,如果可以将它分割成三个 非空 回文子字符串,…

25年3月5日

1.思维导图 2.不太会 #include "head.h" int main(int argc, const char *argv[]) {int fdopen("../xiaoxin.bmp","O_RDONLY");if(fd-1)printf("open error");//大小struct stat st;if(stat("…

全球首创!微软发布医疗AI助手,终结手写病历时代

今天凌晨,微软发布了医疗界首个用于临床工作流程的AI助手Microsoft Dragon Copilot。 Dragon Copilot是基于语音文本的混合架构,能够将医生的语音或临床口述内容实时转换为文本。例如,医生可以通过语音输入患者的病历信息、医嘱或诊断结果&a…

[自动驾驶-传感器融合] 多激光雷达的外参标定

文章目录 引言外参标定原理ICP匹配示例参考文献 引言 多激光雷达系统通常用于自动驾驶或机器人,每个雷达的位置和姿态不同,需要将它们的数据统一到同一个坐标系下。多激光雷达外参标定的核心目标是通过计算不同雷达坐标系之间的刚性变换关系&#xff08…

Blazor-路由模板(下)

路由约束 类型约束 我们这里使用{id:int}限制路由&#xff0c;id为int类型&#xff0c;并且路由参数 id 对应的 Id 属性也必须是 int 类型。我们试试能否正常访问 page "/demoPage/{id:int}" <h3>demoPage</h3> <h2>路由参数Id&#xff1a;Id&l…

多线程-JUC源码

简介 JUC的核心是AQS&#xff0c;大部分锁都是基于AQS扩展出来的&#xff0c;这里先结合可重入锁和AQS&#xff0c;做一个讲解&#xff0c;其它的锁的实现方式也几乎类似 ReentrantLock和AQS AQS的基本结构 AQS&#xff0c;AbstractQueuedSynchronizer&#xff0c;抽象队列…

通过多线程获取RV1126的AAC码流

目录 一RV1126多线程获取音频编码AAC码流的流程 1.1AI模块的初始化并使能 1.2AENC模块的初始化 ​​​​​​​1.3绑定AI模块和AENC模块 ​​​​​​​1.4多线程获取每一帧AAC码流 ​​​​​​​1.5每个AAC码流添加ADTSHeader头部 ​​​​​​​1.6写入具体每一帧AAC的…

JVM常用概念之对象初始化的成本

在JVM常用概念之新对象实例化博客中我讲到了对象的实例化&#xff0c;主要包含分配&#xff08;TLAB&#xff09;、系统初始化、用户初始化&#xff0c;而我在JVM常用概念之线程本地分配缓冲区&#xff08;ThreadLocal Allocation Buffer&#xff0c;TLAB&#xff09;博客中也讲…

java后端开发day27--常用API(二)正则表达式爬虫

&#xff08;以下内容全部来自上述课程&#xff09; 1.正则表达式&#xff08;regex&#xff09; 可以校验字符串是否满足一定的规则&#xff0c;并用来校验数据格式的合法性。 1.作用 校验字符串是否满足规则在一段文本中查找满足要求的内容 2.内容定义 ps&#xff1a;一…

AI---DevOps常备工具(‌AI-Integrated DevOps Essential Tools)

AI---DevOps常备工具 技术领域正在迅速发展&#xff0c;随着我们步入 2025 年&#xff0c;有一点是明确的&#xff1a;人工智能&#xff08;AI&#xff09;不再只是一个流行词&#xff0c;它是每个 DevOps 工程师都需要掌握的工具。随着云环境的复杂性增加、对更快部署的需求以…