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.pswp.cn/web/71402.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71402.shtml
英文地址,請注明出處:http://en.pswp.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 工程師都需要掌握的工具。隨著云環境的復雜性增加、對更快部署的需求以…