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

news2025/3/6 12:41:53

本篇通过将句子数组转换为句子的向量表示,并通过平均池化和归一化处理,生成适合机器学习或深度学习任务使用的特征向量为例,演示通过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:12502
      Error.captureStackTrace(err, this);
            ^

TypeError: fetch failed
    at node:internal/deps/undici/undici:12502:13
    at 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 Error
      at onConnectTimeout (node:internal/deps/undici/undici:6635:28)
      at node:internal/deps/undici/undici:6587:50
      at 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.coloradmin.cn/o/2310537.html

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

相关文章

ASP.NET Core JWT认证与授权

1.JWT结构 JSON Web Token(JWT)是一种用于在网络应用之间安全传输声明的开放标准(RFC 7519)。它通常由三部分组成,以紧凑的字符串形式表示,在身份验证、信息交换等场景中广泛应用。 2.JWT权限认证 2.1添…

【车规芯片】如何引导时钟树生长方向

12nm车规DFTAPR项目中,我们可以看到,绝大部分的sink都受控于xxxx_tessent_occ_clk_cpu_inst/tessent_persistent_cell_clock_out_mux/C10_ctmi_1这个mux,这是我们DFT设计结果: 这里我们重新打开place的数据 Anchor,也就…

《深度学习实战》第11集:AI大模型压缩与加速

深度学习实战 | 第11集:AI大模型压缩与加速 在深度学习领域,随着模型规模的不断增大,模型的推理速度和部署效率成为实际应用中的关键挑战。本篇博客将带你深入了解模型压缩与加速的核心技术,并通过一个实战项目展示如何使用知识蒸…

大语言模型中温度参数(Temperature)的核心原理

大语言模型中温度参数(Temperature)的核心原理是通过调整模型输出的概率分布,控制生成结果的随机性和多样性。以下是其原理的详细说明: 一、定义与核心作用 温度参数是生成式模型(如GPT系列)中的一个超参数…

K8s控制器Deployment详解

回顾 ReplicaSet 控制器,该控制器是用来维护集群中运行的 Pod 数量的,但是往往在实际操作的时候,我们反而不会去直接使用 RS,而是会使用更上层的控制器,比如说 Deployment。 Deployment 一个非常重要的功能就是实现了 Pod 的滚动…

鸿蒙HarmonyOS评论功能小demo

评论页面小demo 效果展示 1.拆解组件,分层搭建 我们将整个评论页面拆解为三个组件,分别是头部导航,评论项,回复三个部分,然后统一在index界面导入 2.头部导航界面搭建 Preview Component struct HmNavBar {// 属性&a…

基于PyTorch的深度学习3——基于autograd的反向传播

反向传播,可以理解为函数关系的反向传播。

打印三角形及Debug

打印三角形及Debug package struct; ​ public class TestDemo01 {public static void main(String[] args) {//打印三角形 五行 ​for (int i 1; i < 5; i) {for (int j 5 ; j >i; j--) {System.out.print(" ");}for (int k1;k<i;k) {System.out.print(&…

大语言模型揭秘:从诞生到智能

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;无疑是技术领域最耀眼的明星之一。它们不仅能够理解人类的自然语言&#xff0c;还能生成流畅的文本&#xff0c;甚至在对话、翻译、创作等任务中表现出接近人类的智能…

Collab-Overcooked:专注于多智能体协作的语言模型基准测试平台

2025-02-27&#xff0c;由北京邮电大学和理想汽车公司联合创建。该平台基于《Overcooked-AI》游戏环境&#xff0c;设计了更具挑战性和实用性的交互任务&#xff0c;目的通过自然语言沟通促进多智能体协作。 一、研究背景 近年来&#xff0c;基于大型语言模型的智能体系统在复…

SpringBoot接入DeepSeek(硅基流动版)+ 前端页面调试(WebSocket连接模式)

文章目录 前言正文一、项目环境二、项目代码2.1 pom.xml2.2 DeepSeekController.java2.3 启动类2.4 logback-spring.xml2.5 application.yaml2.6 WebsocketConfig.java2.7 AiChatWebSocketHandler.java2.8 SaveChatSessionParamRequest.java2.9 index.html 三、页面调试3.1 主页…

LINUX网络基础 [一] - 初识网络,理解网络协议

目录 前言 一. 计算机网络背景 1.1 发展历程 1.1.1 独立模式 1.1.2 网络互联 1.1.3 局域网LAN 1.1.4 广域网WAN 1.2 总结 二. "协议" 2.1 什么是协议 2.2 网络协议的理解 2.3 网络协议的分层结构 三. OSI七层模型&#xff08;理论标准&#xff09; …

由麻省理工学院计算机科学与人工智能实验室等机构创建低成本、高效率的物理驱动数据生成框架,助力接触丰富的机器人操作任务

2025-02-28&#xff0c;由麻省理工学院计算机科学与人工智能实验室&#xff08;CSAIL&#xff09;和机器人与人工智能研究所的研究团队创建了一种低成本的数据生成框架&#xff0c;通过结合物理模拟、人类演示和基于模型的规划&#xff0c;高效生成大规模、高质量的接触丰富型机…

【RAG从入门到精通系列】【RAG From Scratch 系列教程2:Query Transformations】

目录 前言一、概述1-1、RAG概念1-2、前置知识1-2-1、ModelScopeEmbeddings 词嵌入模型1-2-2、FAISS介绍&安装 (向量相似性搜索)1-2-3、Tiktoken 分词工具 二、Rag From Scratch&#xff1a;Query Transformations2-1、前置环境安装2-2、多查询检索器2-2-1、加载网页内容2-2…

通过RK3588的cc-linaro-7.5.0交叉编译器搭建QT交叉编译环境QtCreator(无需编译QT源码)

当我们需要给新的电脑上部署RK3588的QT交叉编译环境时&#xff0c;我们可以将旧电脑上的编译好的qmake直接拷贝到新电脑上并配置好环境。 一、开发环境 1、ubuntu20.04 2、qt5.14.2 3、交叉编译器gcc-linaro-7.5.0 4、已编译好的qt交叉编译器 二、资料下载 链接: https:…

51c自动驾驶~合集53

我自己的原文哦~ https://blog.51cto.com/whaosoft/13431196 #DriveTransformer 上交提出&#xff1a;以Decoder为核心的大一统架构写在前面 & 笔者的个人理解 当前端到端自动驾驶架构的串行设计导致训练稳定性问题&#xff0c;而且高度依赖于BEV&#xff0c;严重限…

CS144 Lab Checkpoint 0: networking warm up

Set up GNU/Linux on your computer 我用的是Ubuntu&#xff0c;按照指导书上写的输入如下命令安装所需的软件包&#xff1a; sudo apt update && sudo apt install git cmake gdb build-essential clang \ clang-tidy clang-format gcc-doc pkg-config glibc-doc tc…

Android ChatOn-v1.66.536-598-[构建于ChatGPT和GPT-4o之上]

ChatOn 链接&#xff1a;https://pan.xunlei.com/s/VOKYnq-i3C83CK-HJ1gfLf4gA1?pwdwzwc# 添加了最大无限积分 删除了所有调试信息 语言&#xff1a;全语言支持

游戏树搜索与优化策略:Alpha-Beta剪枝及其实例分析

1.Alpha-Beta搜索 Alpha-Beta 搜索是一种用于对抗性游戏&#xff08;比如象棋、围棋&#xff09;的智能算法&#xff0c;目的是帮助计算机快速找到“最优走法”&#xff0c;同时避免不必要的计算。它的核心思想是&#xff1a;通过剪掉明显糟糕的分支&#xff0c;大幅减少需要计…

基于Qwen-VL的手机智能体开发

先上Demo&#xff1a; vl_agent_demo 代码如下&#xff1a; 0 设置工作目录&#xff1a; 你的工作目录需要如下&#xff1a; 其中utils文件夹和qwenvl_agent.py均参考自 GitHub - QwenLM/Qwen2.5-VL: Qwen2.5-VL is the multimodal large language model series developed by …